MySQL を実行している Amazon Relational Database Service (Amazon RDS) DB インスタンスのサーバーの活動状況を表示する方法を教えてください
解決方法
サーバーアクティビティを使用して、パフォーマンスの問題の原因を特定できます。InnoDB ストレージエンジンの状態を確認したり、実行中のクエリを特定したり、DB インスタンスのデッドロックを見つけたりできます。
MySQL DB インスタンスで実行中のすべてのスレッドを表示するには、MySQL PROCESS サーバー管理者権限が必要です。管理者権限がない場合、SHOW PROCESSLIST では、お客様の使用中の MySQL アカウントに関連付けられているスレッドのみが表示されます。SHOW ENGINE を使用するには、MySQL PROCESS サーバーの管理者権限も必要です。また、InnoDB ストレージエンジンの状態に関する情報を表示するには、MySQL PROCESS サーバー管理者権限が必要です。
DB インスタンスのサーバーアクティビティを表示するには、次の手順に従ってください。
1. MySQL DB インスタンスの一般ログとスロークエリログを有効にします。
2. MySQL データベースエンジンが実行されている DB インスタンスに接続します。
3. 以下のコマンドを実行してください。
SHOW FULL PROCESSLIST\G
SHOW ENGINE INNODB STATUS\G
注: 各ステートメントの最初の 100 文字を超えて表示するには、FULL キーワードを使用します。
4. 待機中のトランザクションや待機中のトランザクションをブロックしているトランザクションを確認するには:実行している Amazon RDS for MySQL のバージョンに応じて、以下のコマンドのいずれかを実行します。
バージョン 5.6 および 5.7 の場合:
SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread, r.trx_query waiting_query, b.trx_id blocking_trx_id, b.trx_mysql_thread_id blocking_thread, b.trx_query blocking_query FROM information_schema.innodb_lock_waits w INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;
バージョン 8.0 の場合
ON r.trx_id = w.requesting_engine_transaction_id;INNER JOIN information_schema.innodb_trx r
ON b.trx_id = w.blocking_engine_transaction_id
INNER JOIN information_schema.innodb_trx b
FROM performance_schema.data_lock_waits w
b.trx_query blocking_query
b.trx_mysql_thread_id blocking_thread,
b.trx_id blocking_trx_id,
r.trx_query waiting_query,
r.trx_mysql_thread_id waiting_thread,
r.trx_id waiting_trx_id,
注: これらの出力を短い間隔で継続的に収集することをおすすめします (60 秒毎など)。複数の出力を確認することで、エンジンの状態をより広く把握できます。これは、パフォーマンスに関する問題のトラブルシューティングに役立ちます。
関連情報
Amazon RDS インスタンスでのメトリクスのモニタリング