「MySQLソースは公に利用できるという意味ではオープンなものだが、そのソースを理解できなければ本質的にはそれはクローズなものになる。」(本書「はじめに」より)
しかし、優秀なプログラマたちのアイデアと努力の結晶であるソースコードを読み解くには、彼らのインスピレーションと努力の痕跡を知る必要がある。本書は、コードに秘められたプログラマたちのアイデアに触れながら、MySQLのソースコードを読み解くための指針を提供する。MySQL内部の詳細に踏み込むための手引書である。
詳解 MySQL
Sasha Pachev 著、伊藤 直也、田中 慎司、吉川 英興 監訳、菅野 良二 訳
- TOPICS
- Programming , Database , Linux
- 発行年月日
- 2007年11月
- PRINT LENGTH
- 264
- ISBN
- 978-4-87311-343-2
- 原書
- Understanding MySQL Internals
- FORMAT
目次
はじめに 1章 MySQLの歴史とアーキテクチャ 1.1 MySQLの歴史 1.2 MySQLアーキテクチャ 1.2.1 コアモジュール 1.2.2 各コアモジュールの連携 1.2.3 各コアモジュールの詳細 2章 MySQLソースコード利用の基本 2.1 Unixシェル 2.2 BitKeeper 2.3 BitKeeperツリーからMySQLをビルドするためのシステムの準備 2.4 BitKeeperツリーからMySQLをビルドする 2.5 ソース配布からのビルド 2.6 システムディレクトリにMySQLをインストールする 2.7 ソースコードのディレクトリレイアウト 2.8 MySQLをデバッガで実行するためのシステムの準備 2.9 デバッガによるソースガイドツアー 2.10 gdb利用の基本 2.11 ソースから探し物を見つける 2.12 興味深いブレークポイントと変数 2.13 ソースに変更を加える 2.14 コーディングガイドライン 2.14.1 スタビリティ(安定性) 2.14.2 ポータビリティ(移植性) 2.14.3 パフォーマンス(性能) 2.14.4 統合のスタイルと簡便さ 2.15 BitKeeperリポジトリを最新の状態に保つ 2.16 パッチを提出する 3章 コアクラス、構造体、変数、そしてAPI 3.1 THD 3.2 NET 3.3 TABLE 3.4 Field 3.5 ユーティリティAPI呼び出し 3.6 プリプロセッサマクロ 3.7 グローバル変数 4章 クライアント/サーバ通信 4.1 プロトコル概要 4.2 パケットフォーマット 4.3 MySQLプロトコルとOS層の間の関係 4.4 ハンドシェイク認証 4.4.1 認証プロトコルのセキュリティ 4.4.2 プロトコル機能ビットマスク 4.5 コマンドパケット 4.6 サーバ応答 4.6.1 データフィールド 4.6.2 OKパケット 4.6.3 エラーパケット 4.6.4 EOFパケット 4.6.5 結果セットパケット 5章 設定変数 5.1 設定変数のためのチュートリアル 5.1.1 設定ファイルとコマンドラインオプション 5.1.2 設定オプション解析の詳細 5.1.3 新しい設定オプションの追加例 5.2 特定の設定変数の興味深い側面 5.2.1 big-tables 5.2.2 concurrent_insert 5.2.3 core-file 5.2.4 default-storage-engine 5.2.5 delay-key-write 5.2.6 ft_stopword_file 5.2.7 innodb_buffer_pool_size 5.2.8 innodb_flush_log_at_trx_commit 5.2.9 innodb_file_per_table 5.2.10 innodb_lock_wait_timeout 5.2.11 innodb_force_recovery 5.2.12 init-file 5.2.13 key_buffer_size 5.2.14 language 5.2.15 log 5.2.16 log-bin 5.2.17 log-isam 5.2.18 log-slow-queries 5.2.19 max_allowed_packet 5.2.20 max_connections 5.2.21 max_heap_table_size 5.2.22 max_join_size 5.2.23 max_sort_length 5.2.24 myisam-recover 5.2.25 query_cache_type 5.2.26 read_buffer_size 5.2.27 relay-log 5.2.28 server-id 5.2.29 skip-grant-tables 5.2.30 skip-stack-trace 5.2.31 slave-skip-errors 5.2.32 sort_buffer_size 5.2.33 sql-mode 5.2.34 table_cache 5.2.35 temp-pool 5.2.36 transaction-isolation 6章 スレッドベースの要求処理 6.1 スレッド対プロセス 6.1.1 スレッド使用の利点 6.1.2 スレッド使用の欠点 6.1.3 マルチプロセス使用の利点 6.1.4 マルチプロセス使用の欠点 6.2 要求処理の実装 6.2.1 構造体、変数、クラス、そしてAPI 6.2.2 実行のウォークスルー 6.3 スレッドプログラミングに関する問題 6.3.1 標準Cライブラリ呼び出し 6.3.2 相互排除ロック(ミューテックス) 6.3.3 読み書きロック 6.3.4 同期 6.3.5 プリエンプション 7章 ストレージエンジンインタフェース 7.1 handlerクラス 7.1.1 handlerton 7.2 カスタムのストレージエンジンをMySQLに追加する 7.2.1 バージョン4.1用の統合手順 7.2.2 バージョン5.1用の統合手順 8章 同時アクセスとロック 8.1 テーブルロックマネージャ 8.1.1 読み出しロック要求 8.1.2 書き込みロック要求 8.1.3 InnoDBロック 9章 パーサとオプティマイザ 9.1 パーサ 9.1.1 レキシカルスキャナ 9.1.2 文法規則モジュール 9.1.3 解析ツリー 9.2 オプティマイザ 9.2.1 オプティマイザアルゴリズムの基本 9.2.2 EXPLAINを使ってオプティマイザを理解する 9.2.3 範囲オプティマイザ 9.2.4 サブクエリ最適化 9.2.5 コアのオプティマイザのクラスと構造体 9.2.6 SELECT解析ツリー 10章 ストレージエンジン 10.1 共有されるアーキテクチャの側面 10.1.1 MyISAM 10.1.2 MyISAMアーキテクチャ 10.1.3 MyISAMキーのタイプ 10.2 InnoDB 10.3 MEMORY(HEAP) 10.4 MyISAMマージ 10.5 NDB 10.6 ARCHIVE 10.7 FEDERATED 11章 トランザクション 11.1 トランザクショナルストレージエンジン実装の概要 11.2 handlerサブクラスを実装する 11.3 handlertonを定義する 11.4 クエリキャッシュを利用する 11.5 レプリケーションバイナリログを利用する 11.6 デッドロックを回避する 12章 レプリケーション 12.1 概要 12.2 ステートメントベースおよび行ベースのレプリケーション 12.3 2スレッドのスレーブ 12.4 マルチマスタ 12.5 レプリケーションの理解に役立つSQLコマンド 12.6 バイナリログフォーマット 12.7 カスタムのレプリケーションユーティリティを作成する 索引