12月2日から開催された「Sun Tech Days 2008 in Tokyo」では、サン・マイクロシステムズ株式会社MySQLビジネス統括本部の梶山隆輔氏が「MySQL: Database for Web 2.0」と題したセッションで、MySQLのデータベース設計やSQLのチューニングについて解説した。
利用シーンが広がるMySQL
梶山氏はまず、MySQLはいまやLAMP環境にとどまらない、広範囲に利用される汎用的なRDBMSであることを強調した。どうしてもMySQLには「ウェブ」「小規模」というイメージがあるが、エンタープライズ分野や、ミッションクリティカルな分野でも使われるようになってきているという。
最近は「Enterprise 2.0」というキーワードで、社内の大規模なシステムをMySQLで置き換えるケースも出てきている。国内の事例では新生銀行が知られている。また、あまり知られてない事例として、アドビシステムズやサイボウズ、キオスク端末など、商用ソフトウェアや専用端末にMySQLが組み込まれているケースもある。
ストレージエンジンを使い分ける
梶山氏は、MySQLのシステムアーキテクチャーで技術的に最も重要でオリジナルな特徴として、プラガブルなストレージエンジン(Pluggable Strorage Engine)を挙げた。MySQLでは、データベースまたはテーブルごとにストレージエンジンを切り替えることができる(表参照)。正しいストレージエンジンを選択すれば、多くのアプリケーションで性能の向上が可能だという。
ストレージエンジン | 特徴 |
---|---|
MyISAM | MySQLの標準ストレージエンジン |
InnoDB | トランザクション、外部キーをサポート |
Memory | テーブルをメインメモリ上に配置して高速に参照できる |
Archive | SELECTとINSERTのみ可能、ロギング・監査向け |
Cluster | 非共有型クラスタ |
CVS | フラットなファイルデータをSQLで参照 |
Merge | パーティショニング的機能(5.0以前) |
Federated | 分散配置したデータに透過的にアクセス |
Custom | エンジンを開発するためのベースとなるエンジン |
Blackhole | /dev/nulll |
このうち伝統的な2つのストレージエンジンについては、次のようなパフォーマンス上のポイントを特に注意するよう語った。
MyISAM
- パフォーマンスでは
key_buffer_size
が重要で、MySQL+MyISAMのみを利用していれば、メインメモリの25~33%を割り当てる show status like 'key%'
の結果からキャッシュ率を見ることが重要で、逆にkey_blocks_unread
の値が大きいときはキャッシュサイズが大きすぎる可能性もある
InnoDB
- パフォーマンスでは
innodb_buffer_pool_size
が重要で、可能な限り大きく取り、MySQL+InnoDBのみを利用していれば、メインメモリの80%程度を割り当てる