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にして、手動で繰り返しすることで回避。