MySQL如何計算重要的指標,來確定配置是否正確

katechun發表於2018-07-02
在調優MySQL資料庫和監控資料庫時,很多朋友不知道如何下手,怎麼來確定是不是引數設定的合理,下面給出一些如何計算指標,來確定資料庫引數是否設定合理,希望給大家一些方法,去做MySQL資料庫優化,最好對照一下方法,看看自己的生產庫配置是否有問題。
 
在show global status;檢視各個值。
 
平均檢視是否頻繁開啟表
Opened_tables/Uptime  = xx/s
299304/21062119= 0.0142/s   –每秒不到1次的開啟表,說明都是在記憶體裡快取了,比較理想
 
平均檢視是否頻繁開啟檔案
Opened_files/Uptime = xx/s
732146117/21062119= 34.7613/s     –比較頻繁 ,可能是如下引數比較小,快取少導致
+——————-+——-+
| Variable_name     | Value |
+——————-+——-+
| innodb_open_files | 3000  |
| open_files_limit  | 65535 |
+——————-+——-+
 
平均檢視是否頻繁開啟表結構
Opened_table_definitions/Uptime = xx/s
32631/21062119= 0.0015/s    –每秒不到1次的開啟表結構,說明都是在記憶體裡快取了,比較理想
 
innodb buffer的預讀取是否有用
Innodb_buffer_pool_read_ahead_evicted:預讀取被清理的頁數量
Innodb_buffer_pool_read_ahead:預讀取的頁數量
( 1 – Innodb_buffer_pool_read_ahead_evicted / Innodb_buffer_pool_read_ahead ) *100  =  xx%
( 1 – 149/4896862)*100 =  99.9970%   –此百分比很高,說明預讀取的頁被清理出記憶體的很少,預讀取設定比較理想
 
innodb_read_ahead_threshold:此引數是設定預讀取的頁數,設定0是關閉預讀取功能
 
檢視log file大小是否合適
Innodb_log_waits :log file發生等待的次數,說明log buffer太小或者是重新整理頻繁導致
Innodb_os_log_written :redo日誌寫的位元組數
( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) *100 =  xx%
(1572864000*2/25769803776)*100 = 12.2070%   –使用率,推薦在 1.2% — 50%之間
 
innodb_rollback_on_timeout :超時回滾,儘量關閉
 
平均每秒請求讀指定行資料的次數
Handler_read_rnd
Handler_read_rnd/Uptime  = xx/s
120716896940/21062119 = 5731.4697/s   –可能需要大量的排序,可能需要大量的掃描表或者沒有使用正確索引導致的
 
平均每秒join沒有使用索引的次數
Select_full_join /Uptime = xx/s
723959/21062119 = 0.0344/s  –此值不為0 ,需要注意檢查是否沒有索引
 
join沒有使用索引的百分比
( Select_full_join / Com_select ) * 100 = xx%
(723959/27756137450)*100 = 0.0026%
 
平均每秒join時第一個表全表掃描次數
Select_scan /Update = xx/s
18777133984/ 21062119 = 891.5121/s   –全表掃描次數太多
 
平均每秒的連線次數
Connections /uptime = xx/s
11646933/21062119 =  0.5530/s
 
執行緒建立連線的百分比
Threads_created:執行緒建立連線的次數
( Threads_created / Connections ) *100 = xx%
(69532/11646933)*100 = 0.5970/s
 
( Max_used_connections / max_connections ) *100 = xx%
(875/5512)*100 =  15.8745%   –表示最多使用了設定的最大連線數的15.8% ,最大連線數設定的比實際大很多,夠用

相關文章