首页/数据/数据库速查/排序与临时表内存(sort_buffer / tmp_table_size)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

排序与临时表内存(sort_buffer / tmp_table_size)

排序与临时表内存按会话分配:sort_buffer_size、join_buffer_size、tmp_table_size、max_heap_table_size;不是越大越快,是每连接都要吃的内存。

数据库速查数据更新于 2026-10-12

参数

参数作用注意
sort_buffer_sizeORDER BY/GROUP BY 排序缓冲每排序会话分配
join_buffer_size无索引 JOIN 的缓冲每 JOIN 使用一次
tmp_table_size内存临时表上限超限转磁盘临时表
max_heap_table_sizeMEMORY 表上限与 tmp_table_size 取小值

状态与调整

状态与调整
SHOW STATUS LIKE 'Created_tmp%';
SHOW VARIABLES LIKE 'tmp_table_size';
SHOW VARIABLES LIKE 'max_heap_table_size';
-- 会话级:SET SESSION sort_buffer_size = 4*1024*1024;
Created_tmp_disk_tables 占比高才考虑调大 tmp_table_size;多数情况应先优化 SQL(覆盖索引、减少排序)。

易错点

  • 把 sort_buffer_size 调到 64M:100 个并发排序就是 6.4G 内存,直接 OOM
  • 忽略 max_heap_table_size 与 tmp_table_size 取小值,调了后者没效果

数据来源与参考

  • MySQL 8.0 Reference Manual: Server System Variables (tmp_table_size)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌