詳解 MySQL

[cover photo]
TOPICS
Programming , Database , Linux
発行年月日
PRINT LENGTH
264
ISBN
978-4-87311-343-2
原書
Understanding MySQL Internals
FORMAT
PDF
Ebook
3,520円
Ebookを購入する

「MySQLソースは公に利用できるという意味ではオープンなものだが、そのソースを理解できなければ本質的にはそれはクローズなものになる。」(本書「はじめに」より)
しかし、優秀なプログラマたちのアイデアと努力の結晶であるソースコードを読み解くには、彼らのインスピレーションと努力の痕跡を知る必要がある。本書は、コードに秘められたプログラマたちのアイデアに触れながら、MySQLのソースコードを読み解くための指針を提供する。MySQL内部の詳細に踏み込むための手引書である。

目次

はじめに

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 カスタムのレプリケーションユーティリティを作成する

索引