云数据库 GAUSSDB(FOR MYSQL)-执行select order by查询报Out of sort memory:原因分析

时间:2024-07-03 10:43:49

原因分析

查看表结构发现存在JSON格式的大字段

create table `t1` (    `id` bigint not null,    `num` int not null,    `rank` int not null,    `j1` json default null,    `j2` json default null,    `j3` json default null,    primary key (`id`, `num`)) engine = InnoDB default charset = utf8

社区全字段排序特性导致该问题,对于BLOB/TEXT/JSON/GEOMETRY等大字段类型,虽然理论上最大可以达到4GB,但是在实际应用中基本不会达到这个数量级,如果只根据row IDs去做排序而不是完整的行,会导致需要二次回表去取数据,在这种场景下瓶颈就在回表上。因此如果开启了全字段排序,当sort_buffer_size比较小而行数据比较大,就会导致超过阈值报错。

support.huaweicloud.com/trouble-gaussdbformysql/gaussdbformysql_trouble_0514.html