SQL Error (1038): Out of sort memory, consider increasing server sort buffer

SQL Error (1038): Out of sort memory, consider increasing server sort buffer

我已经将 MariaDB 10.3.13 升级到最新版本 10.5.6。部署后,我的一个查询开始出现此错误:

SQL Error (1038): Out of sort memory, consider increasing server sort buffer

我设法简化了查询,同时在全新的 10.5.6 安装(默认设置)上保留了错误。这在 10.3.13 上没有问题:

DROP TABLE IF EXISTS test_products;
CREATE TABLE test_products (
    product_name VARCHAR(7), id_country INT, PRIMARY KEY (product_name, id_country) 
) COLLATE='utf8_general_ci' ENGINE=INNODB;


DELIMITER //
FOR i IN 1..3700 DO INSERT INTO test_products (product_name, id_country) VALUES ('product', i); END FOR;
//
DELIMITER ;

SELECT p.product_name, p.id_country, hierarchy.hierarchy
FROM test_products p
LEFT JOIN (
    SELECT p2.product_name, p2.id_country, h.hierarchy, MAX(test) AS test
    FROM test_products p2
    LEFT JOIN (
        SELECT product_name, id_country, '_exactly_' AS hierarchy, 1 AS test -- removing one single character from string will make this query working again
        FROM test_products
    ) h ON h.product_name = p2.product_name AND h.id_country = p2.id_country
   GROUP BY product_name, id_country, h.hierarchy
) hierarchy ON hierarchy.product_name = p.product_name AND hierarchy.id_country = p.id_country

增加 sort_buffer_size 有帮助。但是,在原始查询中,我需要将此缓冲区从默认的 2MB 增加到大约 80MB(根本不涉及 ORDER BY;产品 table 过滤到大约 15k-20k 条目——根本不是那么大的数字)。根据 https://www.xaprb.com/blog/2010/05/09/how-to-tune-mysqls-sort_buffer_size/,我宁愿保留原始设置。我也不明白为什么默认 2MB 缓冲区的 10.3.13 运行良好,而较新的版本却不行。
我应该在 MariaDB 上提交错误吗?还是我做错了什么?或者我应该研究 week/two 来简化查询吗?迷失在这里。

在 Windows 服务器 2012R2 上测试;至强 E3-1225@3.2Ghz; 16GB 内存

感谢您的帮助。

这个行为看起来很奇怪,所以我在 MariaDB 团队提交了一个错误。

自版本 10.5.7 起将提供修复。

有关详细信息,请查看 https://jira.mariadb.org/browse/MDEV-24015