MySQL8でOut of sort memoryが発生するようになった

  • このエントリーをはてなブックマークに追加

MySQL8.0.21から8.0.25にアップグレードした後、次のような単純なクエリを発行したらERROR 1038 (HY001): Out of sort memory, consider increasing server sort buffer sizeが発生するようになった。

SELECT *
FROM hoge_table
ORDER BY created_at DESC LIMIT 10

このテーブルは次のように、JSONカラムとそれを参照する大量のGeneratedカラムを持つテーブルです。

create table hoge_table(
id varchar(32) ascii not null,
data json not null,
c1 varchar(256) as (json_unquote(data->'$.c1')) stored,
c2 varchar(256) as (json_unquote(data->'$.c2')) stored,
c3 varchar(256) as (json_unquote(data->'$.c3')) stored,
.... 20カラムくらい,
constraint pk_hoge_table primary key (id)
) default charset utf8mb4 row_format=compressed key_block_size=4;

Bug Ticket:103225に情報があります。

対策

sort_buffer_sizeが256KBなので1Mに増やしました。innodb_sort_buffer_sizeではなくsort_buffer_sizeです。私は幸いにして、これで回避できました。

オンラインで変更

set global sort_buffer_size = 1*1024*1024;
# 変わらない場合は..
set @@sort_buffer_size = 1*1024*1024;

show variables like '%sort%';
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
sort_buffer_size = 1M

参考