1. 程式人生 > >MySQL性能指標及計算方法(go)

MySQL性能指標及計算方法(go)

connected ive extend 差值 服務器 當前 技術 data files

絕大多數MySQL性能指標可以通過以下兩種方式獲取:

(1)mysqladmin

使用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當前的延時量,單位秒。

技術分享

MySQL性能指標及計算方法(go)