絕大多數MySQL性能指標可以通過以下兩種方式獲取:
使用mysqladmin extended-status命令獲得的MySQL的性能指標,默認為累計值。如果想了解當前狀態,需要進行差值計算;加上參數 --relative(-r),就可以看到各個指標的差值,配合參數--sleep(-i)就可以指定刷新的頻率。
(2)Show global status
可以列出MySQL服務器運行各種狀態值,累計值。
mysqladmin extended-status命令及show global status得到的指標項特別多。實際應用中,重點關注以下性能指標:
1. tps/qps
tps: Transactions Per Second,每秒事務數;
qps: Queries Per Second每秒查詢數;
通常有兩種方法計算tps/qps:
方法1:基於 com_commit、com_rollback 計算tps,基於 questions 計算qps。
TPS = Com_commit/s + Com_rollback/s
其中,
Com_commit /s= mysqladmin extended-status --relative --sleep=1|grep -w Com_commit
Com_rollback/s = mysqladmin extended-status --relative --sleep=1|grep -w Com_rollback
QPS 是指MySQL Server 每秒執行的Query總量,通過Questions (客戶的查詢數目)狀態值每秒內的變化量來近似表示,所以有:
QPS = mysqladmin extended-status --relative --sleep=1|grep -w Questions
仿照上面的方法還可以得到,mysql每秒select、insert、update、delete的次數等,如:
Com_select/s = mysqladmin extended-status --relative --sleep=1|grep -w Com_select
Com_select/s:平均每秒select語句執行次數
Com_insert/s:平均每秒insert語句執行次數
Com_update/s:平均每秒update語句執行次數
Com_delete/s:平均每秒delete語句執行次數
方法2: 基於com_%計算tps ,qps
tps= Com_insert/s + Com_update/s + Com_delete/s
qps=Com_select/s + Com_insert/s + Com_update/s + Com_delete/s
2. 線程狀態
threads_running:當前正處於激活狀態的線程個數
threads_connected:當前連接的線程的個數
3. 流量狀態
Bytes_received/s:平均每秒從所有客戶端接收到的字節數,單位KB
Bytes_sent/s:平均每秒發送給所有客戶端的字節數,單位KB
4. innodb文件讀寫次數
innodb_data_reads:innodb平均每秒從文件中讀取的次數
innodb_data_writes:innodb平均每秒從文件中寫入的次數
innodb_data_fsyncs:innodb平均每秒進行fsync()操作的次數
5. innodb讀寫量
innodb_data_read:innodb平均每秒鍾讀取的數據量,單位為KB
innodb_data_written:innodb平均每秒鍾寫入的數據量,單位為KB
6. innodb緩沖池狀態
innodb_buffer_pool_reads: 平均每秒從物理磁盤讀取頁的次數
innodb_buffer_pool_read_requests: 平均每秒從innodb緩沖池的讀次數(邏輯讀請求數)
innodb_buffer_pool_write_requests: 平均每秒向innodb緩沖池的寫次數
innodb_buffer_pool_pages_dirty: 平均每秒innodb緩存池中臟頁的數目
innodb_buffer_pool_pages_flushed: 平均每秒innodb緩存池中刷新頁請求的數目
innodb緩沖池的讀命中率
innodb_buffer_read_hit_ratio = ( 1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100
Innodb緩沖池的利用率
Innodb_buffer_usage = ( 1 - Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total) * 100
7. innodb日志
innodb_os_log_fsyncs: 平均每秒向日志文件完成的fsync()寫數量
innodb_os_log_written: 平均每秒寫入日志文件的字節數
innodb_log_writes: 平均每秒向日志文件的物理寫次數
innodb_log_write_requests: 平均每秒日志寫請求數
8. innodb行
innodb_rows_deleted: 平均每秒從innodb表刪除的行數
innodb_rows_inserted: 平均每秒從innodb表插入的行數
innodb_rows_read: 平均每秒從innodb表讀取的行數
innodb_rows_updated: 平均每秒從innodb表更新的行數
innodb_row_lock_waits: 一行鎖定必須等待的時間數
innodb_row_lock_time: 行鎖定花費的總時間,單位毫秒
innodb_row_lock_time_avg: 行鎖定的平均時間,單位毫秒
9. MyISAM讀寫次數
key_read_requests: MyISAM平均每秒鍾從緩沖池中的讀取次數
Key_write_requests: MyISAM平均每秒鍾從緩沖池中的寫入次數
key_reads : MyISAM平均每秒鍾從硬盤上讀取的次數
key_writes : MyISAM平均每秒鍾從硬盤上寫入的次數
10. MyISAM緩沖池
MyISAM平均每秒key buffer利用率
Key_usage_ratio =Key_blocks_used/(Key_blocks_used+Key_blocks_unused)*100
MyISAM平均每秒key buffer讀命中率
Key_read_hit_ratio=(1-Key_reads/Key_read_requests)*100
MyISAM平均每秒key buffer寫命中率
Key_write_hit_ratio =(1-Key_writes/Key_write_requests)*100
11. 臨時表
Created_tmp_disk_tables: 服務器執行語句時在硬盤上自動創建的臨時表的數量
Created_tmp_tables: 服務器執行語句時自動創建的內存中的臨時表的數量
Created_tmp_disk_tables/Created_tmp_tables比值最好不要超過10%,如果Created_tmp_tables值比較大,可能是排序句子過多或者連接句子不夠優化
12. 其他
slow_queries: 執行時間超過long_query_time秒的查詢的個數(重要)
sort_rows: 已經排序的行數
open_files: 打開的文件的數目
open_tables: 當前打開的表的數量
select_scan: 對第一個表進行完全掃描的聯接的數量
此外,還有一些性能指標不能通過mysqladmin extended-status或show global status直接得到,但是十分重要。
13. response time: 響應時間
Percona提供了tcprstat工具統計響應時間,此功能默認是關閉的,可以通過設置參數query_response_time_stats=1打開這個功能。
有兩種方法查看響應時間:
(1)通過命令SHOW QUERY_RESPONSE_TIME查看響應時間統計;
(2)通過INFORMATION_SCHEMA里面的表QUERY_RESPONSE_TIME來查看。
http://www.orczhou.com/index.php/2011/09/thanks-percona-response-time-distribution/comment-page-1/(參考文章)
14. Slave delay: 備庫延遲
可以在slave節點上執行show slave status\G命令,Seconds_Behind_Master項的值即為slave當前的延時量,單位秒。