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.で、pidpid
        はサーバープロセス ID
        です。InnoDB
        は通常のシャットダウンのためにファイルを削除します。もし異常なシャットダウンが起きたら、これらのステータスファイルが存在する可能性があり、それはマニュアルで削除する必要があります。それらを削除する前に、異常シャットダウンの原因に関する有益な情報を含んでいるかどうかを確認した方が良いでしょう。innodb_status.
        ファイルは設定オプション
        pidinnodb_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)
        がロックモニターでも使用されますが、それは、後者によって生成されるのは同じ出力にロック情報が追加されたものだからです。
      
次の各節では、各モニターの出力について説明します。

