トランザクションストレージエンジンを調べていたら
これを理解するためには殆どMySQLの全容を必然的に知ることになる、そんな気がしました。
MySQLにデータを入れる、というのがよく聞く話だと思います。筆者も前までそんなイメージでした。しかし、データ管理のシーケンスは、そんな単純なものではありませんでした。
以下、MySQLのシーケンスです。
クライアントからのリクエスト
↓
コネクタ and コネクションプール
↓
パーサ and キャッシュ
↓
オプティマイザ
↓
ストレージエンジン
↓
ストレージファイル
結構後の方に知りたいストレージエンジンが出てくるんですね。
というわけで、上から1個1個潰していくことにします。
コネクタとコネクションプール
コネクタは、様々なプログラミング言語からアクセスするためのドライバ
コネクションプールとは、接続待機している状態のプロセス(コネクション)を一定数確保(プール)させているところ。ここでプールされているコネクションは、接続のリクエストが来たら順次使用できるようになっていて、接続する際の負荷を軽減させる仕組みです。ストックしているコネクションを上回るアクセスが来た場合、空きができるまで、クライアントのリクエストは待機状態になります。
パーサとキャッシュ
無事にコネクションプールから、コネクションを渡されたクライアントのデータは、パーサとキャッシュに来ます。
パーサとは、SQLクエリの解析を行います。mysqlのコマンドラインツールから打ち込んだクエリはここで解析されるんですね。
キャッシュとは、SQLクエリとその結果をストックしてくれます。
オプティマイザ
パーサで解析されたクエリを最適化します。
ストレージエンジン
ようやく本題です。
ストレージエンジの役割を先に書きますと、
- データ変換
- インデックス
- メモリ利用
- トランザクション
- 同時実行性(排他制御)
- ユニークファンクション(MyISAMの空間情報インデックスなど)
上記が主だった機能です。インデックスやトランザクション、排他制御といった中核を担う機能を持ってるんですね。
このエンジンには大別して2種類ある
トランザクションストレージエンジン
トランザクション機能をサポートしている
代表格かつ、mysqlのdefault-storage-engineがInnodb
非トランザクションストレージエンジン
トランザクション機能をサポートしていない
以前はmysqlのdefault-storage-engineだったMyISAM
ストレージエンジンソフトウェアは、他にもいっぱいある
Memory
Archive
NDBCLUSTER
CSV
Merge
Federated
Example
Blackhole
などなど・・・それぞれにユニークファンクションがある。