TOPサーバ構築・運用> はじめに
徹底比較!! MySQLエンジン
徹底比較!! MySQLエンジン

第3回:MemoryとArchive
著者:NTTデータ  藤塚 勤也   2006/8/29
1   2  3  次のページ
はじめに

   今回は、「Memory」と「Archive」の2つのストレージエンジンを取り上げます。Memoryエンジンは比較的古いMySQLのバージョンから提供されており、以前はHeapと呼ばれていたストレージエンジンです。もう一方のArchiveエンジンは、MySQL 4.1から提供されている比較的新しいエンジンです。

   それでは、それぞれの特長やテーブルファイルの構成について解説します。

Memoryエンジンとは

   Memoryエンジンは、その名前の通りテーブルデータすべてをメモリ上にのみ格納します。これは、変更結果をディスク上に書き出さないことを意味します。変更データもメモリ上に存在しているため、アプリケーションからの問い合わせは、このメモリ上のデータに対して処理を行なって結果を返します。

   ただし、MySQLサーバが終了するとテーブルデータが消滅してしまいますので、当然変更結果も消滅します。ここでいうMySQLサーバの終了とは、何らかの障害発生による異常終了はもちろんのこと、正しい手順による正常終了も含みます。

   テーブルデータをすべてメモリ上にのみ保持することの最大のメリットは、処理性能の高さです(実際どの程度処理性能が高いのかは、別の回で示しますので、ここでは省略します)。そのかわりMemoryエンジンは、変更データをディスクに保存しないという、データベースとしては何か片手落ちのような印象を持つストレージエンジンです。

   なお、MySQLサーバの起動時には、Memoryテーブルにはテーブルデータが存在していません。そこで、LOAD文もしくはINSERT-SELECT文をMySQLサーバの起動時に実行するようにし、初期データをMemoryテーブルへ読み込む仕掛けが必要です。


Memoryテーブルの特長

   Memoryテーブルの特長を以下にあげます。

  1. HashとBtreeの2つのインデックスが使用可能
  2. 固定長レコードフォーマットである
  3. BLOBとTEXT型は使用できない
  4. 複数のクライアントからアクセスが可能

表1:Memoryの特長

   なお、使用できるSQL文に制限はありません。SELECT文はもちろんのことINSERT文/UPDATE文/DELETE文による更新も可能です。ただし、前述したように更新結果データはメモリ上にのみ存在しているため、MySQLサーバの終了によってその内容は消滅します。


Memoryのテーブルファイル

   テーブルを作成する際、CREATE TABLE文のENGINE句に「MEMORY」を指定することにより、Memoryテーブルを作成することができます。Memoryテーブルを作成すると、そのデータベースのディレクトリ内に、どのようなカラム構成にてできているかなどのテーブル構造のデータが格納された「テーブル名.frm」のみが作成されます。このときディスク上にデータを格納するためのファイルは存在しません。

   次に示すのは、「Memory_TEST」データベース内に「TEST00」という名前のMemoryテーブルを作成した時のファイル一覧です。「Memory_TEST」ディレクトリ内に「TEST00.frm」ファイルのみが存在していることがわかると思います。

[root@localhost var]# ls Memory_TEST/
TEST00.frm

   Memoryテーブルの「TEST00」に10万件のレコードをロードした状態にて、「show table status」コマンドを実行した結果内容を次に示します。テーブル内には、10万件のレコード「Rows: 100000」があることがわかります。

show table statusコマンドの例
mysql> show table status \G;
************* 1. row **************
           Name: TEST00
         Engine: MEMORY
       Version: 10
     Row_format: Fixed
           Rows: 100000
 Avg_row_length: 148
    Data_length: 15645688
Max_data_length: 15518836
   Index_length: 843408
      Data_free: 0
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:


Memoryテーブルの使いどころ

   更新したデータはディスク上に保存しませんので、やはり読み込み専用で使用するのが適切だと思われます。例えば、通常のオンライン処理の中では更新処理を行わないような、マスターデータを格納するためのテーブルとして使用するのに適しています。もちろん、そのマスターテーブルは、メモリ上に配置できる程度のサイズである必要があります。

   しかし、通常のオンライン処理では更新されないマスターテーブルであっても、そのデータの実体はディスク上に存在する必要があります。ディスク上にデータを格納するために、テーブルの実体をMyISAMテーブルやInnoDBテーブルにて管理し、更新処理を行う場合はこの実体を格納しているテーブルに対して行います。そして、定期的にディスク上の実体テーブルからMemoryテーブルにデータを反映する仕掛けを用意するといった使い方が考えられます。

   このような仕掛けを用意してMemoryテーブルを使用するからには、それに見合った処理性能を必要とする場合のみに有効でしょう。

1   2  3  次のページ


株式会社NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第3回:MemoryとArchive
はじめに
  Archiveエンジンとは
  MyISAMテーブルの圧縮モードとの比較