明けましておめでとうございます。@damayaです。
本年も宜しくお願い申し上げます。
本年も宜しくお願い申し上げます。
2013年最初の記事はFusion-io ioDrive Duoです!
去年の12/20にGREEプラットフォームにてローンチされた「輪廻のラグランジェ〜ジャージ部ガールズ〜」で、DBにFusion-ioを使用していますので、MySQLでのベンチマーク結果をご紹介します。


去年の12/20にGREEプラットフォームにてローンチされた「輪廻のラグランジェ〜ジャージ部ガールズ〜」で、DBにFusion-ioを使用していますので、MySQLでのベンチマーク結果をご紹介します。


次にDATABASEを作ります。
mysql>CREATE DATABASE test; Query OK, 1 row affected (0.00 sec) mysql>use test; Database changed mysql>show tables; Empty set (0.00 sec)
ENGINEがMEMORYのTABLEと、InnoDB(ioDrive)のTABLEを作ります。
mysql>CREATE TABLE TEST_TABLE_MEMORY ( -> `ID` mediumint(8) unsigned NOT NULL auto_increment, -> `USER_ID` MEDIUMINT default NULL, -> `NAME` varchar(255) default NULL, -> `EMAIL` varchar(255) default NULL, -> `PASS` varchar(255) default NULL, -> `INSERT_DATE` varchar(50) default NULL, -> PRIMARY KEY (`ID`) -> ) ENGINE=MEMORY AUTO_INCREMENT=1; Query OK, 0 rows affected (0.00 sec) mysql>CREATE TABLE TEST_TABLE_FUSION ( -> `ID` mediumint(8) unsigned NOT NULL auto_increment, -> `USER_ID` MEDIUMINT default NULL, -> `NAME` varchar(255) default NULL, -> `EMAIL` varchar(255) default NULL, -> `PASS` varchar(255) default NULL, -> `INSERT_DATE` varchar(50) default NULL, -> PRIMARY KEY (`ID`) -> ) ENGINE=InnoDB AUTO_INCREMENT=1; Query OK, 0 rows affected (0.00 sec)
生成した100万件のダミーデーターをそれぞれのTABLEに追加します。
それでは、SELECT文を実行してみましょう!
mysql>select count(*) from TEST_TABLE_MEMORY; +----------+ | count(*) | +----------+ | 1000000 | +----------+ 1 row in set (0.00 sec) mysql>select count(*) from TEST_TABLE_FUSION; +----------+ | count(*) | +----------+ | 1000000 | +----------+ 1 row in set (0.24 sec)
さすがMEMORY、速い!
しかし、ioDriveも十分速い領域かと思います。
次にLIKE文で3回ずつSELECTしてみます。
mysql>RESET QUERY CACHE; Query OK, 0 rows affected (0.00 sec) mysql>SELECT COUNT(*) FROM TEST_TABLE_MEMORY WHERE EMAIL LIKE '%purus%' AND INSERT_DATE LIKE '2012-%'; +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (1.05 sec) mysql>SELECT COUNT(*) FROM TEST_TABLE_FUSION WHERE EMAIL LIKE '%purus%' AND INSERT_DATE LIKE '2012-%'; +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (0.70 sec) mysql>SELECT COUNT(*) FROM TEST_TABLE_MEMORY WHERE EMAIL LIKE '%purus%' AND INSERT_DATE LIKE '2012-%'; +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (1.06 sec) mysql>SELECT COUNT(*) FROM TEST_TABLE_FUSION WHERE EMAIL LIKE '%purus%' AND INSERT_DATE LIKE '2012-%'; +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (0.70 sec) mysql>SELECT COUNT(*) FROM TEST_TABLE_MEMORY WHERE EMAIL LIKE '%purus%' AND INSERT_DATE LIKE '2012-%'; +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (1.06 sec) mysql>SELECT COUNT(*) FROM TEST_TABLE_FUSION WHERE EMAIL LIKE '%purus%' AND INSERT_DATE LIKE '2012-%'; +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (0.69 sec)
MEMORY1回目:1.05秒
MEMORY2回目:1.06秒
MEMORY3回目:1.06秒
InnoDB(ioDrive)1回目:0.7秒
InnoDB(ioDrive)2回目:0.7秒
InnoDB(ioDrive)3回目:0.69秒
物理メモリーよりもioDriveのほうが約1.5倍速い!!
※インフラ環境は、GMOアプリクラウドです
CPU:Xeon E5620×2
メモリー:128GB
ioDrive:Fusion-io ioDrive Duo 320GB SLC
下記は、おまけ情報です。
(それぞれのEXPLAIN情報)
mysql>EXPLAIN SELECT COUNT(*) FROM TEST_TABLE_MEMORY WHERE EMAIL LIKE '%purus%' AND INSERT_DATE LIKE '2012-%'; +----+-------------+-------------------+------+---------------+------+---------+------+---------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------------+------+---------------+------+---------+------+---------+-------------+ | 1 | SIMPLE | TEST_TABLE_MEMORY | ALL | NULL | NULL | NULL | NULL | 1000000 | Using where | +----+-------------+-------------------+------+---------------+------+---------+------+---------+-------------+ 1 row in set (0.00 sec) mysql>EXPLAIN SELECT COUNT(*) FROM TEST_TABLE_FUSION WHERE EMAIL LIKE '%purus%' AND INSERT_DATE LIKE '2012-%'; +----+-------------+-------------------+------+---------------+------+---------+------+---------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------------+------+---------------+------+---------+------+---------+-------------+ | 1 | SIMPLE | TEST_TABLE_FUSION | ALL | NULL | NULL | NULL | NULL | 1000351 | Using where | +----+-------------+-------------------+------+---------------+------+---------+------+---------+-------------+ 1 row in set (0.00 sec)
(100万件のINSERTにかかったそれぞれの平均時間)
MEMORY:10秒
InnoDB(ioDrive):12秒
(DROP TABLEにかかったそれぞれの時間)
mysql>DROP TABLE TEST_TABLE_MEMORY; Query OK, 0 rows affected (0.01 sec) mysql>DROP TABLE TEST_TABLE_FUSION; Query OK, 0 rows affected (0.06 sec)
書き込み時間は、数字で比較するとMEMORYに劣りますが許容範囲かと思います。
結果、ioDriveは物理メモリーとほぼ互角のスペックがでることがわかりました。
それでは、またエンジニアBlogでお会いしましょう!