From 01a0d739c8f9dca99301e550ab36c032ca8c6c0e Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 7 Mar 2021 01:53:52 +0100 Subject: MDEV-24975 Server consumes extra 4G memory upon querying INFORMATION_SCHEMA.OPTIIMIZER_TRACE if a query used no fields from an I_S table, we were creating a temp table with one, first, field (as a table cannot have zero fields), with its length truncated to 1. Now - force also this dummy field to be a normal field, not a BLOB --- mysql-test/main/opt_trace.result | 9 +++++++++ mysql-test/main/opt_trace.test | 13 +++++++++++++ sql/sql_show.cc | 1 + 3 files changed, 23 insertions(+) diff --git a/mysql-test/main/opt_trace.result b/mysql-test/main/opt_trace.result index ee1273decf6..0ced5f19e14 100644 --- a/mysql-test/main/opt_trace.result +++ b/mysql-test/main/opt_trace.result @@ -8591,4 +8591,13 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.range_scan_alternatives')) ] DROP TABLE t1; set optimizer_trace='enabled=off'; +# +# MDEV-24975 Server consumes extra 4G memory upon querying INFORMATION_SCHEMA.OPTIIMIZER_TRACE +# +set max_session_mem_used=1024*1024*1024; +select count(*) from information_schema.optimizer_trace; +select * from information_schema.optimizer_trace; +set max_session_mem_used=default; +# # End of 10.4 tests +# diff --git a/mysql-test/main/opt_trace.test b/mysql-test/main/opt_trace.test index 9040b5a54d0..3fae7f34750 100644 --- a/mysql-test/main/opt_trace.test +++ b/mysql-test/main/opt_trace.test @@ -623,4 +623,17 @@ SELECT JSON_DETAILED(JSON_EXTRACT(trace, '$**.range_scan_alternatives')) from IN DROP TABLE t1; set optimizer_trace='enabled=off'; + +--echo # +--echo # MDEV-24975 Server consumes extra 4G memory upon querying INFORMATION_SCHEMA.OPTIIMIZER_TRACE +--echo # +set max_session_mem_used=1024*1024*1024; +--disable_result_log +select count(*) from information_schema.optimizer_trace; +select * from information_schema.optimizer_trace; +--enable_result_log +set max_session_mem_used=default; + +--echo # --echo # End of 10.4 tests +--echo # diff --git a/sql/sql_show.cc b/sql/sql_show.cc index c6be14540f3..3f807bdc275 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -8767,6 +8767,7 @@ bool optimize_schema_tables_memory_usage(List &tables) { /* all fields were optimized away. Force a non-0-length row */ table->s->reclength= to_recinfo->length= 1; + to_recinfo->type= FIELD_NORMAL; to_recinfo++; } p->recinfo= to_recinfo; -- cgit v1.2.1