pass the slow logging information in thd->query_plan_flags
This solves the following issues: * unlike lex->m_sql_cmd and lex->sql_command, thd->query_plan_flags is not reset in Prepared_statement::execute, it survives till the log_slow_statement(), so slow logging behaves correctly in --ps * using thd->query_plan_flags for both slow_log_filter and log_slow_admin_statements means the definition of "admin" statements for the slow log is the same no matter how it is filtered out.
This commit is contained in:
parent
bc8ae50e7c
commit
dda2e940fb
@ -34,4 +34,5 @@
|
|||||||
#define QPLAN_FILESORT_PRIORITY_QUEUE (1U << 9)
|
#define QPLAN_FILESORT_PRIORITY_QUEUE (1U << 9)
|
||||||
|
|
||||||
/* ... */
|
/* ... */
|
||||||
|
#define QPLAN_STATUS (1U << 31) /* not in the slow_log_filter */
|
||||||
#define QPLAN_MAX (1U << 31) /* reserved as placeholder */
|
#define QPLAN_MAX (1U << 31) /* reserved as placeholder */
|
||||||
|
@ -28,7 +28,7 @@ int reassign_keycache_tables(THD* thd, KEY_CACHE *src_cache,
|
|||||||
/**
|
/**
|
||||||
Sql_cmd_analyze_table represents the ANALYZE TABLE statement.
|
Sql_cmd_analyze_table represents the ANALYZE TABLE statement.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_analyze_table : public Sql_cmd_admin
|
class Sql_cmd_analyze_table : public Sql_cmd
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -53,7 +53,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
Sql_cmd_check_table represents the CHECK TABLE statement.
|
Sql_cmd_check_table represents the CHECK TABLE statement.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_check_table : public Sql_cmd_admin
|
class Sql_cmd_check_table : public Sql_cmd
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -77,7 +77,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
Sql_cmd_optimize_table represents the OPTIMIZE TABLE statement.
|
Sql_cmd_optimize_table represents the OPTIMIZE TABLE statement.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_optimize_table : public Sql_cmd_admin
|
class Sql_cmd_optimize_table : public Sql_cmd
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -102,7 +102,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
Sql_cmd_repair_table represents the REPAIR TABLE statement.
|
Sql_cmd_repair_table represents the REPAIR TABLE statement.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_repair_table : public Sql_cmd_admin
|
class Sql_cmd_repair_table : public Sql_cmd
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -363,7 +363,7 @@ private:
|
|||||||
statements.
|
statements.
|
||||||
@todo move Alter_info and other ALTER generic structures from Lex here.
|
@todo move Alter_info and other ALTER generic structures from Lex here.
|
||||||
*/
|
*/
|
||||||
class Sql_cmd_common_alter_table : public Sql_cmd_admin
|
class Sql_cmd_common_alter_table : public Sql_cmd
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
@ -5458,6 +5458,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
#define CF_UPDATES_DATA (1U << 18)
|
#define CF_UPDATES_DATA (1U << 18)
|
||||||
|
|
||||||
|
/**
|
||||||
|
Not logged into slow log as "admin commands"
|
||||||
|
*/
|
||||||
|
#define CF_ADMIN_COMMAND (1U << 19)
|
||||||
|
|
||||||
/* Bits in server_command_flags */
|
/* Bits in server_command_flags */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -145,8 +145,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual bool execute(THD *thd) = 0;
|
virtual bool execute(THD *thd) = 0;
|
||||||
|
|
||||||
virtual bool log_slow_enabled_statement(const THD *thd) const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Sql_cmd()
|
Sql_cmd()
|
||||||
{}
|
{}
|
||||||
@ -163,17 +161,4 @@ protected:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Sql_cmd_admin: public Sql_cmd
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Sql_cmd_admin()
|
|
||||||
{}
|
|
||||||
~Sql_cmd_admin()
|
|
||||||
{}
|
|
||||||
bool log_slow_enabled_statement(const THD *thd) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // SQL_CMD_INCLUDED
|
#endif // SQL_CMD_INCLUDED
|
||||||
|
@ -4720,19 +4720,6 @@ bool LEX::is_partition_management() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Sql_cmd::log_slow_enabled_statement(const THD *thd) const
|
|
||||||
{
|
|
||||||
return global_system_variables.sql_log_slow && thd->variables.sql_log_slow;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Sql_cmd_admin::log_slow_enabled_statement(const THD *thd) const
|
|
||||||
{
|
|
||||||
return opt_log_slow_admin_statements &&
|
|
||||||
Sql_cmd::log_slow_enabled_statement(thd);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
uint binlog_unsafe_map[256];
|
uint binlog_unsafe_map[256];
|
||||||
|
|
||||||
|
@ -309,10 +309,11 @@ void init_update_queries(void)
|
|||||||
sql_command_flags[SQLCOM_CREATE_TABLE]= CF_CHANGES_DATA | CF_REEXECUTION_FRAGILE |
|
sql_command_flags[SQLCOM_CREATE_TABLE]= CF_CHANGES_DATA | CF_REEXECUTION_FRAGILE |
|
||||||
CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS |
|
CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS |
|
||||||
CF_CAN_GENERATE_ROW_EVENTS;
|
CF_CAN_GENERATE_ROW_EVENTS;
|
||||||
sql_command_flags[SQLCOM_CREATE_INDEX]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS;
|
sql_command_flags[SQLCOM_CREATE_INDEX]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS |
|
||||||
|
CF_REPORT_PROGRESS | CF_ADMIN_COMMAND;
|
||||||
sql_command_flags[SQLCOM_ALTER_TABLE]= CF_CHANGES_DATA | CF_WRITE_LOGS_COMMAND |
|
sql_command_flags[SQLCOM_ALTER_TABLE]= CF_CHANGES_DATA | CF_WRITE_LOGS_COMMAND |
|
||||||
CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS |
|
CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS |
|
||||||
CF_INSERTS_DATA;
|
CF_INSERTS_DATA | CF_ADMIN_COMMAND;
|
||||||
sql_command_flags[SQLCOM_TRUNCATE]= CF_CHANGES_DATA | CF_WRITE_LOGS_COMMAND |
|
sql_command_flags[SQLCOM_TRUNCATE]= CF_CHANGES_DATA | CF_WRITE_LOGS_COMMAND |
|
||||||
CF_AUTO_COMMIT_TRANS;
|
CF_AUTO_COMMIT_TRANS;
|
||||||
sql_command_flags[SQLCOM_DROP_TABLE]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
|
sql_command_flags[SQLCOM_DROP_TABLE]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
|
||||||
@ -324,7 +325,8 @@ void init_update_queries(void)
|
|||||||
sql_command_flags[SQLCOM_ALTER_DB_UPGRADE]= CF_AUTO_COMMIT_TRANS;
|
sql_command_flags[SQLCOM_ALTER_DB_UPGRADE]= CF_AUTO_COMMIT_TRANS;
|
||||||
sql_command_flags[SQLCOM_ALTER_DB]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
|
sql_command_flags[SQLCOM_ALTER_DB]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
|
||||||
sql_command_flags[SQLCOM_RENAME_TABLE]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
|
sql_command_flags[SQLCOM_RENAME_TABLE]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
|
||||||
sql_command_flags[SQLCOM_DROP_INDEX]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS;
|
sql_command_flags[SQLCOM_DROP_INDEX]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS |
|
||||||
|
CF_REPORT_PROGRESS | CF_ADMIN_COMMAND;
|
||||||
sql_command_flags[SQLCOM_CREATE_VIEW]= CF_CHANGES_DATA | CF_REEXECUTION_FRAGILE |
|
sql_command_flags[SQLCOM_CREATE_VIEW]= CF_CHANGES_DATA | CF_REEXECUTION_FRAGILE |
|
||||||
CF_AUTO_COMMIT_TRANS;
|
CF_AUTO_COMMIT_TRANS;
|
||||||
sql_command_flags[SQLCOM_DROP_VIEW]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
|
sql_command_flags[SQLCOM_DROP_VIEW]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
|
||||||
@ -492,10 +494,14 @@ void init_update_queries(void)
|
|||||||
The following admin table operations are allowed
|
The following admin table operations are allowed
|
||||||
on log tables.
|
on log tables.
|
||||||
*/
|
*/
|
||||||
sql_command_flags[SQLCOM_REPAIR]= CF_WRITE_LOGS_COMMAND | CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS;
|
sql_command_flags[SQLCOM_REPAIR]= CF_WRITE_LOGS_COMMAND | CF_AUTO_COMMIT_TRANS |
|
||||||
sql_command_flags[SQLCOM_OPTIMIZE]|= CF_WRITE_LOGS_COMMAND | CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS;
|
CF_REPORT_PROGRESS | CF_ADMIN_COMMAND;
|
||||||
sql_command_flags[SQLCOM_ANALYZE]= CF_WRITE_LOGS_COMMAND | CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS;
|
sql_command_flags[SQLCOM_OPTIMIZE]|= CF_WRITE_LOGS_COMMAND | CF_AUTO_COMMIT_TRANS |
|
||||||
sql_command_flags[SQLCOM_CHECK]= CF_WRITE_LOGS_COMMAND | CF_AUTO_COMMIT_TRANS | CF_REPORT_PROGRESS;
|
CF_REPORT_PROGRESS | CF_ADMIN_COMMAND;
|
||||||
|
sql_command_flags[SQLCOM_ANALYZE]= CF_WRITE_LOGS_COMMAND | CF_AUTO_COMMIT_TRANS |
|
||||||
|
CF_REPORT_PROGRESS | CF_ADMIN_COMMAND;
|
||||||
|
sql_command_flags[SQLCOM_CHECK]= CF_WRITE_LOGS_COMMAND | CF_AUTO_COMMIT_TRANS |
|
||||||
|
CF_REPORT_PROGRESS | CF_ADMIN_COMMAND;
|
||||||
sql_command_flags[SQLCOM_CHECKSUM]= CF_REPORT_PROGRESS;
|
sql_command_flags[SQLCOM_CHECKSUM]= CF_REPORT_PROGRESS;
|
||||||
|
|
||||||
sql_command_flags[SQLCOM_CREATE_USER]|= CF_AUTO_COMMIT_TRANS;
|
sql_command_flags[SQLCOM_CREATE_USER]|= CF_AUTO_COMMIT_TRANS;
|
||||||
@ -1304,10 +1310,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||||||
m_key);
|
m_key);
|
||||||
thd->set_command(command);
|
thd->set_command(command);
|
||||||
|
|
||||||
/*
|
|
||||||
Commands which always take a long time are logged into
|
|
||||||
the slow log only if opt_log_slow_admin_statements is set.
|
|
||||||
*/
|
|
||||||
thd->enable_slow_log= true;
|
thd->enable_slow_log= true;
|
||||||
thd->query_plan_flags= QPLAN_INIT;
|
thd->query_plan_flags= QPLAN_INIT;
|
||||||
thd->lex->sql_command= SQLCOM_END; /* to avoid confusing VIEW detectors */
|
thd->lex->sql_command= SQLCOM_END; /* to avoid confusing VIEW detectors */
|
||||||
@ -1718,7 +1720,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||||||
|
|
||||||
status_var_increment(thd->status_var.com_other);
|
status_var_increment(thd->status_var.com_other);
|
||||||
|
|
||||||
thd->enable_slow_log&= opt_log_slow_admin_statements;
|
|
||||||
thd->query_plan_flags|= QPLAN_ADMIN;
|
thd->query_plan_flags|= QPLAN_ADMIN;
|
||||||
if (check_global_access(thd, REPL_SLAVE_ACL))
|
if (check_global_access(thd, REPL_SLAVE_ACL))
|
||||||
break;
|
break;
|
||||||
@ -2018,31 +2019,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool log_slow_enabled_statement(const THD *thd)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
TODO-10.4: Add classes Sql_cmd_create_index and Sql_cmd_drop_index
|
|
||||||
for symmetry with other admin commands, so these statements can be
|
|
||||||
handled by this command:
|
|
||||||
*/
|
|
||||||
if (thd->lex->m_sql_cmd)
|
|
||||||
return thd->lex->m_sql_cmd->log_slow_enabled_statement(thd);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Currently CREATE INDEX or DROP INDEX cause a full table rebuild
|
|
||||||
and thus classify as slow administrative statements just like
|
|
||||||
ALTER TABLE.
|
|
||||||
*/
|
|
||||||
if ((thd->lex->sql_command == SQLCOM_CREATE_INDEX ||
|
|
||||||
thd->lex->sql_command == SQLCOM_DROP_INDEX) &&
|
|
||||||
!opt_log_slow_admin_statements)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return global_system_variables.sql_log_slow &&
|
|
||||||
thd->variables.sql_log_slow;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@note
|
@note
|
||||||
This function must call delete_explain_query().
|
This function must call delete_explain_query().
|
||||||
@ -2075,12 +2051,20 @@ void log_slow_statement(THD *thd)
|
|||||||
((thd->server_status &
|
((thd->server_status &
|
||||||
(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
|
(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
|
||||||
opt_log_queries_not_using_indexes &&
|
opt_log_queries_not_using_indexes &&
|
||||||
!(sql_command_flags[thd->lex->sql_command] & CF_STATUS_COMMAND))) &&
|
!(thd->query_plan_flags & QPLAN_STATUS))) &&
|
||||||
thd->get_examined_row_count() >= thd->variables.min_examined_row_limit)
|
thd->get_examined_row_count() >= thd->variables.min_examined_row_limit)
|
||||||
{
|
{
|
||||||
thd->status_var.long_query_count++;
|
thd->status_var.long_query_count++;
|
||||||
|
|
||||||
if (!log_slow_enabled_statement(thd))
|
/*
|
||||||
|
until opt_log_slow_admin_statements is removed, it
|
||||||
|
duplicates slow_log_filter=admin
|
||||||
|
*/
|
||||||
|
if ((thd->query_plan_flags & QPLAN_ADMIN) &&
|
||||||
|
!opt_log_slow_admin_statements)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
if (!global_system_variables.sql_log_slow || !thd->variables.sql_log_slow)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2953,6 +2937,11 @@ mysql_execute_command(THD *thd)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND)
|
||||||
|
thd->query_plan_flags|= QPLAN_STATUS;
|
||||||
|
if (sql_command_flags[lex->sql_command] & CF_ADMIN_COMMAND)
|
||||||
|
thd->query_plan_flags|= QPLAN_ADMIN;
|
||||||
|
|
||||||
/* Start timeouts */
|
/* Start timeouts */
|
||||||
thd->set_query_timer();
|
thd->set_query_timer();
|
||||||
|
|
||||||
@ -3574,7 +3563,6 @@ end_with_restore_list:
|
|||||||
if (check_one_table_access(thd, INDEX_ACL, all_tables))
|
if (check_one_table_access(thd, INDEX_ACL, all_tables))
|
||||||
goto error; /* purecov: inspected */
|
goto error; /* purecov: inspected */
|
||||||
WSREP_TO_ISOLATION_BEGIN(first_table->db, first_table->table_name, NULL)
|
WSREP_TO_ISOLATION_BEGIN(first_table->db, first_table->table_name, NULL)
|
||||||
thd->query_plan_flags|= QPLAN_ADMIN;
|
|
||||||
|
|
||||||
bzero((char*) &create_info, sizeof(create_info));
|
bzero((char*) &create_info, sizeof(create_info));
|
||||||
create_info.db_type= 0;
|
create_info.db_type= 0;
|
||||||
@ -5732,7 +5720,6 @@ end_with_restore_list:
|
|||||||
case SQLCOM_REPAIR:
|
case SQLCOM_REPAIR:
|
||||||
case SQLCOM_TRUNCATE:
|
case SQLCOM_TRUNCATE:
|
||||||
case SQLCOM_ALTER_TABLE:
|
case SQLCOM_ALTER_TABLE:
|
||||||
thd->query_plan_flags|= QPLAN_ADMIN;
|
|
||||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case SQLCOM_SIGNAL:
|
case SQLCOM_SIGNAL:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user