もう先週のことですが、MySQLのウィークリーセミナーに行ってきました。無料セミナーで、しかも会社から徒歩数分の距離だったのでとてもよかったです。 今回の内容はMySQLストレージエンジンについての内容でした。 各ストレージエンジンの利用状況

  • MyISAMが70%
  • InnoDBが60%
  • Memoryが10%
  • 他は5%以下

会場にいた人(50名くらい)のストレージエンジン利用状況は、InnoDB 3,4割、Memory数名、Archive 0名でした。 ストレージエンジンの選択 ストレージエンジンは用途によってパフォーマンスに違いが出るので最適なものを選択する必要ある(以下一例)

  • ArchiveストレージエンジンのINSERT処理性能は、MyISAMの1.5倍、InnoDBの3.5倍ある(でもSELECTとINSERTしか使えない)
  • CSVストレージエンジンでCSVファイルをMySQLにロードする場合、10億件のデータも0.00secでできると資料にあった(でもインデックス利用付加、トランザクション非対応。パフォーマンスもそれほどでもないらしい)

などなど。。。 各MySQLストレージエンジンの説明 ・MyISAMストレージエンジン おなじみの、MySQLデフォルトのストレージエンジン

  • テーブルを圧縮可能(圧縮後は読み取り専用)
  • Fulltext、GISインデックス(調査)をサポート
  • Concurrent Insert というテーブルロック中にもインサートできる機能をサポート

・InnoDBストレージエンジン MySQL5.1からはプラグインとして実装される。

  • トランザクション対応
  • サーバ障害後の自動リカバリ機能あり
  • 外部キー利用可能
  • クラスタードインデックス

・Memory(旧HEAP)ストレージエンジン メモリ上に情報を格納するテーブルを作成。非常に高速。

  • メモリ上にデータとインデックス配置。ディスク上にはテーブル定義ファイルのみ(.frm)
  • 固定長レイアウトのみ
  • インデックスのアルゴリズム選択可能(HASHまたはBTREE)
  • BLOB型およびTEXT型は格納不可
  • サーバが再起動したときにはデータは全て失われてしまう

・Blackholeストレージエンジン /dev/null的なストレージエンジン。これはどのような場面で使えるのか?``` master │ │ ↓ ↓ slave slave ←Blackhole ストレージエンジン │ │ ↓ ↓ slave… slave…

上のような構成でレプリケーションを行う場合、真ん中のslaveは次のスレーブにデータを受け渡すだけでデータ自体は保持する必要がないつまりバイナリログを受け渡す機能だけを提供したいような場面で使えるようである。 スレーブの台数がマスタに比べてすごく多いとき、レプリケーション遅延対策を行うような場合には使えそう。 **・FEDERATED** 別のサーバ上のテーブルに接続するテーブル。ローカルサーバに表の定義があって、リモートサーバに実データが格納されている。 ローカルサーバでの定義 CREATE TABLE foo … ENGINE=FEDERATED CONNECTION='mysql://user@host/db/table’

リモートサーバでの定義 CREATE TABLE foo … ENGINE=MyISAM;


*   INSERTのパフォーマンスはMyISAMの1.5倍、InnoDBの3.5倍
*   データは圧縮して格納(圧縮率70~80%)
*   インデックスは非対応

**・CSVストレージエンジン** カンマ区切りのテキスト形式でデータが保存される(データファイルの拡張子は.CSV)。

*   データファイルはそのまま表計算ソフトで読み書きできる
*   データのロードが非常に高速(CSVファイルがそのままデータになるような感じだった)
*   インデックス利用不可、トランザクション不可、パフォーマンスもたいしてよくない

**・Falconストレージエンジン** 現在α版。性能はInnoDBと似ている。ロールバックはInnoDBより早い。 **・PBXTストレージエンジン** 現在α版。

*   InnoDBに取って代わるという意気込みで開発されている
*   BLOB Streaming Engineと組み合わせてバイナリデータをHTTP経由でMySQLに格納可能
*   性能はUPDATEとINSERTでInnoDBにおとる
*   まだまだ開発途中という印象は否めない

**・Nitroedbストレージエンジン** 大量データ登録中でも、集計関数SUM()、MAX()を高速に処理可能。 売買の記録など、データを別のところにコピーとかしないで、生データを高速に集計できる。 **・memcached** memcachedとMySQLを組み合わせたエンジン。SQL文を使ってmemcachedへのデータ入出力が可能になる。 現在はユーザ定義関数(UDF)の開発が進んでいる **・Amazon S3 ストレージエンジン** Amazon Simple Storage Serviceと連携するストレージエンジン。 現在は開発停滞中...。 **・Mariaストレージエンジン** 次世代のトランザクション対応ストレージエンジン。

*   MyISAMストレージエンジンの拡張。
*   トランザクションに対応させるかどうかをテーブル定義で設定可能。
*   自動リカバリ機能も実装予定

**まとめ** Memory、Blackholl、Archiveストレージエンジンはすぐに試してみたいとおもいました。 次回はパフォーマンスチューニングなのでまた参加しようと思います。