一、連接相關
| 參數 | 說明 | 調優建議 |
| max_connections | 最大連接數,每連接消耗會話內存 | 按峰值並發 + 余量設置,避免過大導致 OOM |
| max_allowed_packet | 最大數據包,影響大結果集傳輸、mysqldump | 大字段/遠程備份場景調大(如 64M-256M) |
| aborted_connects | 連接失敗計數器 | 持續增長說明客戶端連接異常,需排查 |
| thread_cache_size | 線程緩存,減少創建/銷毀開銷 | 200-500 之間,觀察 Threads_created 增長調整 |
二、查詢緩存
| 參數 | 說明 |
| query_cache_type | 0=關,1=開,2=按需(推薦) |
| query_cache_size | 總緩存內存,0 表關閉 |
| query_cache_limit | 單查詢結果超過此值不緩存 |
| query_cache_min_res_unit | 緩存塊最小單元,按平均大小調整減碎片 |
監控公式:
命中率 = Qcache_hits / (Qcache_hits + Com_select)
平均塊大小 = (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache
三、臨時表
tmp_table_size、max_heap_table_size:內存臨時表上限,取兩者較小值
- 超限轉磁盤 MyISAM 表,性能驟降
- 優先優化 SQL 減少臨時表,而非單純調大參數
- 含 BLOB/TEXT 列的表直接建磁盤表,參數無效
四、會話內存(每連接獨享)
| 參數 | 用途 | 建議值 |
| read_buffer_size | 全表掃描順序讀緩衝 | 128K-256K |
| sort_buffer_size | 排序緩衝 | 1M-2M,會話級按需調大 |
| join_buffer_size | 無索引 JOIN 緩衝 | 1M-2M,會話級按需調大 |
| read_rnd_buffer_size | 隨機讀/排序緩衝 | 1M,會話級按需調大 |
實測法:啟動所有連接,觀察 top -p mysqld_pid 的 VIRT 列穩定值,減去靜態內存,除以連接數得人均會話內存。
五、慢查詢日誌
| 參數 | 說明 |
| slow_query_log | ON 開啟,指定文件路徑 |
| long_query_time | 閾值,預設 10s,建議 1s 或更低(微秒級需 5.1.21+) |
| log_queries_not_using_indexes | ON 記錄無索引查詢(全表掃描) |
善用 mysqldumpslow 分析日誌,定期清理舊日誌釋放磁盤。