mysqlslap
こんな感じで計測してみようとおもいます。
mysqlslap --auto-generate-sql --auto-generate-sql-guid-primary \ --commit=5 --engine=innodb --number-int-cols=4 --number-char-cols=8 \ --preserve-schema --protocol=tcp --concurrency=50 \ --auto-generate-sql-write-number=100000 --auto-generate-sql-execute-number=10000 \ --iteration=5 --auto-generate-sql-load-type=mixed \ --user=foo --password=hoge --host=foo
auto-generate-sql-load-typeはkey、write,、update、mixedをそれぞれ試してみる。
自動生成されるテーブルはこんな感じ。
mysql> show create table t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `id` varchar(32) NOT NULL, `intcol1` int(32) DEFAULT NULL, `intcol2` int(32) DEFAULT NULL, `intcol3` int(32) DEFAULT NULL, `intcol4` int(32) DEFAULT NULL, `charcol1` varchar(128) DEFAULT NULL, `charcol2` varchar(128) DEFAULT NULL, `charcol3` varchar(128) DEFAULT NULL, `charcol4` varchar(128) DEFAULT NULL, `charcol5` varchar(128) DEFAULT NULL, `charcol6` varchar(128) DEFAULT NULL, `charcol7` varchar(128) DEFAULT NULL, `charcol8` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
1レコードあたり1KBちょっと。100K行だと100MBのテーブルになる。1M行にすれば1GBだね。
追記:load-type=updateでiterationを1よりも大きくするとlock wait timeoutになるね。iterationを1にして、手動で繰り返しすることで回避。