use Parallel::Benchmark; use Test::mysqld; my $mysqld = Test::mysqld->new( my_cnf => { 'skip-networking' => '', }, ); { my $dbh = dbh(); $dbh->do(q{ CREATE TABLE t1 ( k INTEGER UNSIGNED NOT NULL, v INTEGER UNSIGNED NOT NULL, PRIMARY KEY (k) ); }); $dbh->do(q{INSERT INTO t1 (k, v) VALUES (1, 0) }); } my $bm = Parallel::Benchmark->new( setup => sub { my $self = shift; $self->stash->{dbh} = dbh(); }, teardown => sub { my $self = shift; delete $self->stash->{dbh}; }, benchmark => sub { my $self = shift; my $dbh = $self->stash->{dbh}; $dbh->do(q{UPDATE t1 SET v = v + 1 WHERE k = 1}); select undef, undef, undef, 0.1; 1; }, concurrency => 10, # debug => 1, ); my $result = $bm->run(); use Data::Dumper; warn Dumper $result; use Data::Dumper; warn Dumper dbh()->selectrow_hashref(q{SELECT * FROM t1 WHERE k = 1}); sub dbh { return DBI->connect($mysqld->dsn(dbname => 'test'), 'root', '', { AutoCommit => 1, PrintError => 0, RaiseError => 1, ShowErrorStatement => 1, AutoInactiveDestroy => 1, # mysql_enable_utf8 => 1, # mysql_auto_reconnect => 0, }); } =comment $ perl /tmp/atomic.pl 2012-12-30T16:44:23 [INFO] starting benchmark: concurrency: 10, time: 3 2012-12-30T16:44:28 [INFO] done benchmark: score 310, elapsed 3.022 sec = 102.593 / sec $VAR1 = { 'stashes' => { '6' => {}, '3' => {}, '7' => {}, '9' => {}, '2' => {}, '8' => {}, '1' => {}, '4' => {}, '10' => {}, '5' => {} }, 'score' => 310, 'elapsed' => '3.0216583' }; $VAR1 = { 'k' => '1', 'v' => '310' }; =cut