Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

MySQL事始 ストレージエンジン(1) アーキテクチャ概要

2012/01/26 00:00

今回はMySQLのストレージの中でも、最も利用されているInnoDBについて解説します。トランザクションに対応したInnoDBはMySQL 5.5からデフォルトのストレージエンジンとなりました。

MySQL独自のストレージエンジン

 他のRDBMS同様、様々なプログラミング言語からアクセスするためのドライバ類が用意されています。MySQLではこれらをコネクタ(Connector)と読んでいます。アプリケーションからのアクセスではこれらの経由でMySQLサーバに接続後、ユーザ名やパスワードによる認証を通過します。その後SQL文がパーサ(Parser)にて構文解析され、オプティマイザ(Optimizer)にて実行計画が最適化されます。

 実際にどのようにデータを格納するか、トランザクションを処理するかなどはMySQL独自の「ストレージエンジン」で実装されています。他のデータベース製品ではこのストレージエンジンを実装していません。ストレージエンジンはデータベースの表ごとに設定できるため、ストレージエンジンを切り替えることでアプリケーション特性に応じた最適なパフォーマンスを発揮することができます。主要なストレージエンジンはオラクル社でMySQLサーバとあわせて開発されています。他にもユニークな機能を持ったものや特定の用途に対応したストレージエンジンなどが、コミュニティや様々な企業で開発されています。

ストレージエンジンの役割

 ストレージエンジンの役割は大きく分けて下記の6点になります。

ストレージエンジンの役割
データ保管 どこに格納するか、データレイアウト
インデックス 実装アルゴリズム (Btree, B+, T etc)
メモリ利用 データキャッシュ、バッファリング
トランザクション ACID、分散トランザクション、MVCC、分離レベル
同時実行性 ロック、排他制御
独自機能 MyISAMの空間情報インデックスなど

 多くのストレージエンジンはデータをディスク上に格納しますが、MEMORYストレージエンジンはデータをメインメモリに格納するため、特定の表だけをインメモリデータベースとして扱うこともできます。一方でMySQLサーバで使用するSQL文は多くの場合ストレージエンジンに依存しないため、一つのSQL文の中でディスクにデータを格納した表のデータとインメモリデータベースのデータをJOINすることも可能です。

代表的なストレージエンジン

InnoDB デフォルトのエンジン、トランザクション対応、外部キーサポート
MyISAM MySQL 5.1以前のデフォルト、ファイルシステムの置き換え
Memory 特定のテーブルをインメモリデータベースに
Archive SELECTおよびINSERTのみ可能、圧縮、ロギングや監査など
NDBCLUSTER 非共有型クラスタMySQL Clusterの実装、高可用性構成
CSV  データをCSVファイルに格納しSQL文で参照更新
Merge MyISAMのテーブルをパーティションとして扱うためのエンジン
Federated  別のMySQLサーバ上のテーブルに透過的にアクセス
Example エンジンを開発するためのベース
Blackhole 書き込んだデータを全て飲み込む”/dev/null”的なエンジン

 MySQL 5.5ではInnoDBの性能が大幅に向上しており、最近のアプリケーションではトランザクションが必須となるケースが多いことInnoDBの利用が特に多くなっています。多くのユーザが使用しているエンジンは、他にMyISAM、Memory、Archiveです。ただし、MyISAMはデータファイルが容易に破損することがあり得るため、テーブルレベルロックで並列処理性能に課題があるため、利用は減少傾向にあります。


著者プロフィール

  • 梶山隆輔(カジヤマリュウスケ)

    日本オラクル株式会社 MySQL Global Business Unit Asia Pacific & Japan担当 MySQL Principal Sales Consultant オラクル社において、MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコ...

バックナンバー

連載:MySQL事始

もっと読む

All contents copyright © 2007-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5