MySQL常用效能指標

T1YSL發表於2022-12-12

這裡給大家分享一些MySQL的常用效能指標,可以對此增加一些自定義指標到資料庫的監控裡,如zabbix或者prometheus,來更好的檢測資料庫的狀態。
我的MySQSL版本是5.7.19。因為是自己的測試環境,所以截圖的一些指標很低,僅為大家展示檢視引數的顯示情況。

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.19    |
+-----------+
1 row in set (0.00 sec)

(1) QPS(每秒Query量)

QPS = Questions(or Queries) / seconds

mysql > show  global status like 'Question%';

image.png

(2) TPS(每秒事務量)

TPS = (Com_commit + Com_rollback) / seconds

mysql > show global status like'Com_commit';
mysql > show global status like'Com_rollback';

image.png

(3)key Buffer 命中率

key_buffer_read_hits = (1-key_reads /key_read_requests) * 100%
key_buffer_write_hits = (1-key_writes /key_write_requests) * 100%

mysql>show  global  status  like   'key%';

image.png

(4)InnoDB Buffer命中率

innodb_buffer_read_hits = (1 -innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%

mysql> show status like'innodb_buffer_pool_read%';

image.png

(5)Query Cache命中率

Query_cache_hits = (Qcahce_hits /(Qcache_hits + Qcache_inserts )) * 100%;

mysql> show status like 'Qcache%';

image.png

(6)Table Cache狀態量

mysql> show global  status like 'open%';

比較 open_tables 與opend_tables 值

image.png

(7)Thread Cache 命中率

mysql> show global status like'Thread%';
mysql> show global status like'Connections';

Thread_cache_hits = (1 - Threads_created /connections ) * 100%

image.png

(8)鎖狀態

mysql> show global  status like '%lock%';

Table_locks_waited/Table_locks_immediate=0.0% 如果這個比值比較大的話,說明表鎖造成的阻塞比較嚴重,Innodb_row_lock_waits 和Innodb_row_lock_time_avg太大,說明鎖爭用比較嚴重,有可能是間隙鎖造成的,可以查詢information_schema資料庫中相關表檢視鎖情況,或者透過設定InnoDB Monitors來進一步觀察鎖衝突的表、資料行等,分析原因。

image.png

(9)複製延時

mysql > show slave status;

檢視延時
當前SQL執行緒執行的延時=Read_Master_Log_Pos-Exec_Master_Log_Pos

紅框:
     Master_Log_File: mysql-bin.003590    //當前IO執行緒正在讀取的主伺服器二進位制檔案的名稱
     Read_Master_Log_Pos: 331275450      //當前IO執行緒正在讀取的二進位制日誌的位置
     Relay_Log_File: relaylog.009253     //SQL執行緒當前正在讀取和執行的中繼日誌檔案的名稱
     Relay_Log_Pos: 331275665           //當前中繼日誌裡,SQL執行緒已讀取和執行的位置
     Relay_Master_Log_File: mysql-bin.003590     //由SQL執行緒執行的包含多數近期事件的主伺服器二進位制日誌檔案的名稱
黃框:
     Slave_IO_Running: Yes         //IO執行緒是否被啟動併成功的連線到主伺服器上
     Slave_SQL_Running: Yes        //SQL執行緒是否被啟動
藍框:
     Last_Errno: 0                //是記錄系統的最後一次錯誤程式碼
綠框:
     Exec_Master_Log_Pos: 331275450      //是SQL執行緒執行中繼日誌中相對於主庫bin log的位點。Read_Master_Log_Pos減去Exec_Master_Log_Pos可以表示當前SQL執行緒執行的延時
     Relay_Log_Space: 331275954        //所有原有的中繼日誌結合起來的總大小

image.png

(10) Tmp Table 狀況(臨時表狀況)

mysql > show status like 'Created_tmp%';

Created_tmp_disk_tables/Created_tmp_tables比值最好不要超過10%,如果Created_tmp_tables值比較大,可能是排序句子過多等原因。
image.png

(11) Binlog Cache 使用狀況

mysql > show status like'Binlog_cache%';

如果Binlog_cache_disk_use值不為0 ,可能需要調大 binlog_cache_size大小
image.png

(12) Innodb_log_waits 量

mysql > show status like'innodb_log_waits';

Innodb_log_waits是等待日誌緩衝刷出的次數,如果值不等於0的話,並且持續增長,表明 innodb log buffer 因為空間不足而等待,可以考慮增大innodb_log_buffer_size。

image.png

(13)open file and table

mysql> show global status like 'Open_files';
mysql> show global status like 'Open_tables';

image.png

(14) 慢查詢

開啟慢查詢:

編輯/etc/my.cnf,在[mysqld]域中新增:
         slow_query_log= 1   # 開啟慢查詢
         slow_query_log_file=/data/mysql/slow.log   # 慢查詢日誌路徑
         long_query_time= 1        # 慢查詢的時長

檢視慢查詢數量:

[mysql@mogdb-kernel-0005 ~]$ mysqladmin -u root -pmysql status

image.png

(15)通用查詢日誌

檢視通用查詢日誌狀態:

mysql> show global variables like 'general_log';

image.png
開啟通用查詢日誌:

mysql>  set global general_log=on;複製

注意開啟通用查詢日誌會消耗伺服器效能,一般只有在排查問題時才會短暫開啟。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2927746/,如需轉載,請註明出處,否則將追究法律責任。

相關文章