一、資料庫效能瓶頸主要原因
1、資料庫連線
mysql資料庫預設連線為100,我們可以通過配置initialsize、minidle、maxactive等進行調優,但由於硬體資源的限制,資料庫連線不可能無限制的增加,對大型單體應用單例項資料庫可能會出現最大連線數不能滿足實際需求的情況,這時就會系統業務阻塞。
2、表資料量大(空間儲存問題)
普遍觀點認為單錶資料量超過1000萬條時就是出現資料庫讀取效能瓶頸。從索引角度分析,如果索引未被命中,資料庫系統就會全表掃瞄,資料量越大,掃瞄全表的時間就會越長;即使索引被命中了,由於b+tree索引是存放在硬碟上的,資料量越大b+tree層次越深,io次數也就越多。
3、硬體資源限制
硬體資源直接影響qps每秒查詢數/tps每秒事務數。
二、資料效能優化方案
常見的資料效能優化方案:sql優化、快取、建立索引、讀寫分離、分庫分表等。
解決大資料量效能優化,真正有效方案是採用分布式資料儲存,即上面所述讀寫分離和分庫分表。
1、讀寫分離
讀寫分離基於主從複製,採用區別讀、寫多資料來源方式進行資料的儲存和載入。資料的儲存(增刪改)指定寫資料來源,資料的讀取查詢指定讀資料來源。
通過讀寫分離複製與master相同的資料來源(一主多從),多資料來源可以部署到不同主機上,從而可以解決資料裡連線瓶頸和硬體資源限制問題。
2、分庫分表
對資料的庫表進行拆分,用分片的方式對資料進行管理。
資料庫垂直拆分將單一庫拆分多個領域資料庫,使各領域資料庫移植性更好,功能劃分更清晰。同時也能解決資料庫連線、硬體資源限制問題。任何一種方案在解決問題的同時,也會帶來新的問題,分庫分表也不例外,比如關聯查詢變得複雜、分布式事務問題等。
水平拆分是將大表按照一定規則拆分成若干個小表,比如將3000萬資料量的一張單錶user拆分為3個小表user01、user02、user03。主要解決了單錶資料量大問題,從而也就解決了儲存空間帶來的資料庫效能瓶頸。
資料庫資料量達到億級的處理方案猜想
1 分庫這裡就不展開說了 2 關於分表 1 分表應該分兩種情況,第一種是橫向分表 也就是對錶橫切,按照資料量進行拆分。到達何種資料量進行拆分呢?這個看業務區分。2 第二種情況是縱向分表 也就是拆分字段,比如一張表有n個字段,可以根據業務,分成n m塊,這樣單張表的資料會少一些 3 針對橫向分表展開說...
mysql千萬級資料量優化(詳)
1 查詢語句where 子句使用時候優化或者需要注意的 2 like語句使用時候需要注意 3 in語句代替語句 4 索引使用或是建立需要注意 假設使用者表有一百萬使用者量。也就是1000000.num是主鍵 1 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在where及order by 涉及的列上...
mysql資料庫實現億級資料快速清理
今天收到磁碟報警異常,50g的磁碟被撐爆了,分析解決過程如下 1.進入linux伺服器,檢視 mysql 資料夾中各個資料庫所佔的磁碟空間大小 看到了嗎,光olderdb就佔了 25g2.用sqlyog登入 mysql 資料庫,檢視資料庫各個表的占用空間情況 select concat table ...