文档首页/ 云数据库 GaussDB(for MySQL)/ 故障排除/ SQL类/ 执行select order by查询报Out of sort memory
更新时间:2024-07-03 GMT+08:00
分享

执行select order by查询报Out of sort memory

场景描述

执行以下查询报Out of sort memory,调大sort_buffer_size仍然报错,排查表数量较小

SELECT * FROM `t1` WHERE num = 4250 ORDER BY rank desc; 执行失败,失败原因:(conn=24259576) Out of sort memory, consider increasing server sort buffer size

原因分析

查看表结构发现存在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比较小而行数据比较大,就会导致超过阈值报错。

解决方案

GaussDB(for MySQL) 提供了“rds_blob_sort_using_addon”参数来控制全字段排序。

该参数目前未在控制台开放,如有需要请联系客服进行处理。

相关文档