Amazon RDS for MySQL DB インスタンスが「再起動」のまま停止してしまう理由を教えて下さい。

最終更新日: 2021年10月28日

MySQL DB インスタンスの Amazon Relational Database Service (Amazon RDS) を再始動しようとしています。ただし、DB インスタンスが「再起動」状態のまま停止しているか、再起動に予想よりも時間がかかっています。このような問題が発生しているのはなぜですか? これを解決するにはどうすればよいですか?

簡単な説明

再起動を実行する前に、DB インスタンスで受信または進行中のトランザクションをすべて停止してください。進行中のトランザクションは停止され、未確約のトランザクションはロールバックされます。

注:未確約のトランザクションのロールバックは、コストの大きい操作になる可能性があります。未確約のトランザクションは、完了して、Amazon RDS for MySQL インスタンスが再び利用可能になるまでに長時間かかることもあります。

再起動が開始された後は、プロセスをキャンセルすることはできず、再起動は完了するまで続行されます。再起動に予想よりも時間がかかっている場合は、根本原因を調査し、次のトラブルシューティングを行うことをご検討ください。

  • 進行中のクエリをチェックします。
  • 未消去のトランザクションがあるかどうかをチェックします。
  • MySQL エラーログファイルを確認します。

解決方法

進行中のクエリをチェックする

[SHOW FULL PROCESSLIST] コマンドを使用して、Amazon RDS for MySQL インスタンスにアクティブなクエリがあるかどうかをチェックします。

mysql> SHOW FULL PROCESSLIST;

次に、UPDATE クエリがまだ進行中であることを示す出力例を示します。

+-----+---------------+---------------------+------+---------+------+----------+-----------------------+
| Id  | User          | Host                | db   | Command | Time | State    | Info                  |
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+
|   2 | rdsadmin      | localhost:30662     | NULL | Sleep   |    4 |          | NULL                  |
| 101 | admin         | 172.31.28.252:58288 | NULL | Query   |  111 | updating |UPDATE tutorials SET tu|
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+

出力には、データベースで実行されている MySQL スレッドに関する情報が表示されます。まだ実行中のクエリがある場合は、再起動を実行する前にクエリを完了させます。

注: SHOW FULL PROCESSLIST クエリをマスターユーザーとして実行します。マスターユーザーでない場合、ユーザーは、MySQL インスタンスのすべてのアクティブなスレッドを表示するには、MySQL サーバー管理権限を持っている必要があります。それ以外の場合、出力にはユーザーの MySQL アカウント内のアクティブなスレッド ID のみが表示されます。詳細については、MySQL ウェブサイトの「SHOW PROCESSLIST ステートメント」および「MySQL サーバー管理」を参照してください。

未消去のトランザクションがあるかどうかをチェックする

MySQL InnoDB エンジンは、トランザクション中に変更された行の古いバージョンのリストを保持するマルチバージョン同時実行制御 (MVCC) を使用します。トランザクションをロールバックする必要がある場合、InnoDB はこのプロセス中に任意の取り消し操作を実行できます。古いバージョンの行は、取り消す領域内にキャプチャされます。これらの古いバージョンは、トランザクション中に呼び出されなくなると消去されます。トランザクションがまだ参照しているためにキャプチャされた変更が取り消されない場合、履歴リストの長さが長くなる可能性があります。詳細については、MySQL ウェブサイトの「InnoDB マルチバージョニング」を参照してください。

未消去のトランザクションは、履歴リストの長さの値を表します。この値は、[SHOW ENGINE INNODB STATUS] コマンド出力の [TRANSACTIONS] の下にあります。通常、履歴リストの長さは小さい値ですが、書き込みの多いワークロードや長時間実行されるトランザクションによって値が増加する可能性があります。履歴リストの長さの値の詳細については、MySQL ウェブサイトの「設定の消去」を参照してください。

履歴リストの長さ内に未消去のトランザクションがあるかどうかをチェックするには、[SHOW ENGINE INNODB STATUS] コマンドを使用します。このコマンドの出力では、履歴リストの長さと、[TRANCTISTS] セクションにリストされている進行中のトランザクションの大きさも表示できます。リストされたトランザクションの確認の詳細については、MySQL ウェブサイトの「InnoDB 標準モニターおよびロックモニター出力」を参照してください。

例:

------------
TRANSACTIONS
------------
Trx id counter 105746959
Purge done for trx's n:o < 105746958 undo n:o < 0 state: running but idle
History list length 32
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 328605240396520, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 328605240395600, not started
0 lock struct(s), heap size 1136, 0 row lock(s)

注: 履歴リストの長さが高い値で、アクティブなトランザクションがある場合は、再起動はベストプラクティスではありません。

詳細については、MySQL ウェブサイトの「SHOW ENGINE STATUS」を参照してください。

MySQL エラーログファイルを確認する

Amazon RDS では、MySQL エラーログファイルはデフォルトで有効になっています。RDS インスタンスが再び利用可能になるのに時間がかかりすぎると思われる場合は、MySQL エラーログファイルの内容を確認します。MySQL は、起動、シャットダウン、またはエラーが発生したときに、エラーログファイルに書き込みます。

例えば、InnoDB は、InnoDB クラッシュリカバリプロセスの一環として、未確約のトランザクションをロールバックする必要がある場合があります。未確約のトランザクションがロールバックされると、MySQL エラーログにこのイベントが記録されます。詳細については、MySQL ウェブサイトの「InnoDB クラッシュリカバリ」を参照してください。

追加のトラブルシューティング

: ポイントインタイムリカバリ (PITR) を実行するか、スナップショットから復元することを選択した場合、新しい Amazon RDS インスタンスはすぐには使用できない場合があります。詳細については、以下の記事を参照してください。

Amazon RDS for MySQL DB インスタンスの再起動に時間がかかる場合は、次のトラブルシューティングのヒントをお試しください。

  • DB インスタンスで自動バックアップが有効になっている場合は、PITR を実行して、指定した時刻から新しい Amazon RDS インスタンスに復元します。バックアップ保持期間内の任意の時点に復元できます。
    注: デフォルトでは、復元された DB インスタンスは、デフォルトの DB パラメータおよびオプショングループに関連付けられます。ただし、復元時にカスタムパラメータグループとオプショングループを指定することで、カスタムパラメータグループとオプショングループを使用できます。
  • 新しい DB インスタンスを作成して、最新の DB スナップショットから DB インスタンスを復元します。復元された DB インスタンスは、ステータスが利用可能になり次第、すぐに使用できます。
  • DB インスタンスにリードレプリカがある場合は、スタンドアロン DB インスタンスにリードレプリカを昇格させます。リードレプリカを昇格させると、DB インスタンスは使用可能になる前に自動的に再起動されます。

また、データベースのアクティビティを定期的にモニタリングすることもベストプラクティスです。次のツールを使用して、Amazon RDS for MySQL DB インスタンスをモニタリングできます。

  • Amazon CloudWatch: Amazon CloudWatch を使用すると、進行中のデータベースワークロードをモニタリングできます。DB 接続、CPU 使用率、または書き込み/読み取り IOPS の値が高い場合は、DB インスタンスで進行中のアクティビティがある可能性があります。
  • 拡張モニタリング: 拡張モニタリングには、OS メトリクス情報を CloudWatch Logs に送信する許可が必要です。AWS Identity and Access Management (IAM) ロールを使用して、拡張モニタリングのアクセス許可を付与できます。拡張モニタリングを有効にする前に、まず IAM ロールを作成する必要があります。
  • Performance Insights: Performance Schema は、Amazon RDS for MySQL (または MariaDB) で使用されるオプションのパフォーマンスツールです。Performance Insights を有効または無効にした場合、DB インスタンスを再起動する必要はありません。また、ダウンタイムやフェイルオーバーも発生しません。

この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?