在調優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% ,最大連線數設定的比實際大很多,夠用