絕大多數MySQL效能指標可以透過以下兩種方式取得:
#使用mysqladmin extended-status指令獲得的MySQL的效能指標,預設為累計值。 如果想了解目前狀態,需要進行差值計算;加上參數--relative(-r),就可以看到各個指標的差值,配合參數--sleep(-i)就可以指定刷新的頻率。
#可以列出MySQL伺服器運行各種狀態值,累計值。
#mysqladmin extended-status指令及show global status得到的指標項目特別多。實際應用中,重點在於以下效能指標:
#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
#threads_running:目前正處於啟動狀態的執行緒個數
threads_connected:目前連接的執行緒的個數
#Bytes_received/s:平均每秒從所有客戶端接收的位元組數,單位KB
Bytes_sent/s:平均每秒傳送給所有客戶端的位元組數,單位KB
innodb_data_reads:innodb平均每秒從檔案讀取的次數
innodb_data_writes:innodb平均每秒從檔案中寫入的次數
innodb_data_fsyncs:innodb平均每秒進行fsync()操作的次數
innodb_data_read:innodb平均每秒鐘讀取的資料量,單位為KB
innodb_data_written:innodb平均每秒鐘寫入的資料量,單位為KB
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
#innodb_os_log_fsyncs: 平均每秒完成至日誌檔案的fsync()寫入數量
innodb_os_log_written: 平均每秒寫入日誌檔案的位元組數
innodb_log_writes: 平均每秒向日誌檔案的物理寫次數
innodb_log_write_requests: 平均每秒日誌寫入請求數
#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: 行鎖定的平均時間,單位毫秒
#key_read_requests: MyISAM平均每秒鐘從緩衝池中的讀取次數
Key_write_requests: MyISAM平均每秒鐘從緩衝池中的寫入次數
key_reads : MyISAM平均每秒鐘從硬碟上讀取的次數
key_writes : 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
#Created_tmp_disk_tables: 伺服器執行語句時在硬碟上自動建立的臨時表的數量
Created_tmp_tables: 伺服器執行語句時自動建立的記憶體中的臨時表的數量
Created_tmp_disk_tables/Created_tmp_tables比值最好不要超過10%,如果Created_tmp_tables值比較大,可能是排序句子過多或連接句子不夠優化
slow_queries: 執行時間超過long_query_time秒的查詢的個數(重要)
sort_rows: 已經排序的行數
open_files: 開啟的檔案的數目
open_tables: 目前開啟的表格的數量
select_scan: 對第一個表進行完全掃描的聯結的數量
此外,還有一些效能指標不能透過mysqladmin extended-status或show global status直接得到,但是十分重要。
#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/(參考文章)
#可以在slave節點上執行show slave status\G指令,Seconds_Behind_Master項目的值即為slave目前的延遲量,單位秒數。
#以上是詳解MySQL效能指標及計算方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!