資料庫很大
❶ 資料庫過大該怎麼處理
問題分析:這種問題是由於伺服器的資料庫文件或者日誌太大造成的,那麼我們清理下日誌或者收縮數據
庫就可以了。解決方法:一
第一種解決方案,不限制資料庫文件大小,當然,這是在您的伺服器空間足夠的情況下
二
第二種解決方案,直接清理資料庫日誌文件
我們打開資料庫,然後選擇分離資料庫,找到日誌文件並刪除,然後附加,會自動產生
一個初始的很小的日誌文件
三
第三種收縮資料庫日誌文件,設置資料庫文件或者日誌文件收縮到一定大小就可以。
以上各種解決方案,可以根據不同情況選擇不同方案,為防止對資料庫操作不熟悉,操
作失誤,修改前請先備份好資料庫。
❷ 資料庫訪問量很大時,如何做優化
你好!如果有大量的訪問用到調取到資料庫時,往往查詢速度會變得很慢,所以我們需襪裂要進行優化處理。
優化從三個方面考慮:
sql語句優化、
主從復制,讀寫分離,負載均衡、
資料庫分庫分表。
一、SQL查詢語句優化
1、使用索引
建立索引可以使查詢速度得到提升,我們首先應該考慮在where及orderby,groupby涉及的列上建立索引。
2、藉助explain(查詢優化神器)選擇更好的索引和優化查詢語句
SQL的Explain通過圖形化或基於文本的方式詳細說明了SQL語句的每個部分是如何執行以及何時執行的,以及執行效果。通過對選擇更好的索引列,或者對耗時久的SQL語句進行優化達到對查詢速度的優化。
3、任何地方都不要使用SELECT*FROM語句。
4、不要在索引列做運算或者使用函數
5、查詢盡可能使用limit來減少返回的行數
6、使用查詢緩存,並將盡量多的內存分配給MYSQL做緩存
二、悶談主從復制,讀寫分離,負載均衡
目前大多數的主流關系型資料庫都提供了主從復制的功能,通過配置兩台(或多台)資料庫的主從關系,可以將一台資料庫伺服器的數據更新同步到另一台伺服器上。網站可以利用資料庫這一功能,實現資料庫的讀寫分離,從而改善資料庫的負載壓力。一個系統的讀操作遠遠多於寫操作,因此寫操作發向master,讀操作發向slaves進行操作(簡單的輪詢演算法來決定使用哪個slave)。
利用資料庫的讀寫分離,Web伺服器在寫數據的時候,訪問主資料庫(master),主資料庫通過主從復制將數據更新同步到從資料庫(slave),這樣當Web伺服器讀數據的時候,就可以通過從資料庫獲得數據。這一方案使得在大量讀操作的Web應用可以輕松地讀取數據,而主資料庫也只會承受少量的寫入操作,還可以實現數據熱備份,可謂是一舉兩得。
三、資料庫分表、分區、分庫
1、分表
通過分表可以提高表的訪問效率。有兩種拆分方法:
垂直拆分
在主鍵和一些列放在一個表中,然後把主鍵和另外的列放在另一個表中。如果一個表中某些列常用,而另外一些不常用,則可以採用垂直拆分。
水平拆分
根據一列或者多列數據的值把數據行放到兩個獨立的表中。
2、分區
分區就是把一張表的數據分成多個區塊,這些區塊可以在一個磁碟上,也可以在不同的磁碟上,分區後,表面上還是一張表,但是數據散列在多個位置,這樣一來,多塊硬碟同時處理不同的請求,從而提高磁碟I/O讀寫性能。實現比較簡單,包括水平分區和垂直分區。
3、分庫
分庫是根據業務不同把相關的表切分到不同的資料庫中,比如web、bbs、blog等庫。
分庫解決的是資料庫端並發量的問題。分庫和分表並不一定兩個都要上,比如數據量很大,但是訪問的用戶很少,我們就可以只使用分表不使用分庫。如果數據量只有1萬,而訪問用戶有一千,那就只使用分庫。
注意:分庫分表最難解決的問題是統計,還有跨表的連接(比如螞好碰這個表的訂單在另外一張表),解決這個的方法就是使用中間件,比如大名鼎鼎的MyCat,用它來做路由,管理整個分庫分表,乃至跨庫跨表的連接
❸ mysql資料庫中,數據量很大的表,有什麼優化方案么
個人的觀點,這種大表的優化,不一定上來就要分庫分表,因為表一旦被拆分,開發、運維的復雜度會直線上升,而大多數公司是欠缺這種能力的。所以MySQL中幾百萬甚至小幾千萬的表,先考慮做單表的優化。
單表優化
單表優化可以從這幾個角度出發:
表分區:MySQL在5.1之後才有的,可以看做是水平拆分,分區表需要在建表的需要加上分區參數,用戶需要在建表的時候加上分區參數;分區表底層由多個物理子表組成,但是對於代碼來說,分區表是透明的;SQL中的條件中最好能帶上分區條件的列,這樣可以定位到少量的分區上,否則就會掃描全部分區。
讀寫分離:最常用的櫻桐優化手段,寫主庫讀從庫;
增加緩存:主要的思想就是減少對資料庫的訪問,緩存可以在整個架構中的很多地方,比如:資料庫本身有就緩存,客戶端緩存,資料庫訪問層對SQL語句的緩存,應用程序內的緩存,第三方緩存(如Redis等);
欄位設計:單表不要有太多欄位;VARCHAR的長度盡量只分配真正需要的空間;盡量使用TIMESTAMP而非DATETIME;避免使用NULL,可以通過設置默認值解決。
索引優化:索引不是越多越好,針對性地建立索引,索引會加速查詢,但是對新增、修改、刪除會造成一定的影響;值域很少的欄位不適合建索引;盡量不用UNIQUE,不要設置外鍵,由程序保證;
SQL優化:盡量使用索引,也要保證不要因為錯誤的寫法導致索引失效;比如:避免前導模糊查詢,避免隱式轉換,避免等號左邊做函數運算,in中的元素不宜過多等等;
NoSQL:有一些場景,可以拋棄MySQL等關系型資料庫,擁抱NoSQL;比如:統計類、日誌類、弱結構化的數據;事務要求低的場景。
表拆分
數據量進一步增大的時候,就不得不考慮表拆分的問題了:
垂直拆分:垂直拆分的意思就是把一個欄位較多的表,拆分成多個欄位較少的表;上文中也說過單表的欄位不宜過多,如果初期的表結構設計的就很好,就不會有垂直拆分的問題了;一般來說,MySQL單表的欄位最好不要超過二三十個。
水平拆分:就是我們常說的分庫分表了;分表,解決了單表數據過大的問題,但是畢竟還在同一台資料庫伺服器上,所以明頌裂IO、CPU、網路方面的壓力,並不會得到徹底的緩解,這個可以通過分庫來解決。水平拆分優點很明顯,可以利用多台資料庫伺服器的資源,提高了系統的負載能力;缺點是邏輯會變得復雜,跨節點的數據關聯性能差,維護難度大(特別是擴容的時候)。
希望我的回答,能夠幫助到你!我將持續分享Java開發、架構激閉設計、程序員職業發展等方面的見解。
❹ SQL資料庫文件太大怎麼處理
如果是MSSQL在任務里選資料庫收縮,可以縮小很多。
不然只能把數據導出來減小資料庫了。