List:Commits« Previous MessageNext Message »
From:tim Date:October 4 2006 3:27am
Subject:bk commit into 5.0 tree (tsmith:1.2302) BUG#19764
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of tim. When tim does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-10-03 21:26:55-06:00, tsmith@stripped +7 -0
  Bug #19764: SHOW commands end up in the slow log as table scans
  
  Set a flag when a SHOW command is parsed, and check it in log_slow_statement().  SHOW commands are not counted as slow queries, even if they use table scans.

  mysql-test/r/show_check.result@stripped, 2006-10-03 21:26:52-06:00, tsmith@stripped +17 -0
    Add test for bug #19764

  mysql-test/t/show_check-master.opt@stripped, 2006-10-03 21:18:26-06:00, tsmith@stripped +1 -0
    BitKeeper file /usr/home/tim/m/bk/b19764/50/mysql-test/t/show_check-master.opt

  mysql-test/t/show_check-master.opt@stripped, 2006-10-03 21:18:26-06:00, tsmith@stripped +0 -0

  mysql-test/t/show_check.test@stripped, 2006-10-03 21:26:52-06:00, tsmith@stripped +15 -2
    Add test for bug #19764

  sql/sql_lex.cc@stripped, 2006-10-03 21:26:52-06:00, tsmith@stripped +1 -0
    Set lex->is_show_command= FALSE in lex_start

  sql/sql_lex.h@stripped, 2006-10-03 21:26:52-06:00, tsmith@stripped +7 -0
    Add LEX->is_slow_command flag to prevent SHOW commands from being written to the slow queries log

  sql/sql_parse.cc@stripped, 2006-10-03 21:26:52-06:00, tsmith@stripped +3 -3
    Don't log slow statement if it is a SHOW command

  sql/sql_yacc.yy@stripped, 2006-10-03 21:26:52-06:00, tsmith@stripped +1 -0
    Set lex->is_show_command for all SHOW commands

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	tsmith
# Host:	siva.hindu.god
# Root:	/usr/home/tim/m/bk/b19764/50

--- 1.201/sql/sql_lex.cc	2006-10-03 21:27:02 -06:00
+++ 1.202/sql/sql_lex.cc	2006-10-03 21:27:02 -06:00
@@ -173,6 +173,7 @@ void lex_start(THD *thd, uchar *buf,uint
   lex->spcont= NULL;
   lex->proc_list.first= 0;
   lex->escape_used= FALSE;
+  lex->is_show_command= FALSE;
   lex->reset_query_tables_list(FALSE);
 
   lex->nest_level=0 ;

--- 1.228/sql/sql_lex.h	2006-10-03 21:27:02 -06:00
+++ 1.229/sql/sql_lex.h	2006-10-03 21:27:02 -06:00
@@ -1016,6 +1016,13 @@ typedef struct st_lex : public Query_tab
   
   bool escape_used;
 
+  /*
+    Prevent SHOW commands from being written to the slow queries log.
+    This is fixed properly in MySQL 5.1, but a quick hack is used in 5.0
+    to achieve the same result.
+  */
+  bool is_show_command;
+
   st_lex();
 
   virtual ~st_lex()

--- 1.580/sql/sql_parse.cc	2006-10-03 21:27:02 -06:00
+++ 1.581/sql/sql_parse.cc	2006-10-03 21:27:02 -06:00
@@ -2150,10 +2150,10 @@ void log_slow_statement(THD *thd)
   thd->end_time();				// Set start time
 
   /*
-    Do not log administrative statements unless the appropriate option is
-    set; do not log into slow log if reading from backup.
+    Do not log administrative or SHOW statements unless the appropriate
+    option is set; do not log into slow log if reading from backup.
   */
-  if (thd->enable_slow_log && !thd->user_time)
+  if (thd->enable_slow_log && !thd->user_time && !thd->lex->is_show_command)
   {
     thd->proc_info="logging slow query";
 

--- 1.491/sql/sql_yacc.yy	2006-10-03 21:27:02 -06:00
+++ 1.492/sql/sql_yacc.yy	2006-10-03 21:27:02 -06:00
@@ -6412,6 +6412,7 @@ opt_table_sym:
 show:	SHOW
 	{
 	  LEX *lex=Lex;
+          lex->is_show_command= TRUE;
 	  lex->wild=0;
           lex->lock_option= TL_READ;
           mysql_init_select(lex);

--- 1.78/mysql-test/r/show_check.result	2006-10-03 21:27:02 -06:00
+++ 1.79/mysql-test/r/show_check.result	2006-10-03 21:27:02 -06:00
@@ -520,6 +520,7 @@ t1	NULL	NULL	NULL	NULL	#	#	#	#	NULL	NULL
 show create table t1;
 ERROR HY000: Incorrect information in file: './test/t1.frm'
 drop table t1;
+End of 4.1 tests
 CREATE TABLE txt1(a int);
 CREATE TABLE tyt2(a int);
 CREATE TABLE urkunde(a int);
@@ -629,3 +630,19 @@ SHOW TABLES FROM no_such_database;
 ERROR 42000: Unknown database 'no_such_database'
 SHOW COLUMNS FROM no_such_table;
 ERROR 42S02: Table 'test.no_such_table' doesn't exist
+flush status;
+show status like 'slow_queries';
+Variable_name	Value
+Slow_queries	0
+show tables;
+Tables_in_test
+show status like 'slow_queries';
+Variable_name	Value
+Slow_queries	0
+select 1 from information_schema.tables limit 1;
+1
+1
+show status like 'slow_queries';
+Variable_name	Value
+Slow_queries	1
+End of 5.0 tests.

--- 1.58/mysql-test/t/show_check.test	2006-10-03 21:27:02 -06:00
+++ 1.59/mysql-test/t/show_check.test	2006-10-03 21:27:02 -06:00
@@ -400,7 +400,8 @@ show create table t1;
 drop table t1;
 
 
-# End of 4.1 tests
+--echo End of 4.1 tests
+
 #
 # BUG 12183 -  SHOW OPEN TABLES behavior doesn't match grammar
 # First we close all open tables with FLUSH tables and then we open some.
@@ -506,4 +507,16 @@ SHOW TABLES FROM no_such_database;
 SHOW COLUMNS FROM no_such_table;
 
 
-# End of 5.0 tests.
+#
+# Bug #19764: SHOW commands end up in the slow log as table scans
+#
+flush status;
+show status like 'slow_queries';
+show tables;
+show status like 'slow_queries';
+# Table scan query, to ensure that slow_queries does still get incremented
+# (mysqld is started with --log-queries-not-using-indexes)
+select 1 from information_schema.tables limit 1;
+show status like 'slow_queries';
+
+--echo End of 5.0 tests.
--- New file ---
+++ mysql-test/t/show_check-master.opt	06/10/03 21:18:26
--log-slow-queries --log-long-format --log-queries-not-using-indexes

Thread
bk commit into 5.0 tree (tsmith:1.2302) BUG#19764tim4 Oct