sort_buffer_size 是 MySQL 单线程排序内存参数,影响 ORDER BY/GROUP BY 性能;过小导致频繁磁盘归并(Sort_merge_passes 上升、“Using filesort”),过大引发内存压力;建议 OLTP 设 2–4MB,OLAP 可会话级调高,并优先优化索引与查询。
sort_buffer_size 是 MySQL 中控制单个排序操作所分配内存的关键参数,直接影响 ORDER BY、GROUP BY、DISTINCT 等语句的执行效率和资源消耗。它不作用于整个实例,而是为每个需要排序的线程独立分配——也就是说,并发排序越多,总内存占用可能呈线性增长。
当排序所需数据量 ≤ sort_buffer_size 时,MySQL 在内存中完成快速排序(quicksort),性能最优;超过该值,则会启用外部排序:将数据分块排好后写入磁盘临时文件,再归并合并。这个过程涉及大量 I/O,性能明显下降,还可能触发磁盘临时表(如使用 tmpdir 目录)。
观察慢查询日志或 Performance Schema 中的排序相关指标:
列是否含 “Using filesort” —— 注意这仅表示用了文件排序逻辑,不一定真写磁盘(若数据仍在 sort_buffer 内)调整需结合业务负载特征,避免“一刀切”: