Mysql 錯誤 Error 1038 Out of sort memory, consider increasing server sort buffer size

Jerry Chen
Jul 29, 2021

--

未做任何修改但某一天網站突然掛了,循序排查後發現問題出在 SQL 查詢,該 SQL 語句使用到 ORDER BY ,在 PHP 上執行還不會顯示錯誤訊息,最後將 SQL 語句直接在 MySQL 管理工具上執行才出現錯誤訊息。

錯誤訊息:「Error 1038 Out of sort memory, consider increasing server sort buffer size」,這個錯誤訊息意思是 MySQL 的排序記憶體不足,需要調整緩衝區大小。

解決方式
1. 排查 SELECT 排序為什麼導致記憶體不足,也許是資料表設計不良或者欄位沒有正確索引導致。
2. 調整 sort_buffer_size 大小,sort_buffer_size 可以控制 MySQL 查詢排序的緩衝區大小,屬於暴力破解,但 sort_buffer_size 並不是調越大越好,調整後仍需觀察資料庫運行狀況。

查詢 sort_buffer_size
select @@global.sort_buffer_size;

暫時調整 sort_buffer_size
SET GLOBAL sort_buffer_size = 1024 * 1024 * 8;

永久調整 (打開 MySQL 設定檔 my.ini 或 my.cnf)
sort_buffer_size=8M

註一. sort_buffer_size 設定 1024 * 1024 * 8 是什麼意思?
sort_buffer_size 在設定上的單位為 MB,所以 1024 * 1024 * 8 意思是設定 sort_buffer_size 為8MB。

註二. my.ini 或 my.cnf 的 sort_buffer_size 為什麼沒生效?
調整 my.ini 或 my.cnf 內容請記得重新啟動 MySQL。

--

--

Jerry Chen
Jerry Chen

No responses yet