最近読んだもの 53 - Efficient MySQL Performance 4 章まで
- Efficient MySQL Performance の 4 章まで
- まだ半分くらいだがいい本
- MySQL の初級・上級の本は既刊であるが、その間を埋めるものがないので書かれたというもので、難易度を 1 ~ 5 で表すと 4 くらい、難易度 5 は 実践ハイパフォーマンスMySQL とのことだった
- あくまで Deep dive したいアプリケーションエンジニア向けの本で、DBA 向けではないと明記されていた
- まず最初の章で North Star Metrics としてクエリのレスポンスタイムを定義し、その改善にひつような項目を体系立てて説明している。この構成がかなり良い
- レスポンスタイム以外の指標は measurable でなかったり actionable でなかったりなどするので、ここに絞っている
- こうした明確な指標があることで対応がぶれないし、この本の内容も簡潔かつ実践的になっている
- またチューニングも以降の章で紹介する順序で行うことを推奨している
- 例えばいきなりハードウェアのスケールアップをするのは良くないなど
- 2 章ではまずクエリのチューニングということで、クエリとインデックスについて扱う
- 純粋なクエリとインデックスのチューニングがこの章のテーマ
- Innodb のクラスタードインデックスとセカンダリインデックスの構造が説明される
- そこからインデックスの leftmost prefix ルール、EXPLAIN の見方と順序立てて解説され、とても読みやすい
- 3 章ではデータのチューニングを扱う
- まず大きなデータセットではいくらインデックスを使っても限界があり、最小限のデータサイズや QPS を達成することが大切という原則が確認される
- クエリが不要なデータをフェッチすること防ぐこと、必要最低限のデータだけを保持すること、それぞれチェックリストが提示される
- データ削除の際の注意点 (バッチサイズなど) も紹介がある
- 4 章ではアクセスパターンの改善を扱う
- 言い換えるとアプリケーションの変更を伴う変更
- リードのオフロード (キャッシュまたはリードレプリカの利用)、ライトのキューイング (非同期 API やイベントストリームベースの設計など)、データのパーティション (主にホットとコールドデータで分けること、シャーディングは次章で扱う)
- 最後にここまで検討して改善が難しければハードウェアのスケールアップも検討の余地があるなど
- それ以降はまだ呼んでいるところだが、まず 5 章ではシャーディングが扱われている
- その後はメトリクス、レプリケーションラグ、トランザクションといったトピックが並んでおり楽しみ
Baron Schwartz (著), Peter Zaitsev (著), Vadim Tkachenko (著), 菊池 研自 (監修), 株式会社クイープ (翻訳)