針對 2GB 記憶體伺服器的實測調優記錄,9 大核心參數含預設值、調整值、調整依據與監控指標。
| 參數 | 預設值 | 調整值 | 作用與調整依據 | 監控指標 |
|---|---|---|---|---|
back_log | 50 | 500 | TCP 監聽隊列長度。SHOW PROCESSLIST 出現大量 unauthenticated user 待連進程時調大。 | Threads_connected, Aborted_connects |
interactive_timeout | 28800 | 7200 | 互動式連線空閒斷開秒數。降低釋放殭屍連線。 | Threads_connected, Sleep 狀態數 |
key_buffer_size | 8MB | 400MB | MyISAM 索引塊緩衝。設為物理記憶體 20~25%,過大導致 Swap。 | Key_read_requests, Key_reads |
max_connections | 100 | 1024 | 最大並發連線。避免 Too many connections,需配合檔案描述符 ulimit -n。 | Max_used_connections, Threads_connected |
record_buffer (read_buffer_size) | 128KB | 16MB | 順序掃描緩衝。大量全表掃描查詢時調大。 | Select_scan, Handler_read_rnd_next |
sort_buffer_size | 2MB | 16MB | 排序緩衝。加速 ORDER BY/GROUP BY,每連線獨佔,慎防 OOM。 | Sort_merge_passes, Sort_rows |
table_cache (table_open_cache) | 64 | 512 | 表快取數。每表佔 2 檔案描述符,配合 open_files_limit。 | Open_tables, Opened_tables |
thread_cache_size | 0 | 80 | 執行緒快取。對比 Connections vs Threads_created,降低建立執行緒開銷。 | Threads_created, Connections |
wait_timeout | 28800 | 7200 | 非互動連線空閒斷開秒數。同 interactive_timeout 通常設同值。 | Threads_connected, Aborted_clients |
# 編輯 /etc/my.cnf (或 /etc/mysql/my.cnf)
[mysqld]
back_log = 500
interactive_timeout = 7200
key_buffer_size = 400M
max_connections = 1024
read_buffer_size = 16M
sort_buffer_size = 16M
table_open_cache = 512
thread_cache_size = 80
wait_timeout = 7200
# 重啟生效
systemctl restart mysqld # 或 service mysql restart
參數調優是持續迭代過程,而非一次性銀彈。