use strict; use DBI; $| = 1; my $release_root = '/build/6.0.4-p2/'; my $datadir = '/build/starvation_datadir'; my $dbh; 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"); $dbh->do("SET autocommit=OFF"); $dbh->do("START TRANSACTION"); 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"); } } print "end!"; sub start_server { print localtime()." [$$] Starting server...\n"; system("$release_root/bin/mysqld --datadir=$datadir --language=$release_root/share/english --skip-grant-tables --skip-innodb --falcon_page_cache_size=200Mb --falcon_record_memory_max=200Mb &"); sleep 5; $dbh = DBI->connect('dbi:mysql:'); }