summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2021-03-07 01:53:52 +0100
committerSergei Golubchik <serg@mariadb.org>2021-03-08 15:00:45 +0100
commit01a0d739c8f9dca99301e550ab36c032ca8c6c0e (patch)
tree39e59bf828828da529fd8259a1033f946c7de10b
parentf24038b8515864e496dd2c55d973a0227b3698df (diff)
downloadmariadb-git-01a0d739c8f9dca99301e550ab36c032ca8c6c0e.tar.gz
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
-rw-r--r--mysql-test/main/opt_trace.result9
-rw-r--r--mysql-test/main/opt_trace.test13
-rw-r--r--sql/sql_show.cc1
3 files changed, 23 insertions, 0 deletions
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<TABLE_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;