Commit bdc5a621 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi
Browse files

Added status variables for all MySQL commands.

parent 70e053fb
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -19620,6 +19620,7 @@ The status variables listed above have the following meaning:
@item @code{Aborted_connects} @tab Number of tries to connect to the MySQL server that failed. @xref{Communication errors}.
@item @code{Bytes_received} @tab Number of bytes received from all clients.
@item @code{Bytes_sent} @tab Number of bytes sent to all clients.
@item @code{Com_xxxx} @tab Number of times the xxx commands has been executed.
@item @code{Connections} @tab Number of connection attempts to the MySQL server.
@item @code{Created_tmp_disk_tables} @tab Number of implicit temporary tables on disk created while executing statements.
@item @code{Created_tmp_tables} @tab Number of implicit temporary tables in memory created while executing statements.
@@ -46839,6 +46840,9 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.47
@itemize @bullet
@item
Added statistics variables for all MySQL commands. (@code{SHOW STATUS} is
now much longer).
@item
Fix default values for InnoDB tables.
@item
Fixed that @code{GROUP BY expr DESC} works.
+1 −0
Original line number Diff line number Diff line
@@ -542,6 +542,7 @@ extern ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
	     max_tmp_tables,max_heap_table_size,query_buff_size,
	     lower_case_table_names,thread_stack,thread_stack_min,
	     binlog_cache_size, max_binlog_cache_size, record_rnd_cache_size;
extern ulong com_stat[(uint) SQLCOM_END], com_other;
extern ulong specialflag, current_pid;
extern bool low_priority_updates, using_update_log,opt_warnings;
extern bool opt_sql_bin_update, opt_safe_show_db, opt_safe_user_create;
+58 −0
Original line number Diff line number Diff line
@@ -270,6 +270,7 @@ ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
      net_interactive_timeout, slow_launch_time = 2L,
      net_read_timeout,net_write_timeout,slave_open_temp_tables=0,
      open_files_limit=0, max_binlog_size, record_rnd_cache_size;
ulong com_stat[(uint) SQLCOM_END], com_other;
ulong slave_net_timeout;
ulong thread_cache_size=0, binlog_cache_size=0, max_binlog_cache_size=0;
volatile ulong cached_thread_count=0;
@@ -3044,6 +3045,63 @@ struct show_var_st status_vars[]= {
  {"Aborted_connects",         (char*) &aborted_connects,       SHOW_LONG},
  {"Bytes_received",           (char*) &bytes_received,         SHOW_LONG},
  {"Bytes_sent",               (char*) &bytes_sent,             SHOW_LONG},
  {"Com_admin_commands",       (char*) &com_other,		SHOW_LONG},
  {"Com_alter_table",	       (char*) (com_stat+(uint) SQLCOM_ALTER_TABLE),SHOW_LONG},
  {"Com_analyze",	       (char*) (com_stat+(uint) SQLCOM_ANALYZE),SHOW_LONG},
  {"Com_backup_table",	       (char*) (com_stat+(uint) SQLCOM_BACKUP_TABLE),SHOW_LONG},
  {"Com_begin",		       (char*) (com_stat+(uint) SQLCOM_BEGIN),SHOW_LONG},
  {"Com_change_db",	       (char*) (com_stat+(uint) SQLCOM_CHANGE_DB),SHOW_LONG},
  {"Com_change_master",	       (char*) (com_stat+(uint) SQLCOM_CHANGE_MASTER),SHOW_LONG},
  {"Com_check",		       (char*) (com_stat+(uint) SQLCOM_CHECK),SHOW_LONG},
  {"Com_commit",	       (char*) (com_stat+(uint) SQLCOM_COMMIT),SHOW_LONG},
  {"Com_create_db",	       (char*) (com_stat+(uint) SQLCOM_CREATE_DB),SHOW_LONG},
  {"Com_create_function",      (char*) (com_stat+(uint) SQLCOM_CREATE_FUNCTION),SHOW_LONG},
  {"Com_create_index",	       (char*) (com_stat+(uint) SQLCOM_CREATE_INDEX),SHOW_LONG},
  {"Com_create_table",	       (char*) (com_stat+(uint) SQLCOM_CREATE_TABLE),SHOW_LONG},
  {"Com_delete",	       (char*) (com_stat+(uint) SQLCOM_DELETE),SHOW_LONG},
  {"Com_drop_db",	       (char*) (com_stat+(uint) SQLCOM_DROP_DB),SHOW_LONG},
  {"Com_drop_function",	       (char*) (com_stat+(uint) SQLCOM_DROP_FUNCTION),SHOW_LONG},
  {"Com_drop_index",	       (char*) (com_stat+(uint) SQLCOM_DROP_INDEX),SHOW_LONG},
  {"Com_drop_table",	       (char*) (com_stat+(uint) SQLCOM_DROP_TABLE),SHOW_LONG},
  {"Com_flush",		       (char*) (com_stat+(uint) SQLCOM_FLUSH),SHOW_LONG},
  {"Com_grant",		       (char*) (com_stat+(uint) SQLCOM_GRANT),SHOW_LONG},
  {"Com_insert",	       (char*) (com_stat+(uint) SQLCOM_INSERT),SHOW_LONG},
  {"Com_insert_select",	       (char*) (com_stat+(uint) SQLCOM_INSERT_SELECT),SHOW_LONG},
  {"Com_kill",		       (char*) (com_stat+(uint) SQLCOM_KILL),SHOW_LONG},
  {"Com_load",		       (char*) (com_stat+(uint) SQLCOM_LOAD),SHOW_LONG},
  {"Com_load_master_table",    (char*) (com_stat+(uint) SQLCOM_LOAD_MASTER_TABLE),SHOW_LONG},
  {"Com_lock_tables",	       (char*) (com_stat+(uint) SQLCOM_LOCK_TABLES),SHOW_LONG},
  {"Com_optimize",	       (char*) (com_stat+(uint) SQLCOM_OPTIMIZE),SHOW_LONG},
  {"Com_purge",		       (char*) (com_stat+(uint) SQLCOM_PURGE),SHOW_LONG},
  {"Com_rename_table",	       (char*) (com_stat+(uint) SQLCOM_RENAME_TABLE),SHOW_LONG},
  {"Com_repair",	       (char*) (com_stat+(uint) SQLCOM_REPAIR),SHOW_LONG},
  {"Com_replace",	       (char*) (com_stat+(uint) SQLCOM_REPLACE),SHOW_LONG},
  {"Com_replace_select",       (char*) (com_stat+(uint) SQLCOM_REPLACE_SELECT),SHOW_LONG},
  {"Com_reset",		       (char*) (com_stat+(uint) SQLCOM_RESET),SHOW_LONG},
  {"Com_restore_table",	       (char*) (com_stat+(uint) SQLCOM_RESTORE_TABLE),SHOW_LONG},
  {"Com_revoke",	       (char*) (com_stat+(uint) SQLCOM_REVOKE),SHOW_LONG},
  {"Com_rollback",	       (char*) (com_stat+(uint) SQLCOM_ROLLBACK),SHOW_LONG},
  {"Com_select",	       (char*) (com_stat+(uint) SQLCOM_SELECT),SHOW_LONG},
  {"Com_set_option",	       (char*) (com_stat+(uint) SQLCOM_SET_OPTION),SHOW_LONG},
  {"Com_show_binlogs",	       (char*) (com_stat+(uint) SQLCOM_SHOW_BINLOGS),SHOW_LONG},
  {"Com_show_create",	       (char*) (com_stat+(uint) SQLCOM_SHOW_CREATE),SHOW_LONG},
  {"Com_show_databases",       (char*) (com_stat+(uint) SQLCOM_SHOW_DATABASES),SHOW_LONG},
  {"Com_show_fields",	       (char*) (com_stat+(uint) SQLCOM_SHOW_FIELDS),SHOW_LONG},
  {"Com_show_grants",	       (char*) (com_stat+(uint) SQLCOM_SHOW_GRANTS),SHOW_LONG},
  {"Com_show_keys",	       (char*) (com_stat+(uint) SQLCOM_SHOW_KEYS),SHOW_LONG},
  {"Com_show_logs",	       (char*) (com_stat+(uint) SQLCOM_SHOW_LOGS),SHOW_LONG},
  {"Com_show_master_STAT",     (char*) (com_stat+(uint) SQLCOM_SHOW_MASTER_STAT),SHOW_LONG},
  {"Com_show_open_tables",     (char*) (com_stat+(uint) SQLCOM_SHOW_OPEN_TABLES),SHOW_LONG},
  {"Com_show_processlist",     (char*) (com_stat+(uint) SQLCOM_SHOW_PROCESSLIST),SHOW_LONG},
  {"Com_show_slave_stat",      (char*) (com_stat+(uint) SQLCOM_SHOW_SLAVE_STAT),SHOW_LONG},
  {"Com_show_status",	       (char*) (com_stat+(uint) SQLCOM_SHOW_STATUS),SHOW_LONG},
  {"Com_show_tables",	       (char*) (com_stat+(uint) SQLCOM_SHOW_TABLES),SHOW_LONG},
  {"Com_show_variables",       (char*) (com_stat+(uint) SQLCOM_SHOW_VARIABLES),SHOW_LONG},
  {"Com_slave_start",	       (char*) (com_stat+(uint) SQLCOM_SLAVE_START),SHOW_LONG},
  {"Com_slave_stop",	       (char*) (com_stat+(uint) SQLCOM_SLAVE_STOP),SHOW_LONG},
  {"Com_truncate",	       (char*) (com_stat+(uint) SQLCOM_TRUNCATE),SHOW_LONG},
  {"Com_unlock_tables",	       (char*) (com_stat+(uint) SQLCOM_UNLOCK_TABLES),SHOW_LONG},
  {"Com_update",	       (char*) (com_stat+(uint) SQLCOM_UPDATE),SHOW_LONG},
  {"Connections",              (char*) &thread_id,              SHOW_LONG_CONST},
  {"Created_tmp_disk_tables",  (char*) &created_tmp_disk_tables,SHOW_LONG},
  {"Created_tmp_tables",       (char*) &created_tmp_tables,     SHOW_LONG},
+2 −1
Original line number Diff line number Diff line
@@ -53,7 +53,8 @@ enum enum_sql_command {
  SQLCOM_BEGIN, SQLCOM_LOAD_MASTER_TABLE, SQLCOM_CHANGE_MASTER,
  SQLCOM_RENAME_TABLE, SQLCOM_BACKUP_TABLE, SQLCOM_RESTORE_TABLE,
  SQLCOM_RESET, SQLCOM_PURGE, SQLCOM_SHOW_BINLOGS,
  SQLCOM_SHOW_OPEN_TABLES
  SQLCOM_SHOW_OPEN_TABLES,
  SQLCOM_END
};

enum lex_states { STATE_START, STATE_CHAR, STATE_IDENT,
+16 −1
Original line number Diff line number Diff line
@@ -705,7 +705,6 @@ int mysql_table_dump(THD* thd, char* db, char* tbl_name, int fd)
}



	/* Execute one command from socket (query or simple command) */

bool do_command(THD *thd)
@@ -756,11 +755,13 @@ bool do_command(THD *thd)
  thd->lex.options=0;				// We store status here
  switch(command) {
  case COM_INIT_DB:
    thread_safe_increment(com_stat[SQLCOM_CHANGE_DB],&LOCK_thread_count);
    if (!mysql_change_db(thd,packet+1))
      mysql_log.write(thd,command,"%s",thd->db);
    break;
  case COM_TABLE_DUMP:
    {
      thread_safe_increment(com_other,&LOCK_thread_count);
      slow_command = TRUE;
      char* data = packet + 1;
      uint db_len = *data;
@@ -778,6 +779,7 @@ bool do_command(THD *thd)
    }
  case COM_CHANGE_USER:
  {
    thread_safe_increment(com_other,&LOCK_thread_count);
    char *user=   (char*) packet+1;
    char *passwd= strend(user)+1;
    char *db=     strend(passwd)+1;
@@ -843,6 +845,7 @@ bool do_command(THD *thd)
  {
    char *fields;
    TABLE_LIST table_list;
    thread_safe_increment(com_stat[SQLCOM_SHOW_FIELDS],&LOCK_thread_count);
    bzero((char*) &table_list,sizeof(table_list));
    if (!(table_list.db=thd->db))
    {
@@ -866,6 +869,7 @@ bool do_command(THD *thd)
  }
#endif
  case COM_QUIT:
    /* We don't calculate statistics for this command */
    mysql_log.write(thd,command,NullS);
    net->error=0;				// Don't give 'abort' message
    error=TRUE;					// End server
@@ -874,6 +878,7 @@ bool do_command(THD *thd)
  case COM_CREATE_DB:
    {
      char *db=thd->strdup(packet+1);
      thread_safe_increment(com_stat[SQLCOM_CREATE_DB],&LOCK_thread_count);
      // null test to handle EOM
      if (!db || !stripp_sp(db) || check_db_name(db))
      {
@@ -889,6 +894,7 @@ bool do_command(THD *thd)
  case COM_DROP_DB:
    {
      char *db=thd->strdup(packet+1);
      thread_safe_increment(com_stat[SQLCOM_DROP_DB],&LOCK_thread_count);
      // null test to handle EOM
      if (!db || !stripp_sp(db) || check_db_name(db))
      {
@@ -903,6 +909,7 @@ bool do_command(THD *thd)
    }
  case COM_BINLOG_DUMP:
    {
      thread_safe_increment(com_other,&LOCK_thread_count);
      slow_command = TRUE;
      if(check_access(thd, FILE_ACL, any_db))
	break;
@@ -926,6 +933,7 @@ bool do_command(THD *thd)
  case COM_REFRESH:
    {
      uint options=(uchar) packet[1];
      thread_safe_increment(com_stat[SQLCOM_FLUSH],&LOCK_thread_count);
      if (check_access(thd,RELOAD_ACL,any_db))
	break;
      mysql_log.write(thd,command,NullS);
@@ -936,6 +944,7 @@ bool do_command(THD *thd)
      break;
    }
  case COM_SHUTDOWN:
    thread_safe_increment(com_other,&LOCK_thread_count);
    if (check_access(thd,SHUTDOWN_ACL,any_db))
      break; /* purecov: inspected */
    DBUG_PRINT("quit",("Got shutdown command"));
@@ -957,6 +966,7 @@ bool do_command(THD *thd)
  case COM_STATISTICS:
  {
    mysql_log.write(thd,command,NullS);
    thread_safe_increment(com_stat[SQLCOM_SHOW_STATUS],&LOCK_thread_count);
    char buff[200];
    ulong uptime = (ulong) (thd->start_time - start_time);
    sprintf((char*) buff,
@@ -975,9 +985,11 @@ bool do_command(THD *thd)
    break;
  }
  case COM_PING:
    thread_safe_increment(com_other,&LOCK_thread_count);
    send_ok(net);				// Tell client we are alive
    break;
  case COM_PROCESS_INFO:
    thread_safe_increment(com_stat[SQLCOM_SHOW_PROCESSLIST],&LOCK_thread_count);
    if (!thd->priv_user[0] && check_process_priv(thd))
      break;
    mysql_log.write(thd,command,NullS);
@@ -986,11 +998,13 @@ bool do_command(THD *thd)
    break;
  case COM_PROCESS_KILL:
  {
    thread_safe_increment(com_stat[SQLCOM_KILL],&LOCK_thread_count);
    ulong id=(ulong) uint4korr(packet+1);
    kill_one_thread(thd,id);
    break;
  }
  case COM_DEBUG:
    thread_safe_increment(com_other,&LOCK_thread_count);
    if (check_process_priv(thd))
      break;					/* purecov: inspected */
    mysql_print_status(thd);
@@ -1062,6 +1076,7 @@ mysql_execute_command(void)
  // rules have been given and the table list says the query should not be
  // replicated
  
  thread_safe_increment(com_stat[lex->sql_command],&LOCK_thread_count);
  switch (lex->sql_command) {
  case SQLCOM_SELECT:
  {