~ubuntu-branches/ubuntu/trusty/drizzle/trusty

« back to all changes in this revision

Viewing changes to tests/sql-bench/test-transactions

  • Committer: Package Import Robot
  • Author(s): Dmitrijs Ledkovs
  • Date: 2013-10-29 15:43:40 UTC
  • mfrom: (1.2.12) (2.1.19 trusty-proposed)
  • Revision ID: package-import@ubuntu.com-20131029154340-2gp39el6cv8bwf2o
Tags: 1:7.2.3-2ubuntu1
* Merge from debian, remaining changes:
  - Link against boost_system because of boost_thread.
  - Add required libs to message/include.am
  - Add upstart job and adjust init script to be upstart compatible.
  - Disable -floop-parallelize-all due to gcc-4.8/4.9 compiler ICE
    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57732

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/perl
2
 
# Copyright (C) 2001, 2003 MySQL AB
3
 
#
4
 
# This library is free software; you can redistribute it and/or
5
 
# modify it under the terms of the GNU Library General Public
6
 
# License as published by the Free Software Foundation; version 2
7
 
# of the License.
8
 
#
9
 
# This library is distributed in the hope that it will be useful,
10
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 
# Library General Public License for more details.
13
 
#
14
 
# You should have received a copy of the GNU Library General Public
15
 
# License along with this library; if not, write to the Free
16
 
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
17
 
# MA 02111-1307, USA
18
 
#
19
 
# Test of transactions performance.
20
 
#
21
 
 
22
 
##################### Standard benchmark inits ##############################
23
 
 
24
 
use Cwd;
25
 
use DBI;
26
 
use Benchmark;
27
 
#use warnings;
28
 
 
29
 
$opt_groups=27;             # Characters are 'A' -> Z
30
 
 
31
 
$opt_loop_count=10000;      # Change this to make test harder/easier
32
 
$opt_medium_loop_count=100; # Change this to make test harder/easier
33
 
 
34
 
$pwd = cwd(); $pwd = "." if ($pwd eq '');
35
 
require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
36
 
 
37
 
# Avoid warnings for variables in bench-init.pl
38
 
# (Only works with perl 5.6)
39
 
#our ($opt_small_test, $opt_small_tables, $opt_debug, $opt_force);
40
 
 
41
 
if ($opt_small_test || $opt_small_tables)
42
 
{
43
 
  $opt_loop_count/=100;
44
 
  $opt_medium_loop_count/=10;
45
 
}
46
 
 
47
 
 
48
 
if (!$server->{transactions} && !$opt_force)
49
 
{
50
 
  print "Test skipped because the database doesn't support transactions\n";
51
 
  exit(0);
52
 
}
53
 
 
54
 
####
55
 
####  Connect and start timeing
56
 
####
57
 
 
58
 
$start_time=new Benchmark;
59
 
$dbh = $server->connect();
60
 
 
61
 
###
62
 
### Create Table
63
 
###
64
 
 
65
 
print "Creating tables\n";
66
 
$dbh->do("drop table bench1");
67
 
$dbh->do("drop table bench2");
68
 
 
69
 
do_many($dbh,$server->create("bench1",
70
 
                             ["idn int NOT NULL",
71
 
                              "rev_idn int NOT NULL",
72
 
                              "region char(1) NOT NULL",
73
 
                              "grp int NOT NULL",
74
 
                              "updated tinyint NOT NULL"],
75
 
                             ["primary key (idn)",
76
 
                              "unique (region,grp)"]));
77
 
do_many($dbh,$server->create("bench2",
78
 
                             ["idn int NOT NULL",
79
 
                              "rev_idn int NOT NULL",
80
 
                              "region char(1) NOT NULL",
81
 
                              "grp int NOT NULL",
82
 
                              "updated tinyint NOT NULL"],
83
 
                             ["primary key (idn)",
84
 
                              "unique (region,grp)"]));
85
 
 
86
 
$dbh->{AutoCommit} = 0;
87
 
 
88
 
###
89
 
### Test insert perfomance
90
 
###
91
 
 
92
 
test_insert("bench1","insert_commit",0);
93
 
test_insert("bench2","insert_autocommit",1);
94
 
 
95
 
sub test_insert
96
 
{
97
 
  my ($table, $test_name, $auto_commit)= @_;
98
 
  my ($loop_time,$end_time,$id,$rev_id,$grp,$region);
99
 
 
100
 
  $dbh->{AutoCommit}= $auto_commit;
101
 
  $loop_time=new Benchmark;
102
 
 
103
 
  for ($id=0,$rev_id=$opt_loop_count-1 ; $id < $opt_loop_count ;
104
 
       $id++,$rev_id--)
105
 
  {
106
 
    $grp=$id/$opt_groups;
107
 
    $region=chr(65+$id%$opt_groups);
108
 
    do_query($dbh,"insert into $table values ($id,$rev_id,'$region',$grp,0)");
109
 
  }
110
 
 
111
 
  $dbh->commit if (!$auto_commit);
112
 
  $end_time=new Benchmark;
113
 
  print "Time for $test_name  ($opt_loop_count): " .
114
 
    timestr(timediff($end_time, $loop_time),"all") . "\n\n";
115
 
}
116
 
 
117
 
###
118
 
### Test rollback performance
119
 
###
120
 
 
121
 
print "Test transactions rollback performance\n" if($opt_debug);
122
 
 
123
 
##
124
 
## Insert rollback test
125
 
##
126
 
 
127
 
#
128
 
# Test is done by inserting 100 rows in a table with lots of rows and
129
 
# then doing a rollback on these
130
 
#
131
 
 
132
 
{
133
 
  my ($id,$rev_id,$grp,$region,$end,$loop_time,$end_time,$commit_loop,$count);
134
 
 
135
 
  $dbh->{AutoCommit} = 0;
136
 
  $loop_time=new Benchmark;
137
 
  $end=$opt_loop_count*2;
138
 
  $count=0;
139
 
 
140
 
  for ($commit_loop=1, $id=$opt_loop_count ; $id < $end ;
141
 
       $id++, $commit_loop++)
142
 
  {
143
 
    $rev_id=$end-$id;
144
 
    $grp=$id/$opt_groups;
145
 
    $region=chr(65+$id%$opt_groups);
146
 
    do_query($dbh,"insert into bench1 values ($id,$rev_id,'$region',$grp,0)");
147
 
    if ($commit_loop >= $opt_medium_loop_count)
148
 
    {
149
 
      $dbh->rollback;
150
 
      $commit_loop=0;
151
 
      $count++;
152
 
    }
153
 
  }
154
 
  if ($commit_loop > 1)
155
 
  {
156
 
    $dbh->rollback;
157
 
    $count++;
158
 
  }
159
 
  $end_time=new Benchmark;
160
 
  print "Time for insert_rollback ($count:$opt_loop_count): " .
161
 
    timestr(timediff($end_time, $loop_time),"all") . "\n\n";
162
 
}
163
 
 
164
 
##
165
 
## Update rollback test
166
 
##
167
 
 
168
 
#
169
 
# Test is done by updating 100 rows in a table with lots of rows and
170
 
# then doing a rollback on these
171
 
#
172
 
 
173
 
{
174
 
  my ($id,$loop_time,$end_time,$commit_loop,$count);
175
 
 
176
 
  $dbh->{AutoCommit} = 0;
177
 
  $loop_time=new Benchmark;
178
 
  $end=$opt_loop_count*2;
179
 
  $count=0;
180
 
 
181
 
  for ($commit_loop=1, $id=0 ; $id < $opt_loop_count ; $id++, $commit_loop++)
182
 
  {
183
 
    do_query($dbh,"update bench1 set updated=2 where idn=$id");
184
 
    if ($commit_loop >= $opt_medium_loop_count)
185
 
    {
186
 
      $dbh->rollback;
187
 
      $commit_loop=0;
188
 
      $count++;
189
 
    }
190
 
  }
191
 
  if ($commit_loop > 1)
192
 
  {
193
 
    $dbh->rollback;
194
 
    $count++;
195
 
  }
196
 
  $end_time=new Benchmark;
197
 
  print "Time for update_rollback ($count:$opt_loop_count): " .
198
 
    timestr(timediff($end_time, $loop_time),"all") . "\n\n";
199
 
}
200
 
 
201
 
##
202
 
## Delete rollback test
203
 
##
204
 
 
205
 
#
206
 
# Test is done by deleting 100 rows in a table with lots of rows and
207
 
# then doing a rollback on these
208
 
#
209
 
 
210
 
{
211
 
  my ($id,$loop_time,$end_time,$commit_loop,$count);
212
 
 
213
 
  $dbh->{AutoCommit} = 0;
214
 
  $loop_time=new Benchmark;
215
 
  $end=$opt_loop_count*2;
216
 
  $count=0;
217
 
 
218
 
  for ($commit_loop=1, $id=0 ; $id < $opt_loop_count ; $id++, $commit_loop++)
219
 
  {
220
 
    do_query($dbh,"delete from bench1 where idn=$id");
221
 
    if ($commit_loop >= $opt_medium_loop_count)
222
 
    {
223
 
      $dbh->rollback;
224
 
      $commit_loop=0;
225
 
      $count++;
226
 
    }
227
 
  }
228
 
  if ($commit_loop > 1)
229
 
  {
230
 
    $dbh->rollback;
231
 
    $count++;
232
 
  }
233
 
  $end_time=new Benchmark;
234
 
  print "Time for delete_rollback ($count:$opt_loop_count): " .
235
 
    timestr(timediff($end_time, $loop_time),"all") . "\n\n";
236
 
}
237
 
 
238
 
 
239
 
###
240
 
### Test update perfomance
241
 
###
242
 
 
243
 
test_update("bench1","update_commit",0);
244
 
test_update("bench2","update_autocommit",1);
245
 
 
246
 
sub test_update
247
 
{
248
 
  my ($table, $test_name, $auto_commit)= @_;
249
 
  my ($loop_time,$end_time,$id);
250
 
 
251
 
  $dbh->{AutoCommit}= $auto_commit;
252
 
  $loop_time=new Benchmark;
253
 
 
254
 
  for ($id=0 ; $id < $opt_loop_count ; $id++)
255
 
  {
256
 
    do_query($dbh,"update $table set updated=1 where idn=$id");
257
 
  }
258
 
 
259
 
  $dbh->commit if (!$auto_commit);
260
 
  $end_time=new Benchmark;
261
 
  print "Time for $test_name  ($opt_loop_count): " .
262
 
    timestr(timediff($end_time, $loop_time),"all") . "\n\n";
263
 
}
264
 
 
265
 
###
266
 
### Test delete perfomance
267
 
###
268
 
 
269
 
test_delete("bench1","delete_commit",0);
270
 
test_delete("bench2","delete_autocommit",1);
271
 
 
272
 
sub test_delete
273
 
{
274
 
  my ($table, $test_name, $auto_commit)= @_;
275
 
  my ($loop_time,$end_time,$id);
276
 
 
277
 
  $dbh->{AutoCommit}= $auto_commit;
278
 
  $loop_time=new Benchmark;
279
 
 
280
 
  for ($id=0 ; $id < $opt_loop_count ; $id++)
281
 
 {
282
 
    do_query($dbh,"delete from $table where idn=$id");
283
 
  }
284
 
  $dbh->commit if (!$auto_commit);
285
 
  $end_time=new Benchmark;
286
 
  print "Time for $test_name  ($opt_loop_count): " .
287
 
   timestr(timediff($end_time, $loop_time),"all") . "\n\n";
288
 
}
289
 
 
290
 
####
291
 
#### End of benchmark
292
 
####
293
 
 
294
 
$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr;
295
 
$sth = $dbh->do("drop table bench2" . $server->{'drop_attr'}) or die $DBI::errstr;
296
 
 
297
 
$dbh->disconnect;                               # close connection
298
 
end_benchmark($start_time);