sort_buffer_size 在 MYSQL 8.0.27 商业版中的意外行为

Unexpected behaviour of sort_buffer_size in MYSQL 8.0.27 commercial version

我有两个不同的 mysql 服务器,一个是 8.0.16 社区版,另一个是 8.0.27 商业版。两者在 Linux.

上都有 mysql 默认配置 运行

我有一个名为 json 的 table 商店,它包含 34 列,其中两列是 json,table 中的总行数是 9。我有在两台服务器中复制了相同的 table。

Select json1 from jsonstore where reference = 7 order by generated_date desc limit 1;

其中 reference 是一个 int(11) 索引列,generated_date 是 datetime 列,json1 是 json 列,jsonstore 是 innodb table

以上查询 return 1 json 条记录 json 的大约大小为 1.5MB

我在 MySQL( 8.0.16 ) 的两台服务器中执行了相同的查询,执行服务器查询并 returned 数据。在 MySQL(8.0.27) 服务器出现故障并且 returns 排序内存不足时,请考虑增加服务器排序缓冲区大小 .

两台服务器都有 sort_buffer_size 1048576 字节 (1MB) 和 sort_merge_passes 小于 20。

select json1 from jsonstore order by generated_on desc limit 1;

以上查询在 8.0.16 中也能正常工作,但在 8.0.27 中失败。

所以,我厌倦了在 mysql (8.0.27) 中将 sort_buffer_size 增加到 2MB,然后它对第一个查询有效,对第二个查询失败。我再次将其更新为 5MB,然后两个查询都成功执行了。

但其他 mysql 服务器 (8.0.16) 中的相同查询在 sort_buffer_size 256Kb 的情况下工作正常。

我担心的是,如果 table 增长是这种情况,我需要继续增加 sort_buffer_size。不确定它是 mysql 新版本中的错误还是 sort_buffer_size.

的机制发生了变化

请帮助我了解 sort_buffer_size 的内部工作方式。

注意:- 以上问题不仅限于这两个查询还有一些其他使用 order by 和 group by 的查询有 json 列也抛出相同的错误但在 8.0.16 版本中工作正常。

终于发现这是 mysql 8.0.27 版本中的一个问题,并且在 mysql 8.0.28 的最新版本中,此问题已得到解决。

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)

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-28.html#mysqld-8-0-28-data-types