The server maintains many status variables that provide
information about its operation. You can view these variables
and their values by using the SHOW STATUS
statement:
mysql> SHOW STATUS;
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Bytes_received | 155372598 |
| Bytes_sent | 1176560426 |
| Connections | 30023 |
...
Many status variables are reset to 0 by the FLUSH
STATUS statement.
The status variables have the following meanings. The
Com_
statement counter variables were added beginning with MySQL
3.23.47. The
xxxQcache_ query
cache variables were added beginning with MySQL 4.0.1.
Otherwise, variables with no version indicated have been
present since at least MySQL 3.22.
xxx
Aborted_clients
The number of connections that were aborted because the client died without closing the connection properly. See Section A.1.2.10, “Communication Errors and Aborted Connections”.
Aborted_connects
The number of failed attempts to connect to the MySQL server. See Section A.1.2.10, “Communication Errors and Aborted Connections”.
Binlog_cache_disk_use
The number of transactions that used the temporary binary
log cache but that exceeded the value of
binlog_cache_size and used a temporary
file to store statements from the transaction. This
variable was added in MySQL 4.1.2.
Binlog_cache_use
The number of transactions that used the temporary binary log cache. This variable was added in MySQL 4.1.2.
Bytes_received
The number of bytes received from all clients. This variable was added in MySQL 3.23.7.
Bytes_sent
The number of bytes sent to all clients. This variable was added in MySQL 3.23.7.
Com_
xxx
The Com_
statement counter variables were added beginning with
MySQL 3.23.47. They indicate the number of times each
xxxxxx statement has been
executed. There is one status variable for each type of
statement. For example, Com_delete and
Com_insert count
DELETE and INSERT
statements, respectively. However, if a query result is
returned from query cache, the server increments the
Qcache_hits status variable, not
Com_select. See
Section 5.13.4, “Query Cache Status and Maintenance”.
New
Com_stmt_
status variables have been added in MySQL 4.1.13:
xxx
Com_stmt_prepare
Com_stmt_execute
Com_stmt_send_long_data
Com_stmt_reset
Com_stmt_close
Those variables stand for prepared statement commands.
Their names refer to the
COM_
command set used in the network layer. In other words,
their values increase whenever prepared statement API
calls such as mysql_stmt_prepare(),
mysql_stmt_execute(), and so forth are
executed. However, xxxCom_stmt_prepare,
Com_stmt_execute and
Com_stmt_close also increase for
PREPARE, EXECUTE, or
DEALLOCATE PREPARE, respectively.
Additionally, the values of the older (available since
MySQL 4.1.3) statement counter variables
Com_prepare_sql,
Com_execute_sql, and
Com_dealloc_sql increase for the
PREPARE, EXECUTE,
and DEALLOCATE PREPARE statements.
All of the
Com_stmt_
variables are increased even if their argument (a prepared
statement) is unknown or an error occurred during
execution; in other words, their values correspond to the
number of requests issued, not to the number of requests
successfully completed.
xxx
Connections
The number of connection attempts (successful or not) to the MySQL server.
Created_tmp_disk_tables
The number of temporary tables on disk created automatically by the server while executing statements. This variable was added in MySQL 3.23.24.
Created_tmp_files
How many temporary files mysqld has created. This variable was added in MySQL 3.23.28.
Created_tmp_tables
The number of in-memory temporary tables created
automatically by the server while executing statements. If
Created_tmp_disk_tables is large, you
may want to increase the tmp_table_size
value to cause temporary tables to be memory-based instead
of disk-based.
Delayed_errors
The number of rows written with INSERT
DELAYED for which some error occurred (probably
duplicate key).
Delayed_insert_threads
The number of INSERT DELAYED handler
threads in use.
Delayed_writes
The number of INSERT DELAYED rows
written.
Flush_commands
The number of executed FLUSH
statements.
Handler_commit
The number of internal COMMIT
statements. This variable was added in MySQL 4.0.2.
Handler_discover
The MySQL server can ask the NDB
Cluster storage engine if it knows about a table
with a given name. This is called discovery.
Handler_discover indicates the number
of times that tables have been discovered. This variable
was added in MySQL 4.1.2.
Handler_delete
The number of times a row was deleted from a table.
Handler_read_first
The number of times the first entry was read from an
index. If this value is high, it suggests that the server
is doing a lot of full index scans; for example,
SELECT col1 FROM foo, assuming that
col1 is indexed.
Handler_read_key
The number of requests to read a row based on a key. If this value is high, it is a good indication that your tables are properly indexed for your queries.
Handler_read_next
The number of requests to read the next row in key order. This value is incremented if you are querying an index column with a range constraint or if you are doing an index scan.
Handler_read_prev
The number of requests to read the previous row in key
order. This read method is mainly used to optimize
ORDER BY ... DESC. This variable was
added in MySQL 3.23.6.
Handler_read_rnd
The number of requests to read a row based on a fixed position. This value is high if you are doing a lot of queries that require sorting of the result. You probably have a lot of queries that require MySQL to scan entire tables or you have joins that don't use keys properly.
Handler_read_rnd_next
The number of requests to read the next row in the data file. This value is high if you are doing a lot of table scans. Generally this suggests that your tables are not properly indexed or that your queries are not written to take advantage of the indexes you have.
Handler_rollback
The number of internal ROLLBACK
statements. This variable was added in MySQL 4.0.2.
Handler_update
The number of requests to update a row in a table.
Handler_write
The number of requests to insert a row in a table.
Key_blocks_not_flushed
The number of key blocks in the key cache that have
changed but have not yet been flushed to disk. This
variable was added in MySQL 4.1.1. It used to be known as
Not_flushed_key_blocks.
Key_blocks_unused
The number of unused blocks in the key cache. You can use
this value to determine how much of the key cache is in
use; see the discussion of
key_buffer_size in
Section 5.2.3, “System Variables”. This variable
was added in MySQL 4.1.2.
Key_blocks_used
The number of used blocks in the key cache. This value is a high-water mark that indicates the maximum number of blocks that have ever been in use at one time.
Key_read_requests
The number of requests to read a key block from the cache.
Key_reads
The number of physical reads of a key block from disk. If
Key_reads is large, then your
key_buffer_size value is probably too
small. The cache miss rate can be calculated as
Key_reads/Key_read_requests.
Key_write_requests
The number of requests to write a key block to the cache.
Key_writes
The number of physical writes of a key block to disk.
Max_used_connections
The maximum number of connections that have been in use simultaneously since the server started.
Not_flushed_delayed_rows
The number of rows waiting to be written in
INSERT DELAY queues.
Not_flushed_key_blocks
The old name for Key_blocks_not_flushed
before MySQL 4.1.1.
Open_files
The number of files that are open.
Open_streams
The number of streams that are open (used mainly for logging).
Open_tables
The number of tables that are open.
Opened_tables
The number of tables that have been opened. If
Opened_tables is big, your
table_cache value is probably too
small.
Prepared_stmt_count
The current number of prepared statements. (The maximum
number of statements is given by the
max_prepared_stmt_count system
variable.) This variable was added in MySQL 4.1.23.
Qcache_free_blocks
The number of free memory blocks in the query cache.
Qcache_free_memory
The amount of free memory for the query cache.
Qcache_hits
The number of query cache hits.
Qcache_inserts
The number of queries added to the query cache.
Qcache_lowmem_prunes
The number of queries that were deleted from the query cache because of low memory.
Qcache_not_cached
The number of non-cached queries (not cacheable, or not
cached due to the query_cache_type
setting).
Qcache_queries_in_cache
The number of queries registered in the query cache.
Qcache_total_blocks
The total number of blocks in the query cache.
Questions
The number of statements that clients have sent to the server.
Rpl_status
The status of fail-safe replication (not yet implemented).
Select_full_join
The number of joins that perform table scans because they do not use indexes. If this value is not 0, you should carefully check the indexes of your tables. This variable was added in MySQL 3.23.25.
Select_full_range_join
The number of joins that used a range search on a reference table. This variable was added in MySQL 3.23.25.
Select_range
The number of joins that used ranges on the first table. This is normally not critical issue even if the value is quite large. This variable was added in MySQL 3.23.25.
Select_range_check
The number of joins without keys that check for key usage
after each row. (If this is not equal to
0, you should very carefully check the
indexes of your tables.) This variable was added in MySQL
3.23.25.
Select_scan
The number of joins that did a full scan of the first table. This variable was added in MySQL 3.23.25.
Slave_open_temp_tables
The number of temporary tables that the slave SQL thread currently has open. This variable was added in MySQL 3.23.29.
Slave_running
This is ON if this server is a slave
that is connected to a master. This variable was added in
MySQL 3.23.16.
Slave_retried_transactions
Total (since startup) number of times the replication slave SQL thread has retried transactions. This variable was added in MySQL 4.1.11.
Slow_launch_threads
The number of threads that have taken more than
slow_launch_time seconds to create.
This variable was added in MySQL 3.23.15.
Slow_queries
The number of queries that have taken more than
long_query_time seconds. See
Section 5.11.5, “The Slow Query Log”.
Sort_merge_passes
The number of merge passes that the sort algorithm has had
to do. If this value is large, you should consider
increasing the value of the
sort_buffer_size system variable. This
variable was added in MySQL 3.23.28.
Sort_range
The number of sorts that were done with ranges. This variable was added in MySQL 3.23.25.
Sort_rows
The number of sorted rows. This variable was added in MySQL 3.23.25.
Sort_scan
The number of sorts that were done by scanning the table. This variable was added in MySQL 3.23.25.
Ssl_
xxx
Variables used for SSL connections. These variables were added in MySQL 4.0.0.
Table_locks_immediate
The number of times that a table lock was acquired immediately. This variable was added in MySQL 3.23.33.
Table_locks_waited
The number of times that a table lock could not be acquired immediately and a wait was needed. If this is high and you have performance problems, you should first optimize your queries, and then either split your table or tables or use replication. This variable was added in MySQL 3.23.33.
Threads_cached
The number of threads in the thread cache. This variable was added in MySQL 3.23.17.
Threads_connected
The number of currently open connections.
Threads_created
The number of threads created to handle connections. If
Threads_created is big, you may want to
increase the thread_cache_size value.
The cache miss rate can be calculated as
Threads_created divided by
Connections. This variable was added in
MySQL 3.23.31.
Threads_running
The number of threads that are not sleeping.
Uptime
The number of seconds that the server has been up.

User Comments
Reading the explanation for Handler read rnd next , I question it! I list some number from a test db that does almost all accesses by locating a record with a key (GE or xxx%) and then using next to access related record; yet the Handler read rnd next is relatively large.
Handler read key 42053
Handler read next 453703
Handler read rnd 696
Handler read rnd next 104378
On MySQL 5.0 the com_* variables of 'show status' are counted for the current connection only. The new undocumented command 'show global status' shows server-wide counters. (http://bugs.mysql.com/bug.php?id=19422)
In 5.0.x and newer, there's a mixture of session and global status variables. Some things became session-ized in different versions than other things. The documentation doesn't say which is which and when, but through experimentation I find these to have a session scope:
Bytes_received
Bytes_sent
Com_*
Created_tmp_disk_tables
Created_tmp_tables
Handler_*
Last_query_cost
Select_full_join
Select_full_range_join
Select_range
Select_range_check
Select_scan
Slave_open_temp_tables
Slave_retried_transactions
Sort_merge_passes
Sort_range
Sort_rows
Sort_scan
Last_query_cost has a slightly different history than others. It was added in 5.0.1 but became session scoped in 5.0.7 instead of 5.0.2 (this is documented above).
Add your own comment.