MySQL性能テストのためのゴミデータ作成
mysqlに1000万件のゴミデータをインサートするために、ゴミコードを書いた。
環境
- os:centos5.2(xen-domain-u)
- memory:2GB
ruby/mysqlインストール
configを指定してインストールします。
$ sudo yum install ruby ruby-devel mysql-server mysql-devel mysql $ sudo gem install mysql -- --with-mysql-config=/usr/bin/mysql_config
DB作成
適当にDBを作成。
CREATE TABLE `users` ( `id` bigint(20) unsigned NOT NULL auto_increment, `user` varchar(64) default NULL, `misc1` varchar(64) default NULL, PRIMARY KEY (`id`), UNIQUE KEY `users` (`user`) )
1000万件インサート
bulkインサートにしてみた。
require 'rubygems' require 'mysql' def misc1 str = (1..16).inject(String.new){|s,stub| s << format("%02x",rand(255)).to_s } "#{str[0,8]}-#{str[8,4]}-#{str[12,4]}-#{str[16,4]}-#{str[18,12]}" end def user(num) "foo" + num.to_s end max=10000000 bulk = [] db = Mysql::new("localhost","root","","perftest") (1..max).each {|n| unless n % 1000 == 0 bulk << "\(\'#{user(n)}\', \'#{misc1}\'\)" else db.query("insert into `users` (`user`, `misc1`) value #{bulk.join(',')}") puts n.to_s bulk.clear end }
1時間半ぐらいでやっと終わり。DBのサイズは1.3GB前後になりました。
$ time ruby test.rb real 55m48.440s user 31m16.565s sys 5m30.345s $ sudo du -sh `pwd` 1.3G /var/lib/mysql