问题描述
我已将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