· 8 years ago · Mar 04, 2018, 02:28 PM
1#!/usr/bin/perl
2use strict;
3use warnings;
4use DBI;
5
6my $user = 'root';
7my $pass = '';
8my $dsn = 'DBI:mysql:test';
9my %attr = (RaiseError => 1, AutoCommit => 1);
10
11start();
12
13my $pid;
14my @wait;
15
16my @names = qw/kamipo dealforst hirafoo sasata299 waji/;
17
18for (0 .. 4) {
19 my $name = $names[$_];
20 if ($pid = fork) {
21 print "start $name\n";
22 push @wait, sub { wait };
23 }
24 elsif (defined $pid) {
25 #insert($name);
26 ::select();
27 print "finish $name\n";
28 exit;
29 }
30 else {
31 die $!;
32 }
33}
34
35$_->() for @wait;
36
37finish();
38
39print "finish all\n";
40
41sub start {
42 my $dbh = DBI->connect($dsn, $user, $pass, \%attr);
43
44 $dbh->do(q{DROP TABLE IF EXISTS `tx_bench`});
45 $dbh->do(<<SQL);
46CREATE TABLE `tx_bench` (
47 `id` int(11) NOT NULL auto_increment,
48 `name` varchar(255) NOT NULL,
49 PRIMARY KEY (`id`)
50) ENGINE=InnoDB DEFAULT CHARSET=utf8;
51SQL
52
53 $dbh->do(q{INSERT INTO `tx_bench` (`name`) VALUES ('start')});
54 $dbh->disconnect;
55}
56
57sub insert {
58 my $name = shift;
59 my $dbh = DBI->connect($dsn, $user, $pass, \%attr);
60 my $sth = $dbh->prepare(q{INSERT INTO `tx_bench` (`name`) VALUES (?)});
61
62 $dbh->begin_work;
63 $sth->execute($name) for 1 .. 10000;
64 $dbh->commit;
65
66 $dbh->begin_work;
67 $sth->execute($name) for 1 .. 10000;
68 $dbh->commit;
69
70 $sth->finish;
71 $dbh->disconnect;
72}
73
74sub select {
75 my $dbh = DBI->connect($dsn, $user, $pass, \%attr);
76 my $sth = $dbh->prepare(q{SELECT * FROM `tx_bench` WHERE `id` = ?});
77 $sth->execute($_) for 1 .. 100000;
78}
79
80sub finish {
81 my $dbh = DBI->connect($dsn, $user, $pass, \%attr);
82
83 $dbh->do(q{INSERT INTO `tx_bench` (`name`) VALUES ('finish')});
84 $dbh->disconnect;
85}