MySQL パフォーマンス検証として、弊社検証環境でベンチマークをとってみました。5.0系と5.1系、MyISAM、InnoDBをそれぞれ計測しています。 とりあえず今回は環境紹介で、各ベンチマーク結果は次回より。


■ベンチマーク環境

【サーバ環境】

  • Server  : DELL PowerEdge860 (1U)
  • CPU    : Intel(R) Xeon(R) CPU 3050 @ 2.13GHz 2cores
  • MEM    : 4G
  • DISK   : SEAGATE Model: ST373455SS (SAS,15000rpm,キャッシュ16M)
    ※ローカルディスク、NO RAIDで利用
  • OS   : CentOS5.2 x86_64 (Red Hat Enterprise Linux 互換OS)
  • カーネル : 2.6.18-92.el5 #1 SMP Tue Jun 10 18:51:06 EDT 2008
  • FileSystem : ext3 (LVM )

【テーブル定義】
CREATE TABLE IF NOT EXISTS normal(`id` int(10) unsigned NOT NULL auto_increment,`name` varchar(64) NOT NULL default ”,`email` varchar(64) NOT NULL default ”,`password` varchar(64) NOT NULL default ”,`dob` date default NULL,`address` varchar(128) NOT NULL default ”,`city` varchar(64) NOT NULL default ”,`state_id` tinyint(3) unsigned NOT NULL default ‘0′,`zip` varchar(8) NOT NULL default ”,`country_id` smallint(5) unsigned NOT NULL default ‘0′,PRIMARY KEY (`id`),UNIQUE KEY `email` (`email`),KEY `country_id` (`country_id`,`state_id`,`city`)) ENGINE=innoDB; もしくは MyISAM;

※ENGINE(ストレージエンジン)はInnoDBとMyISAMの2種類で計測

 

【MySQL バージョン】

 MySQL Enterprise Server 5.0.79 SP1 x86_64-glibc23
 MySQL Enterprise Server 5.1.30 x86_64-glibc23

上記 2バージョンで計測

 

【MySQL 初期化パラメータ】 ※一部抜粋
skip-locking
key_buffer = 1250M
max_allowed_packet = 16M
table_cache = 1024
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 64
query_cache_size = 128M
query_cache_type = 0 (OFF)
thread_concurrency = 4
max_connections=1500
net_read_timeout=30
net_write_timeout=30
back_log=128
innodb_buffer_pool_size = 1250M
innodb_additional_mem_pool_size = 50M
innodb_log_buffer_size = 4M
innodb_thread_concurrency=8
sync_binlog=1

【計測方法】

  • 100万件が登録されたテーブルに対して、1分間のアイドリング検索を実施後、1分間×3回のクエリ数計測を実施し、その平均値を取得した。
  • 同時実行数(Concurrent Threads)別に計測を実施。複数同時実行の値は、それぞれThreadで実行したクエリの合計値となる。
  • ベンチマークプログラムはPHP製。MySQLクライアントは、PHPのmysqliエクステンションを利用。
  • 純粋なクエリ実行数の計測であり、DBサーバへの接続コストは含まれていない。