Sort aborted: Out of sort memory, consider increasing server sort buffer size
字面意:排序緩衝區內存不足,需增大 sort_buffer_size。
mmap() 替代 malloc(),效率下降 ~30%| sort_buffer_size | 平均耗時 | 性能影響 |
|---|---|---|
| 250 KB | 1.318s | 基準 |
| 512 KB | 1.944s | +47% |
| 3 MB | 2.412s | +83% |
# 測試命令 mysqlslap -uroot -h127.0.0.1 -q "SELECT SQL_NO_CACHE * FROM sbtest ORDER BY pad LIMIT 1" -c 100 --create-schema=test -i 10
| 場景 | 推薦值 | 備註 |
|---|---|---|
| 通用生產環境 | 2M - 4M | 平衡性能與內存 |
| 高併發(>500 連接) | 1M - 2M | 防止內存耗盡 |
| 大數據排序專用庫 | 8M - 16M | 低併發、大排序 |
sort_buffer_size = 2M join_buffer_size = 2M read_buffer_size = 1M read_rnd_buffer_size = 2M
核心結論: 不存在絕對最佳值,需根據業務併發量、排序頻次、可用內存三因素權衡。高併發場景堅決不超過 4M。
max_sort_length:排序時比較的字符數,預設 1024sort_merge_passes:監控此狀態,若持續增長說明 buffer 不夠