起きたこと
Out of sort memory, consider increasing server sort buffer size
・やたら大きいデータを入れたJSON型のカラムを含むテーブルにORDER BYをかけた際にエラーが発生したと報告があった。
・別チームの担当している本番環境のデータのためどのような値が入ったという情報が遠回しにふんわりとしか教えてもらえなかった。
原因
MySQL ver8.0.28以前の場合に発生するバグ
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-28.html#mysqld-8-0-28-data-types
Sorts of some column types, including JSON and TEXT, sometimes exhausted the sort buffer if its size was not at least 15 times that of the largest row in the sort. Now the sort buffer need only be only 15 times as large as the largest sort key. (Bug #103325, Bug #105532, Bug #32738705, Bug #33501541)
機械訳:
「JSONやTEXTを含むいくつかのカラム型のソートでは、ソートバッファのサイズがソートの最大行の15倍以上でないと、ソートバッファを使い果たしてしまうことがありました。この問題は、ソートバッファのサイズがソートの最大キーの 15 倍であれば解決するようになりました。(Bug #103325, Bug #105532, Bug #32738705, Bug #33501541)」
sort_buffer_sizeがデフォルト値(256KB)で設定されているため、ソート対象に約17KBを超えるサイズのカラムが存在すると処理しきれずにエラーが発生する可能性がある
。
今回の対処
・JSON型カラムに入る値の大きさを制限していなかったためAPIの内部処理で4KB以下に制限した
・将来的にMySQLのアップデートで対応したい
引用:
ERROR 1038 (HY001): Out of sort memory, consider increasing server sort buffer size