mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
A fix for Bug#9141 "4.1 does not log into slow log
ALTER, OPTIMIZE and ANALYZE statements". In 4.1 we disabled logging of slow admin statements. The fix adds an option to enable it back. No test case (slow log is not tested in the test suite), but tested manually. + post-review fixes (word police mainly). sql/mysql_priv.h: - declaration for a new option sql/mysqld.cc: Add server option '--log-slow-admin-statements' to log slow optimize/alter/etc statements to the slow log if it's enabled. Add warnings that this option works only if the slow log is open. sql/sql_class.h: Rename 'thd->slow_command' to thd->enable_slow_log (negates the meaning of this variable, and so resolves the need to negate value opt_log_slow_admin_statements when setting it). sql/sql_parse.cc: Implement optional logging of administrative statements in the slow log.
This commit is contained in:
@@ -1342,10 +1342,10 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
|
||||
thd->command=command;
|
||||
/*
|
||||
Commands which will always take a long time should be marked with
|
||||
this so that they will not get logged to the slow query log
|
||||
Commands which always take a long time are logged into
|
||||
the slow log only if opt_log_slow_admin_statements is set.
|
||||
*/
|
||||
thd->slow_command=FALSE;
|
||||
thd->enable_slow_log= TRUE;
|
||||
thd->set_time();
|
||||
VOID(pthread_mutex_lock(&LOCK_thread_count));
|
||||
thd->query_id=query_id;
|
||||
@@ -1383,7 +1383,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
uint tbl_len= *(uchar*) (packet + db_len + 1);
|
||||
|
||||
statistic_increment(com_other, &LOCK_status);
|
||||
thd->slow_command= TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
db= thd->alloc(db_len + tbl_len + 2);
|
||||
tbl_name= strmake(db, packet + 1, db_len)+1;
|
||||
strmake(tbl_name, packet + db_len + 2, tbl_len);
|
||||
@@ -1658,7 +1658,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
uint32 slave_server_id;
|
||||
|
||||
statistic_increment(com_other,&LOCK_status);
|
||||
thd->slow_command = TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
if (check_global_access(thd, REPL_SLAVE_ACL))
|
||||
break;
|
||||
|
||||
@@ -1848,8 +1848,11 @@ static void log_slow_query(THD *thd)
|
||||
time_t start_of_query=thd->start_time;
|
||||
thd->end_time(); // Set start time
|
||||
|
||||
/* If not reading from backup and if the query took too long */
|
||||
if (!thd->slow_command && !thd->user_time) // do not log 'slow_command' queries
|
||||
/*
|
||||
Do not log administrative 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)
|
||||
{
|
||||
thd->proc_info="logging slow query";
|
||||
|
||||
@@ -2292,7 +2295,7 @@ mysql_execute_command(THD *thd)
|
||||
check_table_access(thd,SELECT_ACL, tables,0) ||
|
||||
check_global_access(thd, FILE_ACL))
|
||||
goto error; /* purecov: inspected */
|
||||
thd->slow_command=TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res = mysql_backup_table(thd, tables);
|
||||
|
||||
break;
|
||||
@@ -2303,7 +2306,7 @@ mysql_execute_command(THD *thd)
|
||||
check_table_access(thd, INSERT_ACL, tables,0) ||
|
||||
check_global_access(thd, FILE_ACL))
|
||||
goto error; /* purecov: inspected */
|
||||
thd->slow_command=TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res = mysql_restore_table(thd, tables);
|
||||
break;
|
||||
}
|
||||
@@ -2538,7 +2541,7 @@ unsent_create_error:
|
||||
case SQLCOM_CREATE_INDEX:
|
||||
if (check_one_table_access(thd, INDEX_ACL, tables))
|
||||
goto error; /* purecov: inspected */
|
||||
thd->slow_command=TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
if (end_active_trans(thd))
|
||||
res= -1;
|
||||
else
|
||||
@@ -2624,7 +2627,7 @@ unsent_create_error:
|
||||
res= -1;
|
||||
else
|
||||
{
|
||||
thd->slow_command=TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res= mysql_alter_table(thd, select_lex->db, lex->name,
|
||||
&lex->create_info,
|
||||
tables, lex->create_list,
|
||||
@@ -2716,7 +2719,7 @@ unsent_create_error:
|
||||
if (check_db_used(thd,tables) ||
|
||||
check_table_access(thd,SELECT_ACL | INSERT_ACL, tables,0))
|
||||
goto error; /* purecov: inspected */
|
||||
thd->slow_command=TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res = mysql_repair_table(thd, tables, &lex->check_opt);
|
||||
/* ! we write after unlocking the table */
|
||||
if (!res && !lex->no_write_to_binlog)
|
||||
@@ -2736,7 +2739,7 @@ unsent_create_error:
|
||||
if (check_db_used(thd,tables) ||
|
||||
check_table_access(thd, SELECT_ACL | EXTRA_ACL , tables,0))
|
||||
goto error; /* purecov: inspected */
|
||||
thd->slow_command=TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res = mysql_check_table(thd, tables, &lex->check_opt);
|
||||
break;
|
||||
}
|
||||
@@ -2745,7 +2748,7 @@ unsent_create_error:
|
||||
if (check_db_used(thd,tables) ||
|
||||
check_table_access(thd,SELECT_ACL | INSERT_ACL, tables,0))
|
||||
goto error; /* purecov: inspected */
|
||||
thd->slow_command=TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res = mysql_analyze_table(thd, tables, &lex->check_opt);
|
||||
/* ! we write after unlocking the table */
|
||||
if (!res && !lex->no_write_to_binlog)
|
||||
@@ -2766,7 +2769,7 @@ unsent_create_error:
|
||||
if (check_db_used(thd,tables) ||
|
||||
check_table_access(thd,SELECT_ACL | INSERT_ACL, tables,0))
|
||||
goto error; /* purecov: inspected */
|
||||
thd->slow_command=TRUE;
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res= (specialflag & (SPECIAL_SAFE_MODE | SPECIAL_NO_NEW_FUNC)) ?
|
||||
mysql_recreate_table(thd, tables, 1) :
|
||||
mysql_optimize_table(thd, tables, &lex->check_opt);
|
||||
|
Reference in New Issue
Block a user