PC関係の情報など。あとは雑記。

まとブロ

雑記・雑学

MySQLのメモリストレージエンジンについて

更新日:




メモリストレージエンジンとは

メモリストレージエンジンとはテーブルのエンジンの種類の一つで、メモリ領域にテーブルを展開することによって高速なアクセスを可能にするというもの。
主な特徴としては、

  • 高パフォーマンス
  • 電源が落ちたとき、MySQLを終了したときテーブルの内容が消える
  • 障害に弱い
  • キャッシュなど一時的用途

といったものが挙げられる。

そのメモリテーブルがMySQLで使えるということを知ったのでざっくりとテストしてみる。

パフォーマンスをチェックしてみた

テストPC環境

  • メモリ:DDR3 ECC 12GB

テストデータ

  • データ容量:約4GB
  • レコード件数:約2000万レコード

テスト内容

  • メモリテーブルにデータをロードする時間の比較
  • like演算子による結果応答までの時間の比較

テスト結果

メモリテーブルにデータをロードする時間の比較

SQLはLOAd DATA なんとかかんとかという命令文でテーブルにテキストファイルに書き出したデータを流し込んだ。比較対象のストレージタイプはHDDとSSDだが、メモリテーブルへのデータロードに要する時間はHDDなどに比べて格段に早く数分で完了した。同じデータをHDDのストレージタイプのテーブル(要するに通常のテーブル)へロードした場合は1時間弱ほどかかった。

like演算子による結果応答までの時間の比較

mysql> select count(*) from aTable where aTitle like '%sony%';
+----------+
| count(*) |
+----------+
| 33454 |
+----------+
1 row in set (6.54 sec)

aTitleというフィールドのタイプはVarchar(100)で内容は日本語文字列や英数字や記号などが放り込まれている。テーブルのレコード件数は約800万件で、そこからlike演算子で33454件を検索するのに6.54秒という結果になった。

比較といいつつ比較対象のHDDでの検索結果を記したいところだが、予定していたテーブルのサイズが容量の問題でメモリテーブルに収まりきらなかったのでテストできない。おそらくだが検索結果が返ってくるまで1分以上は確実にかかるだろう。

感想

データのロードにかかる時間が早かったのにはさすがメモリテーブルと思ったが、検索の時間にかかった時間についてはまあまあといったところ。あくまでメモリストレージエンジンとはどんなものかという簡単なテストであるためこれだけでメモリテーブルの正確な評価はできないということは記しておく。もっとメモリテーブルにふさわしいDB設計やSQL文があると思うので。

余談だが、今回のテーブルサイズの設定としてメモリ12GB搭載のPCでmax_heap_table_size=10Gの設定でやってみたところロードできたレコード件数は800万件ほどしかできなかった。本来のテーブルの全レコード件数は2000万ほどで、テキストファイルのデータサイズは約4GB、テーブルに展開した状態でもディスク容量は全部で5GB前後のサイズだったので全部メモリテーブルにロードできなかったのは予想外。余裕を持って10GBに設定したのに。単純に搭載メモリを増やせば解決する話だが数百万レコード、数GBサイズのデータを持つテーブルを扱うにはそれなりのメモリ容量を搭載したマシンが必要になるということがわかった。個人でECCメモリ32GBや64GBあるいはそれ以上積んだサーバーマシンを用意するのはハードルが高い。レンタルサーバにしても相当な費用を覚悟する必要があると思う。数万レコードのサイズのテーブルなら私の環境でもメモリテーブルを実用できるがそれだとHDDストレージのテーブルでも十分早そうだしなぁ。メモリテーブルが必要な用途はちょっと想像がつかない特殊なケースだと思われる。しかも予算がたくさんある場合。

追記。メモリテーブルに適した用途として、リアルタイムで高速なデータの反映が必要なオンラインのゲームがあった。

-雑記・雑学

Copyright© まとブロ , 2018 All Rights Reserved Powered by STINGER.