1. 程式人生 > 實用技巧 >MySQL監控項

MySQL監控項

一、server層監控

  1. Max_used_connections: 伺服器啟動後已經同時使用的連線的最大數量。獲取方式:show global status
  2. Connections: 試圖連線到(不管是否成功)MySQL伺服器的連線數。獲取方式:show global status
  3. com_select: 讀操作的數量。獲取方式:show global status
  4. com_insert: insert操作的數量。獲取方式:show global status
  5. com_update: update操作的數量。獲取方式:show global status
  6. com_delete: delete操作的數量。獲取方式:show global status
  7. com_commit: commit操作的數量。獲取方式:show global status
  8. com_rollback: rollback操作的數量。獲取方式:show global status 通過上述變數計算一下QPS和TPS,計算方式見監控項2。
  9. Slow_queries:查詢時間超過long_query_time秒的查詢的個數。獲取方式:show global status
  10. long_query_time:資料庫查詢日誌超過多少秒便判定為慢查詢,單位是秒。獲取方式:show global variables
  11. slow_query_log:是否開啟慢日誌。獲取方式show global variables
  12. Select_full_join:在表連線操作過程中出現全表掃描的次數。獲取方式:show global status
  13. Created_tmp_tables:表示在執行語句的過程中建立內部臨時表的個數。獲取方式:show global status
  14. binlog_cache_disk_use:表示binlog的快取使用臨時檔案的次數。如果經常>0,需要調大binlog_cache_size的快取。注意binlog_cache_size的快取不能調整太大,因為每個session會分配一個binlog_cache_size快取空間。獲取方式:show global status
  15. aborted_connects:資料庫嘗試連線失敗次數。獲取方式:show global status
  16. max_connect_errors:資料庫最大連線錯誤次數。獲取方式:show global variables
  17. aborted_connects/max_connect_errors*100%:資料庫嘗試連線失敗次數/資料庫最大連線次數。當值大於50%是需要執行flush host命令重新整理主機快取。建議值<50%。獲取方式:show global status和show global variables
  18. aborted_clients:資料庫放棄的連線個數。獲取方式:show global status
  19. select * from information_schema.processlist WHERE TIME > 1 AND INFO like "select%"; ##抓取慢日誌(每分鐘將執行的結果放入到自己的庫中,可以讓使用者自己選擇慢日誌的時長。如果使用者不想開慢日誌可以採取這樣的方式)
  20. table open cache efficiency(表開啟快取效率)
table open cache efficiency = Table_open_cache_hits/(Table_open_cache_misses+ Table_open_cache_hits)
select * from performance_schema.global_status where variable_name in ('Table_open_cache_hits','Table_open_cache_misses');

  21.incoming netword traffic(Bytes/Second)(每秒從所有客戶端接收的位元組數)

incoming netword traffic(Bytes/Second)= Bytes_received/Uptime;
select * from performance_schema.global_status where variable_name in ('Bytes_received','Uptime');

  22.Outgoing Network Traffic(Kbytes/Second)(每秒傳送給所有客戶端的千位元組數)

Outgoing Network Traffic(Kbytes/Second)= Bytes_sent/Uptime/1024;
select * from performance_schema.global_status where variable_name in ('Bytes_sent','Uptime');

  23.transaction_isolation:例項的隔離級別。

show global variables like 'transaction_isolation';

  

二、InnoDB引擎層監控

2.1、鎖相關的

1、檢視此時有多少個鎖等待

select count(*) from information_schema.INNODB_LOCKS;

2、innodb_row_lock_waits:資料庫執行以來一共發生了多少次行鎖等待

show global status where variable_name ='innodb_row_lock_waits';

3、Innodb_row_lock_current_waits: InnoDB表上當前等待的行鎖數。獲取方式:show global status

4、Innodb_row_lock_time: 獲取innodb行鎖需要等待的時間,單位:毫秒。獲取方式:show global status

5、Innodb_row_lock_time_max:獲取InnoDB錶行鎖的最長時間,單位:毫秒。獲取方式:show global status

2.2、innodb buffer相關的

1、Innodb_buffer_pool_wait_free: Innodb的IO執行緒從資料檔案中讀取了資料要寫入buffer pool的時候,需要等待空閒頁的次數。如果該值太大,需要增加innodb_buffer_pool_size。獲取方式:show global status

2、Innodb_log_waits: 因為日誌緩衝(log buffer)不足導致等待的次數。該值如果太大,需要增大innodb_log_buffer_size的值。獲取方式:show global status

3、Innodb buffer pool usege rete(innodb buffer pool使用率):業務高峰建議值不超過95%。

Innodb buffer pool usege rete=innodb_buffer_pool_pages_data/innodb_buffer_pool_pages_total x 100%  ##可以參考這個值以及結合其它狀態來判斷是否增加innodb_buffer_pool_size。

select * from performance_schema.global_status where variable_name in ('innodb_buffer_pool_pages_data','innodb_buffer_pool_pages_total');

4、Innodb Buffer pool hit rate(innodb buffer pool命中率)(建議值不低於98%。):

獲取方式一:

show engine innodb status,然後檢視BUFFER POOL AND MEMORY節中的Buffer pool hit rate。

獲取方式二:

Innodb Buffer pool hit rate=Innodb_buffer_pool_read_requests/(Innodb_buffer_pool_read_requests+Innodb_buffer_pool_reads+Innodb_buffer_pool_read_ahead)

select * from performance_schema.global_status where variable_name in ('Innodb_buffer_pool_read_requests','Innodb_buffer_pool_reads','Innodb_buffer_pool_read_ahead');

5、innodb_dblwr_pages_written/innodb_dblwr_writes:資料庫的寫入壓力。

Innodb_dblwr_pages_written表示double write一共寫了多少頁,Innodb_dblwr_writes表示double write實際寫入次數。如果innodb_dblwr_pages_written/innodb_dblwr_writes大於64說明寫入壓力很高。獲取方式:show global status。相對於醫院可以考慮降低一半,大於32報警。

6、hash searches/s:每秒使用自適應雜湊索引的次數。通過檢視這個值來判斷是否禁用自適應雜湊索引。獲取方式:show engine innodb status

2.3、其它

1、檢視當前innodb表建立的innodb臨時表(支援5.7和8.0)。

select count(*) from information_schema.INNODB_TEMP_TABLE_INFO;

2、檢視自啟動以來innodb表的插入、刪除、更新、查詢的行數(需要開啟計數器set global innodb_monitor_enable = all;)

SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME='dml_inserts';
SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME='dml_deletes';
SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME='dml_updates';
SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME='dml_reads';

  

三、安全方面

3.1、是否有使用者有grant,super,drop等危險的許可權。

select user,host from mysql.user where (Drop_priv='Y' OR Grant_priv='Y' OR Super_priv='Y' OR Alter_priv='Y' OR Shutdown_priv='Y' OR Lock_tables_priv='Y') and user not in ('mysql.session');

  

3.2、鎖定的使用者

8.0:

SELECT USER,HOST FROM mysql.user where account_locked='Y' AND USER NOT IN ('mysql.session','mysql.sys','mysql.infoschema');

5.7:

SELECT USER,HOST FROM mysql.user where account_locked='Y' AND USER NOT IN ('mysql.session','mysql.sys');

5.6以下包括5.6,沒有鎖定使用者的功能。

1.3 設定密碼過期的使用者

select user,host from mysql.user where password_expired = 'Y';

上面的語句是找到建立時建立就指定了過期的語句,例如下面的語句。

CREATE USER 'jeffrey'@'%' IDENTIFIED by '123456a!' password expire;

1.4 使用者密碼即將過期的天數

1、確認系統是設定了 default_password_lifetime 變數值。

show global variables like 'default_password_lifetime';

如果為0,表示沒有啟用系統的密碼過期策略,則執行步驟2,就能拿到所有使用者的過期天數。如果不為0,則步驟2和步驟3都要執行。

2、找出指定了密碼過期的使用者(這個優先順序高於系統設定的變數)

SELECT USER,HOST,password_lifetime,password_last_changed,DATEDIFF(ADDDATE(password_last_changed,password_lifetime),CURDATE()) AS dr FROM mysql.user WHERE password_lifetime IS NOT NULL;

dr表示還有幾天到期,如果為負數表示超過到期日期的天數。到期剩餘天數=最後一次修改密碼的時間+password_lifetime-CURDATE()

3、取出使用全域性的密碼過期策略的使用者的到期時間

(由於5.7要開啟show_compatibility_56引數,所以不能一步算出來,需要將default_password_lifetime的值收集到我們的庫裡,然後在進行加減。)

SELECT USER,HOST,password_last_changed,CURDATE() FROM mysql.user WHERE password_lifetime IS NULL;

password_last_changed表示最後一次修改密碼的時間。到期剩餘天數=最後一次修改密碼的時間+default_password_lifetime-CURDATE()

四、任務維度

五、主從複製

六、SQL語句、索引、表