High Performance MySQL 第4版 の読書メモ
High Performance MySQLについて
High Performance MySQLは第3版まで邦訳されている実践ハイパフォーマンスMySQLの最新版となります。
第三版では800ページ超の分厚い書籍でしたが、重要な点に絞って再編が行われてMySQL 8までの内容が記載されています。
ページ数はスリムになったとはいえ、そこそこ分厚いので自分に興味のあるところを読み進めた方が楽かと思います。
第三版から削除された内容
- 陳腐化した内容
- MyISAMエンジン(InnoDBがデフォルトになったため)
- クエリキャッシュ(MySQL 8.0で削除されたため)
- MySQLの高度な機能と言われた章
- パーティションテーブル、ビュー、ストアドプロシージャ、ユーザー定義関数、全文検索など
各章のメモ
1.MySQL Architecture
基本的なアーキテクチャの話が載っている
第三版の「第一章 MySQLのアーキテクチャと歴史」に当たる
以下の説明が記載されている
- MySQLの論理アーキテクチャの説明
- 同時実行制御の説明
- トランザクション
- レプリケーション
- ストレージエンジン
この章くらいは軽く目を通して損はない。
2.Monitoring in a Reliability Engineering World
第三版から第四版が発売される間に『サイト信頼性エンジニアリング: Google による運用システムの運用方法』 (O'Reilly) と、その続編である『サイト信頼性ワークブック: SRE を実装する実践的な方法』が発売され、サイト信頼性エンジニアリング (SRE) の概念が広がった。
この章は、前述の書籍を読んでから読んだ方が望ましい。
エラーのモニタリングや問題が顕在化する前になにをモニタリングするかが記載されている。
3.Performance Schema
パフォーマンススキーマの概要、構成、使用方法を記載。
MySQL サーバー内で実行されている操作に関する低レベルのメトリクスが取得できる
4. Operating System and Hardware Optimization
OSやHDDの最適化の話
三版にも載ってそうな内容。
マネージドのクラウド環境だと読む優先度は低いと思われる
5. Optimizing Server Settings
サーバー設定の最適化の話。
三版にも載ってそうな内容
マネージドのクラウド環境だと読む優先度は低いと思われる
6. Schema Design and Management
MySQLでのスキーマの設計と管理の方法
スキーマ設計の入門でも上級の話ではない。あくまでMySQLでの設計における話。
この章の説明はすべて「MySQLでは」という但し書きがつく。
- 最適な型を選ぶ
- 多すぎる列や多すぎるJOINは避ける
- NULLは避けた方がいいが、過剰に恐れない
- スキーマ変更管理をどうするか?
- Skeema、flyway、Percona Toolkitなどのオプションがある。
- プロダクション環境でのスキーマ変更
- DDLステートメントの実行はMySQL 8.0で大幅で改善された。(大きすぎると問題はあるが)
- Pt-online-schema-changeやgh-ostなどのオンラインのDDL適用ツールがある
7. Indexing for High Performance
高パフォーマンスのためのインデックスの作成方法と保守方法
この章ではInnoDBの使用を想定としている
- B-Treeの解説
- B-Treeの仕組み
- B-Treeインデックスで効くクエリ
- 高パフォーマンスのインデックス戦略
- 最初の数文字へのインデックス付け
- 複数列にそれぞれインデックスをつけるより、関連するカラムを持つ1つのインデックスの方がいい
- インデックスの列の順番を考える
- InnoDBの場合、主キーは主キーのデータ順に挿入した方が望ましい
- カバーインデックス...クエリが参照する列をすべて含むインデックス
- 冗長なインデックスや使わないインデックスの削除を検討する
- 意識しないで作成してしまう場合がある
- 更新時にオーバーヘッドが増えるだけでなく、有用なインデックス情報がメモリから追い出される
8. Query Performance Optimization
クエリのパフォーマスの最適化に関わる内容が記載されています。
クエリのパフォーマンスを考える場合、「6.Schema Design and Management」、「7.Indexing for High Performance」、「8.Query Performance Optimization」を繰り返し読む必要がある。
- 必要のないデータを要求してないか?
- 必要以上の行をフェッチする
- 結合時に全ての列を取得する
- 同じデータを何度も取得する
- MySQL は大量のデータを調べすぎていませんか?
- 調査される行と返された行の割合
- 例えば
LIMIT row_count OFFSET offset
を使うと返される行は小さいが、調査される行は大きい場合がある
- 例えば
- 調査される行とアクセスタイプ
- 調査される行と返された行の割合
- クエリ実行の基本的流れの説明
- 特定クエリの最適化
- COUNT
- EXPLAINで推定行数が取得できる
- JOIN
- ON,USINGにはインデックスを使う
- LIMITとOFFSETの最適化
- OFFSETが非常に大きい場合、コストが高い
など
- OFFSETが非常に大きい場合、コストが高い
- COUNT
9. Replication
以下のような内容が記載されています。
- レプリケーションの概要
- 内部の仕組み
- 管理・メンテナンス
- 問題と解決策
10. Backup and Recovery
- なぜバックアップが必要か
- 災害復旧
- データを意図的に削除してそれを取り戻したい人々
- 監査(過去の時点でどうだったのか?)
- テスト
- 回復要件の定義
- RPO (Recovery Point Objective: リカバリーポイント目標)
- どのくらいデータが失われること許容できますか?
- RTO (Recovery Time Objective: リカバリータイム目標)
- どのくらい迅速に復旧する必要がありますか?
- RPO (Recovery Point Objective: リカバリーポイント目標)
- バックアップの種類
- 論理バックアップ
- RAWバックアップ
- バックアップツール
- MySQL Enterprise Backup
- Percona XtraBackup
- mysqldump
- Mydumper
11. Scaling MySQL
- キャパシティとスケーラビリティとパフォーマンス
- 道路の例:
- パフォーマンスとは車の速さのこと
- キャパシティとは車線の数と最大安全速度を掛けたものです
- スケーラビリティとは、交通量を低下させることなく、より多くの車とより多くの車線を追加できる度合い。
- システムは高性能でなくても拡張可能である
- キャパシティを増やすことができなくなった場合、スケーラブルではなくなる
- 道路の例:
- スケーリングの方法
- 読み取り:インデックスの追加、クエリの最適化、キャッシュ、リードレプリカ
- 書き込み:キューイング、シャーディングによる書き込みのスケール
12. MySQL in the Cloud
クラウドサービスでMySQLを動かす場合の説明が記載されている。
おそらく各クラウドサービスのマニュアルを読んだ方が良さそう。
13. Compliance with MySQL
機密管理、災害復旧計画などのコンプライアンスに関わるMySQLの機能の話
- コンプライアンス管理のための構築
- 機密管理
- ロールとデータの分離
- 変更の追跡
- バックアップと復元の手順
まとめ
どのような立場であれ、MySQLのアーキテクチャの概要をつかむため、「1.MySQL Architecture」だけは目を通しておいた方がいいです。
DB操作を行うアプリケーションの開発者の場合、次の章を目を通す必要があります。
- 6.Schema Design and Management
- 7.Indexing for High Performance
- 8.Query Performance Optimization
本番環境の運用に対して責任がある場合は、必要に応じて以下に目を通す必要があると思います。
- 2.Monitoring in a Reliability Engineering World
- 3.Performance Schema
- 9.Replication
- 10.Backup and Recovery
- 11.Scaling MySQL
- 13.Compliance with MySQL
Discussion