use strict; use DBI; $| = 1; my $release_root = '/build/6.0.4-p2/'; my $datadir = '/build/blobtest_datadir'; my $tcp_port = 1234; my $dbh; stop_server(); start_server(); $dbh->do("DROP DATABASE IF EXISTS blobtest"); $dbh->do("CREATE DATABASE blobtest"); $dbh->do("CREATE TABLE blobtest.blobtest (id integer not null auto_increment, bl mediumblob, md5 char(32), primary key(id)) ENGINE=Falcon"); my @alphabet= ('A'..'Z'); my $row_count; while (1) { my $blob_size = int(rand(255)) * 1024; my $blob_letter = $alphabet[int(rand($#alphabet))]; my $rand_command = rand(); if ($rand_command < 0.4) { print localtime()." [$$] Insert...\n"; $dbh->do(" INSERT INTO blobtest.blobtest (bl, md5) VALUES (REPEAT('$blob_letter', $blob_size), MD5(REPEAT('$blob_letter', $blob_size))); "); $row_count++; } elsif ($rand_command > 0.9) { print localtime()." [$$] Delete...\n"; my $delete_id = int(rand($row_count)); $dbh->do(" DELETE FROM blobtest.blobtest WHERE id = $delete_id "); $row_count--; } else { my $update_id = int(rand($row_count)); print localtime()." [$$] Update...\n"; $dbh->do(" UPDATE blobtest.blobtest SET bl = REPEAT('$blob_letter', $blob_size), md5 = MD5(REPEAT('$blob_letter', $blob_size)) WHERE id = $update_id "); } my $trans_rand = rand(); if ($trans_rand > 0.90) { print localtime()." [$$] Commit...\n"; $dbh->do("COMMIT"); $dbh->do("START TRANSACTION"); } elsif ($trans_rand < 0.10) { print localtime()." [$$] Rollback...\n"; $dbh->do("ROLLBACK"); $dbh->do("START TRANSACTION"); } my $restart_rand = rand(); if ($restart_rand > 0.95) { restart_server(); } } print "end!"; sub start_server { print localtime()." [$$] Starting server...\n"; system("$release_root/bin/mysqld --datadir=$datadir --language=$release_root/share/english --port=1234 --skip-grant-tables --skip-innodb &"); sleep 20; $dbh = DBI->connect('dbi:mysql:'); $dbh->do("SET autocommit=OFF"); $dbh->do("START TRANSACTION"); } sub stop_server { print localtime()." [$$] Stopping server...\n"; print `$release_root/bin/mysqladmin --host=127.0.0.1 --port=1234 shutdown`; sleep 20; } sub restart_server { stop_server(); start_server(); }