summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Black <daniel@mariadb.org>2022-12-04 10:47:31 +1100
committerDaniel Black <daniel@mariadb.org>2022-12-14 10:15:32 +1100
commit697dbd15e0102f33fba1d1d6d9aa964b638f9534 (patch)
treede19d57a7afa83d320a330d0cdf444be9a0be4c3
parentacfaa0458725708aa58970a34072d08c184d7856 (diff)
downloadmariadb-git-697dbd15e0102f33fba1d1d6d9aa964b638f9534.tar.gz
MDEV-21187: log_slow_filter="" logs queries not using indexes
Consistent with MDEV-4206 and empty log_slow_filter still means no explict filtering. Since 21518ab2e453 however the log_queries_not_using_indexes became stored in the same variable. As we need to test for the absense of log_queries_not_using_indexes the SERVER_QUERY_NO_INDEX USED part of log_slow_statement, the empty criteria resulted in an always true to log queries not using indexes if log_slow_filter was set to empty. Adjusted the log_slow.test for MDEV-4206 as slow_log_query has been global and session for a while and it was relying on the MDEV-21187 buggy behavior to detect a slow query. Reviewer: Monty
-rw-r--r--mysql-test/main/log_slow.result22
-rw-r--r--mysql-test/main/log_slow.test21
-rw-r--r--sql/sql_parse.cc2
3 files changed, 40 insertions, 5 deletions
diff --git a/mysql-test/main/log_slow.result b/mysql-test/main/log_slow.result
index 31d52ff0323..6b9fddb7fb6 100644
--- a/mysql-test/main/log_slow.result
+++ b/mysql-test/main/log_slow.result
@@ -64,7 +64,7 @@ rows_affected int(11) NO NULL
flush slow logs;
set long_query_time=0.1;
set log_slow_filter='';
-set global slow_query_log=1;
+set slow_query_log=1;
set global log_output='TABLE';
select sleep(0.5);
sleep(0.5)
@@ -73,7 +73,7 @@ select count(*) FROM mysql.slow_log;
count(*)
1
set @@long_query_time=default;
-set global slow_query_log= @org_slow_query_log;
+set @@slow_query_log=default;
set @@log_slow_filter=default;
set @@log_slow_verbosity=default;
set global log_output= default;
@@ -115,3 +115,21 @@ Slow_queries_increment
SET log_slow_filter=DEFAULT;
SET @@long_query_time=default;
SET GLOBAL slow_query_log= @org_slow_query_log;
+#
+# MDEV-21187: log_slow_filter="" logs queries not using indexes
+#
+flush status;
+create table t (id int);
+insert into t values (1),(4);
+set log_slow_filter='';
+select * from t;
+id
+1
+4
+show session status like 'Slow_queries';
+Variable_name Value
+Slow_queries 0
+drop table t;
+#
+# End of 10.3 tests
+#
diff --git a/mysql-test/main/log_slow.test b/mysql-test/main/log_slow.test
index b51777d859e..d2e314cf667 100644
--- a/mysql-test/main/log_slow.test
+++ b/mysql-test/main/log_slow.test
@@ -50,14 +50,14 @@ flush slow logs;
# MDEV-4206 (empty filter should be no filter)
set long_query_time=0.1;
set log_slow_filter='';
-set global slow_query_log=1;
+set slow_query_log=1;
set global log_output='TABLE';
select sleep(0.5);
select count(*) FROM mysql.slow_log;
# Reset used variables
set @@long_query_time=default;
-set global slow_query_log= @org_slow_query_log;
+set @@slow_query_log=default;
set @@log_slow_filter=default;
set @@log_slow_verbosity=default;
set global log_output= default;
@@ -102,3 +102,20 @@ SET log_slow_filter=DEFAULT;
SET @@long_query_time=default;
SET GLOBAL slow_query_log= @org_slow_query_log;
+
+--echo #
+--echo # MDEV-21187: log_slow_filter="" logs queries not using indexes
+--echo #
+
+flush status;
+create table t (id int);
+insert into t values (1),(4);
+set log_slow_filter='';
+select * from t;
+show session status like 'Slow_queries';
+
+drop table t;
+
+--echo #
+--echo # End of 10.3 tests
+--echo #
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 385360168a1..cf316c8cc1c 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2513,7 +2513,7 @@ void log_slow_statement(THD *thd)
if ((thd->server_status &
(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
!(thd->query_plan_flags & QPLAN_STATUS) &&
- !slow_filter_masked(thd, QPLAN_NOT_USING_INDEX))
+ (thd->variables.log_slow_filter & QPLAN_NOT_USING_INDEX))
{
thd->query_plan_flags|= QPLAN_NOT_USING_INDEX;
/* We are always logging no index queries if enabled in filter */