InnoDB
モニターは、InnoDB
の内部状態に関する情報を提供します。この情報は性能調整を行う場合に役立ちます。各モニターを有効にするには特殊な名前のテーブルを作成します。すると、InnoDB
が定期的にモニター出力を書き込むようになります。また、InnoDB
標準モニターは、SHOW
ENGINE INNODB STATUS
SQL
ステートメント経由でオンデマンドで使用できます。
InnoDB
モニターには次のように、いくつかの種類があります。
InnoDB
標準モニターは次の型の情報を表示します。
各アクティブトランザクションによって保持されるテーブルとレコードロック
トランザクションのロック取得待ち
スレッドのセマフォー待ち
保留中のファイル I/O リクエスト
バッファープール統計
ほとんどのシステム上で
InnoDB
のメインスレッドのパージおよび挿入バッファーマージ活動
InnoDB
ロックモードの説明に関しては、項9.8.1. 「InnoDB
ロックモード」
を参照してください。
InnoDB
標準モニターを有効にして出力が定期的に生成されるようにするには、innodb_monitor
という名前のテーブルを作成します。モニター出力をオンデマンドで取得するには、SHOW
ENGINE INNODB STATUS
SQL
ステートメントを使って出力をクライアントプログラムに取り込みます。もし
mysql
インタラクティブクライアントを利用しているなら、通常のセミコロンステートメントターミネータを
\G
で置き換えれば、出力がより読みやすくなります。
mysql> SHOW ENGINE INNODB STATUS\G
InnoDB
ロックモニターは標準モニターに似ていますが、広範なロック情報も提供します。このモニターを有効にして出力が定期的に生成されるようにするには、innodb_lock_monitor
という名前のテーブルを作成します。
InnoDB
テーブル領域モニターは、共有テーブル領域に含まれるファイルセグメントの一覧を出力し、テーブル領域の割り当てデータ構造を検査します。このモニターを有効にして出力が定期的に生成されるようにするには、innodb_tablespace_monitor
という名前のテーブルを作成します。
InnoDB
表モニターは、InnoDB
内部データ辞書の内容を出力します。このモニターを有効にして出力が定期的に生成されるようにするには、innodb_table_monitor
という名前のテーブルを作成します。
InnoDB
モニターを有効にして出力が定期的に生成されるようにするには、CREATE
TABLE
ステートメントを使ってそのモニターに関連付けられたテーブルを作成します。たとえば、InnoDB
標準モニターを有効にするには、次のように
innodb_monitor
テーブルを作成します。
CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;
モニターを停止するには、次のようにテーブルを削除します。
DROP TABLE innodb_monitor;
CREATE TABLE
構文は、MySQL の SQL
パーサーを通してコマンドを
InnoDB
エンジンに渡す手段に過ぎません:唯一問題となるのは、テーブル名
innodb_monitor
と、InnoDB
テーブルです。テーブルの構造は
InnoDB
モニターとまったく無関係です。サーバーを一度シャットダウンして、再度サーバーを起動しても、モニターは自動的に起動しません。再びモニターを起動するには、まずモニタテーブルを削除し、そして新しい
CREATE TABLE
ステートメントを発行しなければいけません。(この構文は今後のリリース版で変更される可能性があります)。
MySQL 5.1.24
以降では、InnoDB
モニターテーブルの起動や停止を行うには
PROCESS
権限が必要になります。
InnoDB
モニターを有効にして出力が定期的に生成されるようにすると、InnoDB
はその出力を mysqld
サーバーの標準エラー出力
(stderr
)
に書き込みます。この場合、出力がクライアントに送られることはありません。スイッチが入ると、InnoDB
モニターは大体 15
秒毎にデータをプリントします。サーバーの出力は通常エラーログに書き込まれます
(The Error Logを参照)。このデータは性能調整をするうえで役立ちます。Windows
上では、もし出力をエラーログではなくウィンドウに導きたければ、--console
オプションを利用して、コンソールウィンドウ内のコマンドプロンプトからサーバーを起動しなければいけません。
InnoDB
は、バッファーオーバフローの可能性を避けるために、stdout
や固定サイズメモリーバッファーではなく、stderr
やファイルに診断出力を送ります。副作用として、15
秒ごとに MySQL
データディレクトリ内のステータスファイルに
SHOW
ENGINE INNODB STATUS
の出力が書き込まれます。ファイルの名前は
innodb_status.
で、pid
pid
はサーバープロセス ID
です。InnoDB
は通常のシャットダウンのためにファイルを削除します。もし異常なシャットダウンが起きたら、これらのステータスファイルが存在する可能性があり、それはマニュアルで削除する必要があります。それらを削除する前に、異常シャットダウンの原因に関する有益な情報を含んでいるかどうかを確認した方が良いでしょう。innodb_status.
ファイルは設定オプション
pid
innodb_status_file=1
が設定された場合のみ作成されます。
InnoDB
モニターを有効にするのは、実際にモニター情報を確認する必要がある場合だけにすべきです。というのも、出力生成を行うとパフォーマンスが若干低下するからです。また、関連テーブルを作成することでモニター出力を有効にした場合、そのテーブルをあとで削除するのを忘れてしまうと、エラーログのサイズが非常に大きくなる可能性があります。
InnoDB
モニターの追加情報については、次のリソースを参照してください。
Mark Leith: InnoDB Table and Tablespace Monitors
MySQL Performance Blog: SHOW INNODB STATUS walk through
各モニターは、タイムスタンプとモニター名を含むヘッダーで始まります。例 :
================================================ 090407 12:06:19 INNODB TABLESPACE MONITOR OUTPUT ================================================
標準モニターのヘッダー
(INNODB MONITOR OUTPUT
)
がロックモニターでも使用されますが、それは、後者によって生成されるのは同じ出力にロック情報が追加されたものだからです。
次の各節では、各モニターの出力について説明します。