直接改my.ini的sort_buffer_size即可,需在[mysqld]段下设置(如sort_buffer_size=2M),修改后必须重启MySQL服务才生效,且该值为会话独占内存,过高易引发OOM。
直接改
里的
就行,但别设太高
XAMPP 自带的 MySQL 在 Windows 下用的是
(不是
),路径通常是
。打开它,找到
段落,在下面加一行:
。
这个值不是越大越好——它是每个排序操作**独占分配**的内存,设成 8M 时,10 个并发排序就吃掉 80MB;低配机(比如 1GB 内存)设超过 4M 就容易触发 swap 或 OOM。
为什么改了不生效?检查连接是否用了新配置
是会话级参数,修改配置文件后必须重启 MySQL 服务(用 XAMPP 控制面板点 stop/start,或命令行
)。否则老连接仍沿用旧值。
验证是否生效,连进 MySQL 执行:
注意:如果看到返回值还是 256K 或 1M,说明没重启成功,或者你改错了段落(确认是在
下,不是
或其他)。
线上临时调优可以用
,但别依赖它长期运行
不想重启服务时,可对当前连接动态调整:
(即 4M)
但它只影响当前会话,断开重连就失效。更重要的是:它无法降低已发生的磁盘归并次数——
状态变量只在新排序操作中反映效果。
查归并压力:
重点关注
:如果它占总排序次数(
)超 10%,说明缓冲区确实不够用。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
和
别搞混:排序和临时表是两套机制
只管
的内存排序过程,对
、
、
这类需要建临时表的操作完全无效。
后者靠的是
和
,而且这两个值**必须相等**,MySQL 才按你设的上限执行;否则取小的那个。
常见错误:只改了
却漏掉
,结果临时表一超 16M(默认值)就落盘,
标记照常出现。
my.inisort_buffer_sizemy.inimy.cnfXAMPP\mysql\bin\my.ini[mysqld]sort_buffer_size = 2Msort_buffer_sizenet stop mysql && net start mysqlSHOW VARIABLES LIKE 'sort_buffer_size';[mysqld][client]SET SESSIONSET SESSION sort_buffer_size = 4194304;Sort_merge_passesSHOW GLOBAL STATUS LIKE 'Sort%';Sort_merge_passesSort_scan + Sort_rangetmp_table_sizesort_buffer_sizeORDER BYGROUP BYDISTINCTUNIONtmp_table_sizemax_heap_table_sizetmp_table_size = 64Mmax_heap_table_sizeUsing temporary