| 參數 | 建議值 | 說明 |
|---|---|---|
| max_connections | 應用峰值併發 + 緩衝 (通常 500-2000) | 每連線消耗會話記憶體,過大導致 OOM |
| max_allowed_packet | 64MB-1GB | 大欄位/批次操作需求,mysqldump 需更大 |
| thread_cache_size | 100-256 (或 max_connections 10%) | 緩存執行緒避免頻繁建銷,Threads_created 穩定即佳 |
| aborted_connects | 監控計數器 | 持續增長 = 連線錯誤 (網路、認證、SSL) |
注意:MySQL 8.0 移除 Query Cache (縮放性差、鎖爭用劇烈)。5.7 及以前版本參考:
| 參數 | 建議 |
|---|---|
| query_cache_type | DEMAND (按需,SQL_CACHE 提示才快取) |
| query_cache_size | 64MB-256MB (過大鎖爭用反而慢) |
| query_cache_limit | 1MB-4MB (大結果集不快取) |
| query_cache_min_res_unit | 4KB-8KB (減少碎片) |
命中率公式:Qcache_hits / (Qcache_hits + Com_select)。
現代替代:應用層快取 (Redis/Memcached)、資料庫層面結果集快取 (ProxySQL、Vitess)。
| 參數 | 建議值 | 說明 |
|---|---|---|
| tmp_table_size | 64MB-256MB | 記憶體暫存表上限,超過轉 MyISAM 磁碟表 |
| max_heap_table_size | 同 tmp_table_size | 實際生效值為兩者較小者 |
關鍵:含 BLOB/TEXT/JSON、GROUP BY/DISTINCT 無索引、UNION 等強制磁碟暫存表。
優化策略:
1. 縮小結果集 (只選需要欄位)
2. 加索引支援排序/群組
3. 分頁查詢避免大 OFFSET
4. 監控 Created_tmp_disk_tables / Created_tmp_tables 比率
每連線獨立分配,總量 = 單值 × 併發數,必須極度謹慎:
| 參數 | 預設 | 建議值 | 調整策略 |
|---|---|---|---|
| read_buffer_size | 128KB | 256KB-1MB | 全表掃描頻繁時調大,會話級 SET SESSION |
| read_rnd_buffer_size | 256KB | 1MB-2MB | 排序後隨機讀取,會話級調大 |
| sort_buffer_size | 256KB | 1MB-2MB | ORDER BY/GROUP BY 排序,會話級調大 |
| join_buffer_size | 256KB | 1MB-2MB | 無索引 JOIN (Block Nested Loop),會話級調大 |
| binlog_cache_size | 32KB | 64KB-256KB | 大交易二進位日誌快取 |
實測法:啟動所有連線 → top -p 觀察 VIRT/RES 穩定值 → 扣除基礎記憶體 → 除以連線數 = 實際會話均攤。
| 參數 | 建議值 | 說明 |
|---|---|---|
| slow_query_log | ON | 啟用 |
| slow_query_log_file | /var/log/mysql/slow.log | 專用磁碟、logrotate |
| long_query_time | 0.5-1 秒 (5.7.21+ 支援微秒) | 微秒級:0.05 = 50ms,早期發現問題 |
| log_queries_not_using_indexes | ON | 記錄全表掃描,配合 log_throttle_queries_not_using_indexes 限流 |
| log_slow_admin_statements | ON | 記錄管理指令 (ALTER, ANALYZE 等) |
| log_slow_slave_statements | ON | 記錄複寫慢 SQL |
mysqldumpslow -s t -t 20 /var/log/mysql/slow.log:內建彙總pt-query-digest (Percona Toolkit):深度分析、指紋分組、EXPLAIN 關聯sys.schema_table_statistics / sys.statements_with_full_table_scans:系統視圖快速定位caching_sha2_password、innodb_dedicated_server=ON 自動調整記憶體innodb_buffer_pool_size (實體 RAM 70-80%)、innodb_log_file_size (1-4GB)、innodb_flush_log_at_trx_commit=1