web-dev-qa-db-ja.com

MySQL / Amazon RDSでロックタイムアウトをデバッグするにはどうすればよいですか?

アマゾンウェブサービスでホストされているウェブアプリがあります。私たちのデータベースは、5.1.57を実行するマルチaz RDS MySQLサーバーであり、3〜4台のアプリサーバーがデータベースと通信します。

今日、「ロック待機タイムアウトを超えました。トランザクションを再起動してみてください」という行に沿って多くのエラーが発生し始めました。POSTリクエストのほぼ1%がこれを確認しています。

サイトで実行されているコードに変更はありません。スキーマの変更はありません。トラフィックはそれほど急増していません。私は実行中のプロセスを見てきましたが、制御不能なものはありません。

RDSインスタンスを小さいものから大きいものにスケーリングしてみましたが、効果はありませんでした。

2日前、Amazonでいくつかの停止が発生しました。それからの回復の一環として、RDSサーバーとアプリサーバーは異なるアベイラビリティーゾーンに配置されましたが、すべて同じリージョン内にありました。しかし、昨日はすべてが順調だったので、それが関係しているとは確信していません。

ロックタイムアウトはさまざまなタイプのリクエストで発生し、さまざまなInnoDBテーブルで発生します。

問題が発生し始めたときに、開いている接続の数が急増していることに気付きましたが、それらは症状であり、原因ではない可能性があります。

これをデバッグするための次のステップは何ですか?

Connection graph

4
Marc Hughes

おそらく起こったことは、RDSインスタンスをサポートする1​​つ以上のEBSボリュームでIOの損失でした。EBSの再ミラーリングによるIOの削減量は、かなりのものです。データベースへの影響において重要です。

プレミアムサポートの料金を支払う場合、そのチームはそのような詳細を調べるか、AWSフォーラムで質問することができます。 RDSエンジニアは、根本的なEBSの問題または原因を確認できる可能性があります。

3
Nathan V