[mysqld]
log-slow-queries
long_query_time = 5
log-queries-not-using-indexes # MySQL 4.1+
hostname-slow.log(數據目錄)。mysqldumpslow —— 自動歸一化參數,統計頻次,定位高負載查詢。
query_cache_size = 32M # 啟用 32MB 緩存
| 變量 | 含義 | 健康判讀 |
|---|---|---|
| Qcache_hits | 命中次數 | 命中率 = 1 - Qcache_inserts/Qcache_hits,>80% 良好 |
| Qcache_lowmem_prunes | 內存不足剔除次數 | 持續增長 → 碎片嚴重或內存不足 |
| Qcache_free_memory | 空閒內存 | 過低需擴容 |
| Qcache_free_blocks | 空閒塊數 | 過大 → 碎片化,執行 FLUSH QUERY CACHE |
警惕:緩存過大(>128MB)導致 FLUSH QUERY CACHE 耗時長、阻塞寫入,反而拖慢性能。
max_connections = 500
wait_timeout = 10
max_connect_errors = 100
max_connections:類比 Apache MaxClients,防連接風暴。wait_timeout:空閒連接回收,LAMP 典型請求毫秒級,10s 足夠;持久連接環境慎調低。max_connect_errors:防暴力掃描誤封禁,100 次失敗才封鎖主機。| 參數 | 作用 | 調優指標 | 經驗值 |
|---|---|---|---|
| table_cache / table_open_cache | 表文件描述符緩存 | Opened_tables 快增 → 擴大 | 5000+ |
| thread_cache_size | 線程緩存 | Threads_created 快增 → 擴大 | 40-100 |
| key_buffer_size | MyISAM 索引塊緩存 | Key_reads/Key_read_requests > 0.1% → 擴大 | 384M+ |
| tmp_table_size / max_heap_table_size | 內存臨時表上限 | Created_tmp_disk_tables / Created_tmp_tables 比率高 → 擴大 | 64M-256M |
| sort_buffer_size | 排序緩存 | Sort_merge_passes 大 → 擴大 | 4M-8M |
| read_buffer_size / read_rnd_buffer_size | 全表掃描/隨機讀緩存 | Handler_read_rnd_next / Com_select > 4000 → 擴大或優化 SQL | 4M |
會話級參數(sort_buffer_size 等)乘以最大連接數 = 總內存佔用,務必留足 OS 與其他進程內存。
top,實時顯示連接、查詢、緩存命中率、鍵緩存效率,秒級掌握健康度。SHOW STATUS 全維度計算分析,報告極詳盡,適合深度診斷與調優決策。MySQL 調優是「理解組件 → 確定基線 → 調整參數 → 重新評測」的迭代過程。硬件是地基,mysqld 配置是骨架,查詢優化是靈魂。三者缺一不可,系統級視角才能打通 LAMP 全鏈路性能。