參數說明
tmp_table_size
- 控制內部內存臨時表的最大值,每個線程獨立分配
- 實際限制為
MIN(tmp_table_size, max_heap_table_size)
- 超過限制 → 自動轉為磁盤 MyISAM 表(存放於
tmpdir)
- 預設
tmpdir:/tmp/
max_heap_table_size
- 定義用戶可建立的 MEMORY 表大小上限
- 用於計算內存表最大行數
- 動態可變:
SET @max_heap_table_size = #
- 對現有表無效,需
ALTER TABLE / TRUNCATE / 重啟生效
16GB 內存推薦配置
tmp_table_size = 64M
max_heap_table_size = 64M
優化判斷指標
SHOW GLOBAL STATUS LIKE 'Created_tmp%';
-- Created_tmp_disk_tables / Created_tmp_tables < 5% 為健康
優化建議
- 優化查詢避免臨時表(如優化
GROUP BY、ORDER BY)
- 若無法避免且內存充足,適當增大兩參數
- 不適用於用戶手動建立的 MEMORY 表
參考文檔: "How MySQL Uses Internal Temporary Tables"、"The MEMORY Storage Engine"