| 參數 | 說明 | 建議 |
|---|---|---|
max_connections | 最大連線數,每連線佔會話記憶體 | 依應用峰值 + 余量 |
max_allowed_packet | 單次封包上限,大批次導入/導出需調大 | 16M-1G |
aborted_connects | 計數器,增長代表連線錯誤 | 監控告警 |
thread_cache_size | 線程緩存池,減少創建銷毀開銷 | 25-100 (觀察 Threads_created) |
緩存「查詢文本 → 結果集」,表變更即失效。
| 參數 | 說明 |
|---|---|
query_cache_size | 總大小,0 關閉 |
query_cache_limit | 單查詢結果超過此值不緩存 (防大報表佔滿) |
query_cache_min_res_unit | 分配塊大小,依平均結果集調整減少碎片 |
關鍵指標:
Qcache_hit_ratio = Qcache_hits / (Qcache_hits + Com_select)
Avg_query_size = (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache
用 SHOW STATUS LIKE 'qcache%'; 取值。
| 參數 | 說明 |
|---|---|
tmp_table_size | 記憶體臨時表上限 |
max_heap_table_size | HEAP 表上限 |
實際臨界值 = MIN(tmp_table_size, max_heap_table_size)。超過即轉磁碟 MyISAM 表。含 BLOB/TEXT 的查詢直接落磁碟,無法靠調參數解決,需改寫 SQL。
每連線獨享,按需分配。關鍵參數:
| 參數 | 用途 | 建議基礎值 |
|---|---|---|
read_buffer_size | 全表掃描順序讀 | 128K-256K |
sort_buffer_size | 排序緩存 | 1-2 MB |
join_buffer_size | 無索引 JOIN | 1-2 MB |
read_rnd_buffer_size | 隨機讀/排序後讀 | 1 MB |
Session 級可動態調大:SET SESSION sort_buffer_size=16M;。
實測記憶體佔用:啟動所有連線後看 top -p mysqld_pid VIRT 欄位,扣除靜態區即得會話總量。
| 參數 | 說明 |
|---|---|
slow_query_log / log_slow_queries | 開關,預設關閉 |
long_query_time | 閾值 (秒),5.1.21+ 支援微秒 |
log_queries_not_using_indexes | 記錄無索引查詢 (全表掃描) |
建議:先設 1 秒,消除所有慢查詢後改 0.1 秒甚至微秒級,提前發現隱患。
這五大類參數平時少動,效能調優、故障診斷時是核心抓手。配合 SHOW GLOBAL STATUS、SHOW ENGINE INNODB STATUS、慢查詢日誌分析 (pt-query-digest) 形成閉環。