首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 MySQL "Sort aborted: Out of sort memory" 錯誤:sort_buffer_size 優化實戰

     編輯:MySQL 資料庫相關知識

錯誤現象

Sort aborted: Out of sort memory, consider increasing server sort buffer size

字面意:排序緩衝區內存不足,需增大 sort_buffer_size。

參數核心原理

  • Connection 級:每連接首次排序時一次性分配
  • 非越大越好:高併發下過大值耗盡內存(500 連接 × 8M = 4GB)
  • 分配機制閾值:超過 2KB 使用 mmap() 替代 malloc(),效率下降 ~30%

實測數據對比(1GB 內存虛擬機,1萬行測試表)

sort_buffer_size平均耗時性能影響
250 KB1.318s基準
512 KB1.944s+47%
3 MB2.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低併發、大排序

16GB 內存服務器完整優化參考

sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 2M

核心結論: 不存在絕對最佳值,需根據業務併發量、排序頻次、可用內存三因素權衡。高併發場景堅決不超過 4M。

相關參數聯動

  • max_sort_length:排序時比較的字符數,預設 1024
  • sort_merge_passes:監控此狀態,若持續增長說明 buffer 不夠
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved