10 Oct 2022

最近読んだもの 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 章ではシャーディングが扱われている
      • その後はメトリクス、レプリケーションラグ、トランザクションといったトピックが並んでおり楽しみ
実践ハイパフォーマンスMySQL 第3版
Baron Schwartz (著), Peter Zaitsev (著), Vadim Tkachenko (著), 菊池 研自 (監修), 株式会社クイープ (翻訳)