Skip to content

Instantly share code, notes, and snippets.

@mix3
Created December 30, 2012 08:05
Show Gist options
  • Save mix3/4411511 to your computer and use it in GitHub Desktop.
Save mix3/4411511 to your computer and use it in GitHub Desktop.
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)
) ENGINE=INNODB;
});
$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};
eval {
$dbh->begin_work;
my $row = $dbh->selectrow_hashref(q{SELECT * FROM t1 WHERE k = 1 FOR UPDATE});
$dbh->do(q{UPDATE t1 SET v = ? WHERE k = 1}, {}, $row->{v} + 1);
};
if ($@) {
warn $!;
$dbh->rollback;
} else {
$dbh->commit;
}
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/for-update-2.pl
2012-12-30T17:04:10 [INFO] starting benchmark: concurrency: 10, time: 3
2012-12-30T17:04:15 [INFO] done benchmark: score 290, elapsed 3.017 sec = 96.122 / sec
$VAR1 = {
'stashes' => {
'6' => {},
'3' => {},
'7' => {},
'9' => {},
'2' => {},
'8' => {},
'1' => {},
'4' => {},
'10' => {},
'5' => {}
},
'score' => 290,
'elapsed' => '3.0169922'
};
$VAR1 = {
'k' => '1',
'v' => '290'
};
=cut
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment