本文へスキップ
hdknr blog
戻る

急成長でぶつかったMySQLの罠とその向き合い方 - 7つの実践的な教訓

Timee のプラットフォームエンジニアリングチームの徳富博氏による発表「急成長でぶつかったMySQLの罠とその向き合い方」から、Aurora MySQL 運用で遭遇した 7 つの重要な課題とその対策をまとめます。

サービスの急成長に伴い、小規模では問題にならなかった MySQL の挙動が本番環境で深刻な障害を引き起こすことがあります。この発表では、実際の運用経験に基づいた具体的な対策が共有されています。

1. DDL 実行の落とし穴

DDL(Data Definition Language: テーブル定義の変更操作)には「Online DDL」という仕組みがありますが、DDL 実行中もテーブルへのアクセスがブロックされないわけではありません。実際にはメタデータロック(MDL)が必ず発生します。

2. MDL ベースのデッドロック

MDL デッドロックは SHOW ENGINE INNODB STATUS に表示されないため、標準的な監視では検知できません。

3. レプリカがライターに影響を与える問題

Aurora ではレプリカとライターがストレージボリュームを共有しています。レプリカ上の長時間クエリが undo ログのクリーンアップを妨げ、ライターのパフォーマンスに影響します。

4. 同時リクエストによるデッドロック

高トラフィック環境では、確率的に発生する競合が確実に障害を引き起こすようになります。

ギャップロックパターン

ギャップロック(インデックスレコード間の隙間に対するロック)同士は競合しませんが、複数のトランザクションが同時に INSERT を実行すると循環待ちが発生します。

S→X ロックエスカレーション

外部キーによる暗黙の S ロックが、同一トランザクション内での X ロック取得をブロックします。

対策:

5. 意図しないロック範囲の拡大

インデックスのない UPDATE 文はテーブル全体をロックします。また、外部キーにより親テーブルへ S ロックが伝播します。

6. 段階的なスロークエリの悪化

ローンチ時は問題なかったクエリが、データ量 × トラフィック量の増加で徐々にボトルネックになります。

7. バッファプールの枯渇

ワーキングセットが innodb_buffer_pool_size を超えると、ストレージからの繰り返し読み取りが発生し、パフォーマンスが急激に低下します。

まとめ

MySQL の問題に向き合う上で重要なポイント:

参考



前の記事
OpenClaw狂想曲:中国で巻き起こるAIエージェント・ゴールドラッシュと「ツルハシ売り」たち
次の記事
OpenClawで月売上1,200万円・従業員ゼロの会社を実現したAIエージェント「Felix」