Blogs

InnoDB vs MyISAM パフォーマンス測定環境

毎回書くのは面倒なのでこちらにパフォーマンス測定の環境をまとめます。

サーバ環境

HP DL350
Linux version 2.6.9-5.ELsmp (bhcompile@decompose.build.redhat.com) (gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)) #1 SMP Wed Jan 5 19:30:39 EST 2005

Intel(R) Pentium(R) III CPU family×2
cpu MHz : 1396.686
cache size : 512 KB
3GB of RAM

OSもMySQLも32bit。
MySQLは5.0.37。

1.以下のテーブルに、データを100万件登録しました。

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;

CREATE TABLE IF NOT EXISTS normal2 (
`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=MyISAM;

要するに同じ構造でInnoDB(テーブル名:normal)、MyISAM(テーブル名:normal2)用のテーブルを作成しました。

PRIMARY KEYであるidには1~1000000の値がセットされています。
country_idは1~200の値を持っています。
state_idは1~50の値を持っています。
以外の項目はバイト長一杯のランダムな値を持っています。

2.同時スレッドを2,4,8,16,32,64と変えながら1秒間のクエリー処理数を計測します。

3.60秒間事前に実行(アイドリング)してから、60秒3回計測してその平均を算出します。

4.MySQLの初期化パラメータは以下の通りです。

[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking

sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 1024
max_allowed_packet = 16M
key_buffer_size=1250M
innodb_buffer_pool_size=1250M
innodb_log_file_size=10M
innodb_thread_concurrency=8
max_connections=1500
table_cache=1024
net_read_timeout=30
net_write_timeout=30
back_log=128

※クエリーキャッシュを利用すると計測の意味が無くなってしまうので使用していません。

上記の内容を使用して計測したのは
InnoDB vs MyISAM パフォーマンス比較 SELECT ・・・ LIMIT N
InnoDB vs MyISAM パフォーマンス比較 取得件数が多い場合
InnoDB vs MyISAM パフォーマンス比較 PrimaryKEY、UniqueIndex、非UniqueIndex
innodb_thread_concurrencyとか 計測してみました
InnoDB vs MyISAM パフォーマンス測定環境
InnoDBとMyISAMどっちが速いか? 自分で試してみました(続き)
InnoDBとMyISAMどっちが速いか? 自分で試してみました
InnoDBとMyISAMどっちが速いか? 続き
InnoDBとMyISAMどっちが速いか?
です。

kajiwaraInnoDB vs MyISAM パフォーマンス測定環境