mysql性能排查

1.QPS(每秒Query量) 

每秒查詢量,多次查詢diff
QPS = Questions(or Queries) / seconds 
mysql > show  global  status like 'Question%'; 

2.TPS(每秒事務量) 

TPS = (Com_commit + Com_rollback) / seconds 
mysql > show global status like 'Com_commit'; 
mysql > show global status like 'Com_rollback'; 

3.key Buffer 命中率

對應my.cnf中Key_buffer_size參數設置

mysql>show  global   status  like   'key%'; 
key_buffer_read_hits = (1-key_reads / key_read_requests) * 100% 
key_buffer_write_hits = (1-key_writes / key_write_requests) * 100% 


4.InnoDB Buffer命中率

 

對應innodb_buffer_pool_size參數設置,主要針對InnoDB表性能影響最大的一個參數。功能與Key_buffer_size一樣。InnoDB佔用的內存,除innodb_buffer_pool_size用於存儲頁面緩存數據外,另外正常情況下還有大約8%的開銷,主要用在每個緩存頁幀的描述、adaptive hash等數據結構,一般設置爲機器內存的80%

mysql> show status like 'innodb_buffer_pool_read%'; 
innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100% 

5.Query Cache命中率 

query_cache_size: 主要用來緩存MySQL中的ResultSet,也就是一條SQL語句執行的結果集,所以僅僅只能針對select語句。當我們打開了 Query Cache功能,MySQL在接受到一條select語句的請求後,如果該語句滿足Query Cache的要求(未顯式說明不允許使用Query Cache,或者已經顯式申明需要使用Query Cache),MySQL會直接根據預先設定好的HASH算法將接受到的select語句以字符串方式進行hash,然後到Query Cache中直接查找是否已經緩存。也就是說,如果已經在緩存中,該select請求就會直接將數據返回,從而省略了後面所有的步驟(如SQL語句的解析,優化器優化以及向存儲引擎請求數據等),極大的提高性能

當然,Query Cache也有一個致命的缺陷,那就是當某個表的數據有任何任何變化,都會導致所有引用了該表的select語句在Query Cache中的緩存數據失效。所以,當我們的數據變化非常頻繁的情況下,使用Query Cache可能會得不償失

mysql> show status like 'Qcache%'; 
Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%; 

例如

| Qcache_hits             | 1892463  |

| Qcache_inserts          | 35627  

命中率98.17%=1892463/(1892463 +35627 )*100

 6.Table Cache狀態量 

mysql> show global  status like 'open%'; 

7.Thread Cache 命中率 

mysql> show global status like 'Thread%'; 
mysql> show global status like 'Connections'; 
Thread_cache_hits = (1 - Threads_created / connections ) * 100% 

 

8.鎖定情況

mysql> show global  status like '%lock%'; 
Table_locks_waited/Table_locks_immediate=0.3%  

show open table from XXX(數據庫名);//查看數據庫哪些表正在使用In_use 以及鎖定Name_locked

show global status like 'table_locks%';
Table_locks_immediate 發生表鎖定操作, 但表鎖定後馬上釋放
Table_locks_waited  發生表鎖定, 並因此具有鎖等待

9.主從延遲情況

mysql > show slave status 

10.臨時表情況

mysql > show status like 'Create_tmp%'; 
Created_tmp_disk_tables/Created_tmp_tables比值最好不要超過10%,如果Created_tmp_tables值比較大, 
可能是排序句子過多或者是連接句子不夠優化 

11.Innodb_log_waits

mysql > show status like 'innodb_log_waits';

12.慢查詢情況

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章