億級數據量系統數據庫性能優化方案

一、數據庫性能瓶頸主要原因

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。主要解決了單表數據量大問題,從而也就解決了存儲空間帶來的數據庫性能瓶頸。

下一篇文章將重點講解MyCat及其在分庫分表方面的應用,更詳細介紹分庫分表實現方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章