SQL错误1038:内存不足,请考虑增加服务器排序缓冲区

问题描述

我已将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,h.hierarchy
) hierarchy ON hierarchy.product_name = p.product_name AND hierarchy.id_country = p.id_country

增加 sort_buffer_size 会有所帮助。但是在原始查询中,我需要将该缓冲区从认的2MB增加到大约80MB(根本不涉及ORDER BY; products表过滤到大约15k-20k条目-根本没有那么大的数字)。根据{{​​3}},我宁愿保留原始设置。我也不明白为什么带有认2MB缓冲区的10.3.13可以很好地工作,而较新版本却不能。
我应该在MariaDB上提交错误吗?还是我做错了什么?还是应该调查一两个星期来简化查询?丢在这里

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

感谢帮助。

解决方法

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

自版本10.5.7开始修复。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...