InnoDB
モニターでの定期的な出力を有効にすると、InnoDB
は、その出力をmysqldサーバーの標準エラー出力 (stderr
) に書き込みます。この場合、クライアントには出力が送信されません。オンに切り替えられると、InnoDB
モニターは約 15 秒に 1 回データを出力します。サーバーの出力は通常、エラーログに送信されます (セクション5.2.2「エラーログ」を参照してください)。このデータは、パフォーマンスチューニングに役立ちます。Windows では、出力をエラーログにではなくウィンドウに送信したい場合は、コンソールウィンドウのコマンドプロンプトから--console
オプションを使用してサーバーを起動します。
InnoDB
は、バッファーオーバーフローの可能性を回避するために、診断の出力をstdout
または固定サイズのメモリーバッファーにではなく、stderr
またはファイルに送信します。副作用として、SHOW ENGINE INNODB STATUS
の出力が MySQL データディレクトリ内のステータスファイルに 15 秒に 1 回書き込まれます。このファイルの名前はinnodb_status.
です。ここで、pid
pid
はサーバープロセス ID です。InnoDB
は、正常なシャットダウンのときにこのファイルを削除します。異常なシャットダウンが発生した場合は、これらのステータスファイルのインスタンスが存在する可能性があるため、手動で削除する必要があります。削除する前に、これらのファイルを検査して、異常なシャットダウンの原因に関する有効な情報が含まれているかどうかを確認することをお勧めします。innodb_status.
ファイルは、構成オプションpid
innodb-status-file=1
が設定されている場合にのみ作成されます。
出力の生成によってパフォーマンスはある程度低下するため、InnoDB
モニターは、実際にモニター情報の確認が必要な場合にのみ有効にするようにしてください。また、関連付けられたテーブルを作成することによってモニターの出力を有効にした場合は、あとでテーブルを削除することを忘れると、エラーログがきわめて大きくなることがあります。
トラブルシューティングを支援するために、InnoDB
は、特定の状況でInnoDB
標準モニターの出力を一時的に有効にします。詳細は、セクション14.19「InnoDB のトラブルシューティング」を参照してください。
各モニターは、タイムスタンプとモニター名が含まれたヘッダーで始まります。例:
===================================== 2014-10-16 16:28:15 7feee43c5700 INNODB MONITOR OUTPUT =====================================
ロックモニターでは、追加のロック情報が付加された同じ出力が生成されるため、InnoDB
標準モニターのヘッダー (INNODB MONITOR OUTPUT
) はロックモニターにも使用されます。
InnoDB
モニターでの定期的な出力を有効にするには、CREATE TABLE
ステートメントを使用して、そのモニターに関連付けられた特別な名前の付いたInnoDB
テーブルを作成します。たとえば、InnoDB
標準モニターを有効にするには、innodb_monitor
という名前のInnoDB
テーブルを作成します。
CREATE TABLE
構文の使用は、MySQL の SQL パーサーを経由してInnoDB
エンジンにコマンドを渡すための方法にすぎません。重要なのは、テーブル名と、それがInnoDB
テーブルであるということだけです。テーブルの構造は関係ありません。サーバーをシャットダウンした場合は、サーバーを再起動しても、モニターは自動的に再開されません。モニターテーブルを削除し、新しいCREATE TABLE
ステートメントを発行してモニターを開始します。
InnoDB
モニターを有効にするためのCREATE TABLE
の方法は非推奨であり、将来のリリースで削除される可能性があります。MySQL 5.6.16 の時点では、innodb_status_output
およびinnodb_status_output_locks
システム変数を使用してInnoDB
標準モニターおよびInnoDB
ロックモニターを有効にすることができます。
InnoDB
モニターを無効および有効にするには、PROCESS
権限が必要です。
InnoDB 標準モニターの有効化
InnoDB 標準モニターでの定期的な出力を有効にするには、innodb_monitor
テーブルを作成します。
CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;
InnoDB
標準モニターを無効にするには、そのテーブルを削除します。
DROP TABLE innodb_monitor;
MySQL 5.6.16 の時点では、innodb_status_output
システム変数をON
に設定することによってInnoDB
標準モニターを有効にすることもできます。
set GLOBAL innodb_status_output=ON;
InnoDB
標準モニターを無効にするには、innodb_status_output
をOFF
に設定します。
サーバーをシャットダウンすると、innodb_status_output
変数がデフォルトのOFF
値に設定されます。
オンデマンドでの InnoDB 標準モニターの出力の取得
InnoDB
標準モニターでの定期的な出力を有効にする代わりに、出力をクライアントプログラムにフェッチするSHOW ENGINE INNODB STATUS
SQL ステートメントを使用して、オンデマンドでInnoDB
標準モニターの出力を取得できます。mysql対話型クライアントを使用している場合は,通常のセミコロンのステートメントターミネータを\G
に置き換えると、出力が読み取りやすくなります。
mysql> SHOW ENGINE INNODB STATUS\G
InnoDB ロックモニターの有効化
InnoDB
ロックモニターでの定期的な出力を有効にするには、innodb_lock_monitor
テーブルを作成します。
CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB;
InnoDB
ロックモニターを無効にするには、そのテーブルを削除します。
DROP TABLE innodb_lock_monitor;
MySQL 5.6.16 の時点では、innodb_status_output
およびinnodb_status_output_locks
システム変数の両方をON
に設定することによってInnoDB
ロックモニターを有効にすることもできます。ロックモニターの出力はInnoDB
標準モニターの出力とともに出力されるため、ロックモニターの出力を有効にするには、両方のモニターを有効にする必要があります。
set GLOBAL innodb_status_output=ON; set GLOBAL innodb_status_output_locks=ON;
サーバーをシャットダウンすると、innodb_status_output
およびinnodb_status_output_locks
変数がデフォルトのOFF
値に設定されます。
InnoDB
ロックモニターを無効にするには、innodb_status_output_locks
をOFF
に設定します。InnoDB
標準モニターも無効にするには、innodb_status_output
を OFF に設定します。
InnoDB テーブルスペースモニターの有効化
InnoDB
テーブルスペースモニターでの定期的な出力を有効にするには、innodb_tablespace_monitor
テーブルを作成します。
CREATE TABLE innodb_tablespace_monitor (a INT) ENGINE=INNODB;
標準のInnoDB
テーブルスペースモニターを無効にするには、そのテーブルを削除します。
DROP TABLE innodb_tablespace_monitor;
テーブルスペースモニターは非推奨であり、将来の MySQL リリースで削除される予定です。
InnoDB テーブルモニターの有効化
InnoDB
テーブルモニターでの定期的な出力を有効にするには、innodb_table_monitor
テーブルを作成します。
CREATE TABLE innodb_table_monitor (a INT) ENGINE=INNODB;
InnoDB
テーブルモニターを無効にするには、そのテーブルを削除します。
DROP TABLE innodb_table_monitor;
テーブルスペースモニターは非推奨であり、将来の MySQL リリースで削除される予定です。