MySQL 效能調校核心在於四大面向:連線處理、查詢快取、暫存表管理、會話記憶體分配。本文系統化整理關鍵參數與調整策略。
| 參數 | 說明 | 調整建議 |
|---|---|---|
max_connections | 最大並發連線數 | Web 伺服器 max clients 略大,觀察 Max_used_connections |
max_allowed_packet | 單次封包最大值 | 大欄位/遠端備份需調大(如 64M) |
thread_cache_size | 執行緒快取數 | 觀察 Threads_created 快速增長時調大(如 50-100) |
aborted_connects | 連線錯誤計數器 | 持續增長表示客戶端連線異常,需排查 |
注意:MySQL 8.0 已移除 Query Cache,本節適用 5.7 及之前版本。
| 參數 | 說明 | 調整公式/建議 |
|---|---|---|
query_cache_type | 快取模式 | ON / DEMAND(需 SQL_CACHE) |
query_cache_size | 快取總大小 | 64M-256M,過大鎖競爭反而降效能 |
query_cache_limit | 單一查詢結果上限 | 1M-4M,超過不快取 |
query_cache_min_res_unit | 快取區塊最小單位 | 依 (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache 計算平均大小調整 |
命中率監控:Qcache_hits / (Qcache_hits + Com_select)。
tmp_table_size、max_heap_table_size:記憶體暫存表上限,**取兩者較小值**;超過自動轉 MyISAM 磁碟表。BLOB/TEXT 欄位的查詢**直接寫磁碟**,無法用記憶體暫存表。SELECT *),而非單純調大參數。| 參數 | 用途 | 基礎建議值 | 會話層可調大 |
|---|---|---|---|
read_buffer_size | 循序掃描緩衝 | 128K-256K | 是 |
read_rnd_buffer_size | 排序/ORDER BY 隨機讀取 | 256K-1M | 是 |
sort_buffer_size | 排序緩衝 | 1M-2M | 是(特定查詢可設更大) |
join_buffer_size | 無索引 JOIN 緩衝 | 1M-2M | 是 |
top -p $(pidof mysqld) 觀察 VIRT 穩定值。key_buffer_size + innodb_buffer_pool_size + ...)。SET SESSION sort_buffer_size=16M。