MySQL 基線與容量管理

MySQL基線指標的採集:

關鍵指標

qps
tps
connections
slave_lag
cpu_load

disk load

memory usage

系統指標 採集方式

df
node_exporter
ps
uptime
vmstat / netstat / dstat / iostat

MySQL指標 採集方式

SHOW [TABLE] STATUS
SHOW FULL PROCESSLIST
SHOW OPEN TABLES WHERE In_use> 0
INFORMATION_SCHEMA 庫
PERFORMANCE_SCHEMA 庫
sys 庫
slow query log
mytop/innotop/pt-toolkit
mysqld_exporter

 

MySQL容量管理:

1、數據庫大小估計

一種可靠的方式是 使用解壓後的備份文件(必須是Xtrabackup的物理備份)來估算當前數據庫的體積。 mysqldump這種邏輯備份的方式,不便於直觀的比對數據庫體積的增長。

或者我們可以使用如下SQL 估算data文件體積:

SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS  "DB Size in MB" FROM information_schema.tables;

2、二進制日誌大小估計

統計一天內二進制日誌大小,並將其與expire_logs_days值相乘。設置expire_logs_days非常重要,這樣您就可以正確估算大小。

3、其它文件大小估計

3.1 MySQL在大的查詢過程中,可能會產生巨量臨時表。 【size of largest table * 2 (for tmp/sort files)】

3.2 在做表DDL的時候,操作過程中,需要產生的一個大的臨時表,需要佔據較大的體積。

3.3 ibdata1 、redolog 、slowlog 、general_log 等文件 

3.4 注意tmpdir的路徑及佔據的體積

3.5 本地備份文件(如果有在本地存放備份文件的話)

3.6 至少預留百分之五的空閒磁盤空間留給操作系統使用

4、relaylog的大小估算

某些場景下(例如數據庫體積超過1T),我們可能不再做每週的全量備份,而增加一個延遲複製slave的方式。 這種情況下,需要關注下延遲複製slave所在機器的relay-log的體積(延遲的N小時 * N小時內主庫產生的binlog的體積)。

 

 

容量預測

根據數據庫的歷史監控數據(zabbix 或 prometheus) ,我們可以大致預測數據文件的周增長量、binlog的周增長量 以及系統負載波動的趨勢。

容量解決之道

1、歷史數據歸檔

根據業務場景,按照時間歸檔,遷移歷史數據到大容量廉價低速的磁盤。降低生產環境數據庫體積和負載,較小的表體積,便於數據庫備份和DDL操作。

2、數據分片

2.1 客戶端分片

     sharding-jdbc

2.2 中間件分片

    dble、mycat、cetus


參考文章:

https://www.percona.com/resources/technical-presentations/capacity-planning-your-data-stores-percona-technical-webinars

https://severalnines.com/blog/capacity-planning-mysql-and-mariadb-dimensioning-storage-size

http://www.jebriggs.com/blog/2010/07/mysql-storage-capacity-planning/


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