普段はO/RマッパーやSQLクライアント越しにしかMySQLを触っていないのに、ある日突然レプリケーションが止まったりロック待ちでクエリが詰まったりすると、途端に何から手をつけていいか分からなくなる。表面的な使い方だけを知っていても、内部構造まで理解していないと、障害の原因を切り分けることすらできない。『MySQL運用・管理[実践]入門 〜安全かつ高速にデータを扱う内部構造・動作原理を学ぶ』は、その内部構造を運用の現場で必要な範囲に絞って教えてくれる本だった。
ロックとクエリ実行計画の章で「詰まる理由」が分かる
本書はユーザー管理からMySQLのデータ構造の解説を経て、ロックとクエリ実行計画の章に入る。正規化やCRUDの仕組み、ロックの種類、オプティマイザがどう実行計画を組み立てるかが解説されていて、クエリが遅くなったりロック待ちが発生したりする理由を、表面的な対処ではなく仕組みから理解できるようになった。
レプリケーションとバックアップの章が障害対応の土台になる
続くレプリケーションとバックアップ・リストアの章は、日常的な運用の中でも特に事故につながりやすい領域を扱っている。監視の章まで含めて読むことで、障害を未然に防ぐ設計と、実際に起きたときの復旧手順の両方を一つの流れとして押さえられる構成になっていた。
読んでよかったポイント
- ロックの章を読んでから、クエリが詰まったときにまずどのロックが原因かを切り分けられるようになった
- レプリケーションの章のおかげで、レプリケーション遅延が発生したときの原因調査の手順が明確になった
- バックアップとリストアの章を読んでから、定期バックアップだけでなく復旧テストまで運用に組み込む重要性を実感した
- クエリ実行計画の章で、EXPLAINの結果をなんとなく眺めるだけだった状態から、インデックスの効き方まで読み解けるようになった
- 監視の章が、日々の異常検知と障害対応をどうつなげるかの実践的なヒントになった
まとめ
MySQLを「動いているから触らない」ままにしておくと、いざという時に対応できなくなる。まずは自分が運用しているデータベースについて、本書のロックの章を参考に今動いているクエリがどんなロックを取っているか確認してみてほしい。