きのうのSun Tech DaysのMySQLのセッション(18時20分から)の内容のメモ
■MySQLアーキテクチャ
・アプリ
↓ コネクタ(Java,.net,c・・・)
--------MySQL---------------------
・スレッド
SQLパーザー
オプティマイザー
--------ここまでは、どこのDBでもある
・ストレージエンジン
・MySQLの最大の特徴
・テーブルごとに変えられる
■プラガブルストレージエンジン
・テーブルごとに、エンジンが変えられる
・メモリーストレージエンジン
・メモリ上に展開なので、高速
・アーカイブストレージエンジン
・削除できないが、データ圧縮できる
■エンジンの違いによる、相違ポイント
・データ保管-どこに格納するか
・インデックス-実装(B+,ハッシュ・・)
・メモリ利用-データキャッシュ、バッファリング
・トランザクション-ACID、XA、MVCC、分離レベル
・同時実行性-ロック、排他制御
■エンジンの例
MyISAM
InnoDB
メモリー
アーカイブ
クラスタ
CSV(CSVファイルをMySQLのテーブルとしてアクセスできる)
マージ
Federated
custom(自分でエンジンを作れる。その雛形)
Blackhole(/dev/nullとおんなじようなかんじ)
そのほか、いろいろ・・・
DB2のエンジンも提供されている
開発はとまったけど、HTTPストレージとかも考えられた
■エンジン指定
・Create tableのengine=で指定できる
・ALTER TABLEで変更できる
・時間かかるかも
■MySQL5.1の特徴
・プラガブルストレージエンジン
・テーブルとインデックスのパーティ初任具
・LOGをテーブルに出力可能
・EVENT :定期的に実行するSQL分
・XML関数のサポート
・行レベルのレプリケーション
・簡易ベンチマークツール mysqlslap
・テスト用クエリ、データの自動作成
■エンジンについて:(1)MyISAM
・1テーブル3ファイル .frm(定義) .myd(データ) .myi(インデックス)
これをコピーすれば動くので可搬性が高い
・myisampackで圧縮できるが、圧縮後は読み取り専用になる
・key_buffer_sizeのバッファサイズ指定が重要
→これ以外何も使わないのであれば、メインメモリの25から33%
■エンジンについて:(2)InnoDB
・メモリとディスク書き出し
メモリ ディスク
ログ ログバッファ → Redoログ
Commit
表 バッファプール → Undoログ
・キーの実装
・プライマリーキー
B+treeで、リーフにデータが入る
・プライマリーキー以外
B+treeで、リーフにプライマリーキーが入る
・innodb_buffer_pool_sizeの指定が重要
→これ以外何も使わないのであれば、メインメモリの80%
(OS,アプリ用を除き)
→可能な限り大きく
■エンジンについて:(3)メモリストレージ
・インデックスはハッシュ(デフォルト)またはB木
・範囲検索だと、ハッシュは使えない(連続じゃないから)
■TIPSとかとか
・BLOBの利用は慎重に
→DBに入れる必要はあるか?
・オプティマイザーの確認EXPLAIN
・オプティマイザでインデックスを使ってくれない
・WHERE句がない
・WHERE句の条件になっている列にインデックスが張られていない
・インデックスを作成しているが、条件に一致するデータが多い
・ORが使われている
→インデックスの列に関数を使わない
こんなかんじだったかな・・・
アンケートに答えると、どら焼きがもらえた。