minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

サーバステータスは、様々なサーバの状態を返します。
現在のサーバステータスを確認するには、以下のSQL文を発行します。

SHOW STATUS;
SHOW STATUS LIKE 'Qcache%';

サーバステータスを変更することは出来ません。

サーバステータスは主に、各種システム変数の調整をするために
利用されます。つまりパフォーマンスチューニング用です。

以下、MySQL5.0.16対応のサーバステータス一覧です。

クエリキャッシュ関連

Qcache_free_blocks

クエリキャッシュの空きブロック数。
この値が0以上の場合、クエリキャッシュにはまだ余裕があります。
query_cache_size システム変数でキャッシュサイズを指定できます。

Qcache_free_memory

クエリキャッシュの空きメモリ(byte単位)。
この値が0以上の場合、クエリキャッシュにはまだ余裕があります。
query_cache_size システム変数でキャッシュサイズを指定できます。

Qcache_hits

キャッシュヒット数。
SQL実行時、キャッシュ内から結果を返せる場合にこの値が増加します。

Qcache_inserts

キャッシュに加えられたクエリ数。
SQL実行時、キャッシュ内から結果を返せないが
その後同じSQLが発行された場合にキャッシュを使えるように
キャッシュに加えられたクエリが発行された場合にこの値が増加します。

Qcache_lowmem_prunes

メモリ不足によりキャッシュから削除されたクエリ数。
この値が大きい場合、
query_cache_size システム変数でキャッシュサイズを増やすことで
キャッシュの効率を上げる事が出来るでしょう。

Qcache_not_cached

キャッシュされなかったクエリ数。
SQL_NO_CACHE キーワード付きでSQLが発行されたり
結果が query_cache_limit より大きかった場合など、
クエリ結果はキャッシュされません。

Qcache_queries_in_cache

キャッシュに登録されているクエリ数。

Qcache_total_blocks

クエリキャッシュの総ブロック数。
query_cache_size / query_cache_min_res_unit で計算できます。

NDB関連

Handler_discover

MySQLはNDB Clusterストレージエンジンに
指定の名前を持ったテーブルについて知っているかどうかを問い合わせる事が出来ます。
この動作はディスカバリー(discovery)と呼ばれています。
このステータス値は、ディスカバーされた回数を返します。

InnoDB関連

Innodb_buffer_pool_pages_data

Innodb_buffer_pool_pages_dirty

Innodb_buffer_pool_pages_flushed

Innodb_buffer_pool_pages_free

Innodb_buffer_pool_pages_latched

Innodb_buffer_pool_pages_misc

Innodb_buffer_pool_pages_total

Innodb_buffer_pool_read_ahead_rnd

Innodb_buffer_pool_read_ahead_seq

Innodb_buffer_pool_read_requests

Innodb_buffer_pool_reads

Innodb_buffer_pool_wait_free

Innodb_buffer_pool_write_requests

Innodb_data_fsyncs

Innodb_data_pending_fsyncs

Innodb_data_pending_reads

Innodb_data_pending_writes

Innodb_data_read

Innodb_data_reads

Innodb_data_writes

Innodb_data_written

Innodb_dblwr_writes

Innodb_dblwr_pages_written

Innodb_log_waits

Innodb_log_write_requests

Innodb_log_writes

Innodb_os_log_fsyncs

Innodb_os_log_pending_fsyncs

Innodb_os_log_pending_writes

Innodb_os_log_written

Innodb_page_size

Innodb_pages_created

Innodb_pages_read

Innodb_pages_written

Innodb_row_lock_current_waits

Innodb_row_lock_time

Innodb_row_lock_time_avg

Innodb_row_lock_time_max

Innodb_row_lock_waits

Innodb_rows_deleted

Innodb_rows_inserted

Innodb_rows_read

Innodb_rows_updated

一般

Aborted_clients

中断された接続の数。
接続を明示的に閉じないままクライアントが終了した場合に
この値が増加します。
定期的に増えているようなら、どこかで接続を閉じていない
システムがあるかもしれません。

Aborted_connects

MySQLサーバに接続しようとして失敗した回数。

Binlog_cache_disk_use

単一トランザクション間で binlog_cache_size を超えるSQL文が発行された
回数(トランザクション単位)。
この場合、バイナリログ出力のためにテンポラリファイルが使用された為に
パフォーマンス低下を招いている可能性があります。

Binlog_cache_use

バイナリログキャッシュが使用されたトランザクション数。
この数と Binlog_cache_disk_use の合計が
全体のトランザクション数になります。

Bytes_received

クライアントから受け取ったデータ内容の総バイト数。

Bytes_sent

クライアントに送信したデータ内容の総バイト数。

Com_xxx

SQLが発行される毎にインクリメントされるカウント。
xxx の部分は、delete や insert などが当てはまります。
例えば、DELETE文が発行されると Com_delete ステータス値が1増加します。
SELECT文が発行されると Com_select ステータス値が増加しますが
クエリキャッシュが使われた場合は代わりに Qcache_hits ステータス値が増加します。

Compression

MySQL5.0.16から導入されました。
現在の接続がクライアント/サーバ間の圧縮プロトコルを
使っているかどうかを返します。

Connections

MySQLサーバへの接続試行回数(成功/不成功に関わらず)を返します。

Created_tmp_disk_tables

サーバによって暗黙的にディスク上に生成されたテンポラリテーブルの数。

Created_tmp_files

mysqldが生成したテンポラリファイルの数。

Created_tmp_tables

サーバによって暗黙的にメモリ内に生成されたテンポラリテーブルの数。
前述の Created_tmp_disk_tables の値が大きい場合には、
tmp_table_size を大きくすることによって
ディスクベースではなくメモリベースのテンポラリテーブルを
使う回数が増えるはずです。

Delayed_errors

INSERT DELAYED 文によるレコード挿入時に発生したエラー数。
大抵の場合、これはレコード重複エラーによるものです。

INSERT時のエラー

現在のMySQLでは、全てのカラムがデフォルト値を持っていて
挿入しようとした値が不正だった場合でも
MySQLは可能な限りその値を加工して挿入を試みます。
例えば、サイズ10のカラムに20文字の文字列をINSERTしようとした場合
MySQLは文字長を10に切り詰めます(エラーは返しません)。

これによって、MySQLではINSERT時にエラーが発生する場面というのは
限られてきます。
その中で最も一般的なのが、レコード重複エラーという訳です。

なお、この動作は将来のMySQLでは変更される可能性もあります。
不正な値を挿入しようとしたときに、エラーを返すようになるという事です。
これは他DBとの互換性が考慮されています。
一般的に、値の不正チェックはプログラム側で行いDB側で行うべきではありません。
なぜなら、DBによってそのチェック方法が異なるからです。
つまり、こういう手法を取っていると
他DBへ移行することが難しくなります。

Delayed_insert_threads

INSERT DELAYED文によって生成されたスレッド数。

Delayed_writes

INSERT DELAYED文によって挿入されたレコード数。

Flush_commands

FLUSH文を実行した回数。

Handler_commit

COMMITを内部的に実行した回数。

Handler_delete

テーブルから列が削除された回数。

Handler_read_first

インデックスから最初のエントリーが読み込まれた回数。
この値が大きい場合は、サーバがインデックスのフルスキャンを
多く行っているという事です。
例えば、col1にインデックスが張られたテーブルに対する

SELECT col1 FROM foo

文の実行などが当てはまります。
インデックスのフルスキャンは、インデックスを張らない場合より
処理が遅くなる可能性があります。

Handler_read_key

キーに基づいたレコード読み込みが要求された回数。
この値が大きい事は、適切にインデックス化されたテーブルおよび
クエリを使っているという証になります。

Handler_read_next

キー順序による次レコードの読み込みが要求された回数。
インデックススキャンやインデックスによる範囲指定を行ったときに
この値が増加します。

Handler_read_prev

キー順序による前レコードの読み込みが要求された回数。
この読み込みは主に ORDER BY ... DESC を最適化するために利用されます。

Handler_read_rnd

固定位置に基づいたレコード読み込み要求の数。
結果のソートが必要なクエリを大量に発行した場合、この値が大きくなります。
テーブルの全件スキャンや適切にキーを使えない結合を持ったクエリを
発行している可能性があります。

Handler_read_rnd_next

データファイル上での次レコード読み込みが要求された回数。
テーブルスキャンを多く実行したとき、この値が大きくなります。
このことは通常、テーブルに適切なインデックスが張られていないか
インデックスを利用できないようなクエリを発行していることを意味します。

Handler_rollback

ROLLBACKを内部的に実行した回数。

Handler_update

レコード更新を行った回数。

Handler_write

レコード挿入を行った回数。

Key_blocks_not_flushed

キーキャッシュ内で変更されたが
まだディスクにフラッシュされていないキーブロック数。

Key_blocks_unused

キーキャッシュ中の未使用ブロック数。
この値を元に、key_buffer_size システム変数の値を決定する
目安とすることが出来ます。

Key_blocks_used

キーキャッシュ中の使用ブロック数。
この値は過去の最大数(high-water mark)を示します。

Key_read_requests

キャッシュ内キーブロックからの読み込み要求数。

Key_reads

ディスク内キーブロックからの読み込み要求数。
この値が大きい場合、おそらく
key_buffer_size システム変数の値が小さすぎます。

キャッシュミス率は「Key_reads / Key_read_requests」により計算できます。

Key_write_requests

キャッシュ内キーブロックへの書き込み要求数。

Key_writes

ディスク内キーブロックへの書き込み要求数。

Last_query_cost

MySQL5.0.1から導入されました。
最後にコンパイルされたクエリの総コスト。
これは、同一クエリに関する異なるクエリプランのコスト比較に有用です。
デフォルト値の0は、クエリがまだコンパイルされていない事を示します。

Max_used_connections

サーバが起動してから今までの間、同時接続していた数の最大値。

Not_flushed_delayed_rows

INSERT DELAYED文で発行された後、まだ書き込まれずに待機しているレコード数。

Open_files

開いているファイル数。

Open_streams

開いているストリーム数(主にログとして使われる)。

Open_tables

現在開いているテーブル数。

Opened_tables

今までに開いたテーブル数。
この値が大きい場合は、テーブルキャッシュのサイズが小さすぎるかもしれません。
table_cache システム変数で、キャッシュサイズを変更できます。

Questions

サーバに送信されたクエリ数。

Rpl_status

未実装です。

Select_full_join

インデックスを使わない結合を使った回数。
この値が0でない場合は、テーブルのインデックスを調べた方がいいでしょう。

Select_full_range_join

参照テーブルで範囲指定をした結合を使った回数。

Select_range

(結合の)先頭テーブルで範囲指定をした結合を使った回数。
この数値が大きくても、通常はそれほど致命的な問題ではありません。

Select_range_check

各レコード毎にキー使用をチェックするキーを使わない結合の数。
…正直、自分でも訳してて意味がわかりません(笑)。
この値が0でない場合は、テーブルのインデックスを調べた方がいいでしょう。

Select_scan

(結合の)先頭テーブルでフルスキャンを行っている結合を使った回数。
これは非常に好ましくない結合なので、この値が0でない場合には
何らかの処置をして方が良いでしょう。

Slave_open_temp_tables

スレーブのSQLスレッドによって現在開かれているテンポラリテーブルの数。

Slave_running

この値が ON のとき、このサーバはマスタに繋ぐスレーブとして動作しています。

Slave_retried_transactions

MySQL5.0.4から導入されました。
スレーブのSQLスレッドがトランザクションを再試行した回数。

Slow_launch_threads

生成に slow_launch_time で指定された秒数以上掛かったスレッドの数。

Slow_queries

発行に long_query_time で指定された秒数以上掛かったクエリの数。

Sort_merge_passes

ソートアルゴリズムで必要になったマージパスの総数。
この値が大きい場合、sort_buffer_size システム変数の値を
大きくすることを検討しましょう。

Sort_range

範囲指定されたソートを行った回数。

Sort_rows

ソートされた行数。

Sort_scan

テーブルスキャンによるソートを行った回数。

Ssl_xxx

SSL接続に使われるステータス。

Table_locks_immediate

テーブルロックが即座に実行された回数。

Table_locks_waited

テーブルロックが即座には実行されず、ウェイトが必要だった回数。
この値が大きく、パフォーマンス上の問題が発生した場合
まずクエリを最適化しましょう。
さらに、テーブルを分割するか
レプリケーションを使用して負荷を分散するなどしましょう。

Threads_cached

スレッドキャッシュ内に存在するスレッド数。

Threads_connected

現在開かれている接続(スレッド)数。

Threads_created

接続用に生成されたスレッド数。
この値が大きい場合、thread_cache_size システム変数の値を大きくして
キャッシュサイズを増やしましょう。
Threads_created / Connections でキャッシュヒット率を計算できます。

Threads_running

現在動いているスレッド数。

Uptime

サーバ起動時からの経過秒数。