內存相關變量(按作用域分類)
全局級:啟動分配、全實例共享
| 參數 | 適用引擎 | 用途 | 調優建議 |
key_buffer_size | MyISAM | 索引鍵緩存 | 專用 MyISAM 實例可設物理內存 25%-50% |
innodb_buffer_pool_size | InnoDB | 數據+索引+自適應哈希+鎖信息+插入緩衝 | 核心參數,專用實例建議 60%-80% 物理內存 |
innodb_additional_mem_pool_size | InnoDB | 內部數據字典/控制結構(5.6.3+ 已廢棄,併入 buffer pool) | 歷史版本設 8-20MB 即可 |
innodb_log_buffer_size | InnoDB | 重做日志緩衝,大事務需調大 | 8-64MB,避免頻繁刷盤 |
query_cache_size | All | 查詢結果緩存(MySQL 8.0 移除) | 高併發寫入場景建議關閉(0),讀多寫少可開 64-256MB |
tmp_table_size | All | 內存臨時表上限,超限轉 MyISAM 磁盤表 | 配合 max_heap_table_size 設 64-256MB,避免磁盤臨時表 |
會話級:每連接獨立分配,併發乘數效應大
| 參數 | 用途 | 默認值 | 調優建議 |
join_buffer_size | 無索引連接的全表掃描緩衝(每張表分配一次) | 256KB | 慎調大,優先加索引;必要時會話級動態調大 |
read_buffer_size | 全表掃描順序讀取緩衝 | 128KB | 大批量掃描可適當調大(如 2-4MB) |
read_rnd_buffer_size | 排序後隨機讀取緩衡(如 ORDER BY 走索引) | 256KB | 大排序場景可調大 |
sort_buffer_size | 結果集排序緩衝(ORDER BY/GROUP BY/DISTINCT) | 256KB | 默認通常足夠,盲目調大反增 CPU/內存開銷;大排序會話級調大 |
thread_stack | 線程棧空間 | 192KB/256KB | 存儲過程/複雜視圖深度調用時需調大(如 512KB-1MB) |
線程管理變量
| 參數 | 作用域 | 用途 | 建議值 |
thread_cache_size | GLOBAL | 緩存空閒線程對象,減少創建/銷毀開銷 | 100-500(視併發峰值),監控 Threads_created 微增為宜 |
max_connections | GLOBAL | 最大併發連接數 | 業務峰值 + 余量,防連接風暴;配合連接池使用 |
內存佔用估算公式(理論上限)
總內存 ≈ 全局緩衝之和
+ (read_buffer_size + read_rnd_buffer_size + sort_buffer_size + join_buffer_size + thread_stack) * max_connections
+ 額外開銷(解析器、存儲引擎私有結構等)
警示:會話級參數乘以 max_connections 為理論峰值,實際佔用通常僅 10%-30%。請監控 PS aux VSZ 實際走勢而非死記公式。