diff options
author | Varun Gupta <varun.gupta@mariadb.com> | 2020-10-26 12:05:47 +0530 |
---|---|---|
committer | Varun Gupta <varun.gupta@mariadb.com> | 2020-10-28 10:53:22 +0530 |
commit | db56f9b8521077c119d700927510c7a0e54bd820 (patch) | |
tree | a45a88bdb276c5d9273091e06a29222f55a12b00 /mysql-test/main/order_by.test | |
parent | 2cec0523eb3abd888b810e6046a8dfb6ea606c4c (diff) | |
download | mariadb-git-db56f9b8521077c119d700927510c7a0e54bd820.tar.gz |
MDEV-24015: SQL Error (1038): Out of sort memory when enough memory for the sort buffer is provided
For a correlated subquery filesort is executed multiple times.
During each execution, sortlength() computed total sort key length in
Sort_keys::sort_length, without resetting it first.
Eventually Sort_keys::sort_length got larger than @@sort_buffer_size, which
caused filesort() to be aborted with error.
Fixed by making sortlength() to compute lengths only during the first
invocation. Subsequent invocations return pre-computed values.
Diffstat (limited to 'mysql-test/main/order_by.test')
-rw-r--r-- | mysql-test/main/order_by.test | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/mysql-test/main/order_by.test b/mysql-test/main/order_by.test index 8e0b479e02d..88d5250bb4c 100644 --- a/mysql-test/main/order_by.test +++ b/mysql-test/main/order_by.test @@ -2556,4 +2556,24 @@ INSERT t1 VALUES ('foo','bar'),('baz','qux'); SELECT COALESCE(a, b) AS f FROM t1 ORDER BY f; DROP TABLE t1; +--echo # +--echo # MDEV-24015: SQL Error (1038): Out of sort memory when enough memory for the +--echo # sort buffer is provided +--echo # + +CREATE TABLE t1 (a VARCHAR(100), b INT); +CREATE TABLE t2 (a VARCHAR(100), b INT); + +INSERT INTO t1 SELECT 'abc', seq FROM seq_1_to_50; +INSERT INTO t2 SELECT seq, seq FROM seq_1_to_50; + +set @save_sort_buffer_size= @@sort_buffer_size; +set sort_buffer_size=2000; +--source include/analyze-format.inc +ANALYZE FORMAT=JSON +SELECT (SELECT sum(t2.b) FROM t2 WHERE t1.b=t2.b GROUP BY t2.a) FROM t1; +SELECT (SELECT sum(t2.b) FROM t2 WHERE t1.b=t2.b GROUP BY t2.a) FROM t1; + +set sort_buffer_size= @save_sort_buffer_size; +DROP TABLE t1,t2; --echo # End of 10.5 tests |