RDSのMySQL5.6でデットロックが発生し、対処に時間がかかったので、対応メモ。
AWSでWordPress環境を構築して、DBはRDSにMySQL5.7で運用中。 突然500エラーが頻発している通知を受け取ったので確認。
よくわからないが、サーバが500エラー返すようになった。サーバの負荷が高いわけでもないし、キャッシュがおかしくなったわけでもない。 いつもならこのどちらかが原因(botの大量アクセスがくるとLAが上がって一時的に500を返すことが多い。原因は画像数やCSS、JSの読み込みが多いからなのだが、コンテンツは別のとこが受けているので、手出ししにくい)だが、いつもと様子が違う。
エラーログを見てみると、デットロックと思いッきり出ていた。 MySQLでデットロックが起きた時の対処方法わからなかったので、今回参考までに。
# DBと接続しているトランザクションの情報の詳細を表示 mysql> show engine innodb status; # プロセスが使用している対象のテーブルの状況確認 mysql> show open tables where In_use > 0; ## ↑ここまでが現状把握 # 実行中のプロセスの一覧を取得(IDがprocess id) mysql> show processlist; # ↑のコマンドで、「Lock xxx」となっているプロセスを停止する mysql> kill <process id>;
今回は、バッチ処理に問題があり、デットロックしているプロセスを停止しても延々とデットロックのプロセスができあがるので、 デットロックプロセスが実行しているSQLをkill直後に実行(DELETE 文)して、データの不整合を解決。 詰まっていたところが流れ、表示も通常運転に戻りました。
月曜日に確かにバッチ修正してリリースしてたのすっかり忘れてた。。。
- 作者: 梶山隆輔,山?由章
- 出版社/メーカー: インプレス
- 発売日: 2016/12/15
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: Sasha Pachev,吉川英興,田中慎司,伊藤直也,菅野良二
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/11/20
- メディア: 大型本
- 購入: 4人 クリック: 86回
- この商品を含むブログ (24件) を見る