# insert and write performance
print "Begin insertions...\n\n";
my $iov_seed = time;
my $logic_id = 9999;
my $count=0;
my $MAXCOUNT = 1000;
my $total=0;
my $start = gettimeofday;
my $commit_cnt = 0;
my $commit_size = 100;
$sql = qq[ SELECT logic_id, since, till FROM $cond_name
WHERE logic_id = ?
AND ((since >= ? AND since < ?)
OR (till > ? AND till < ?)
OR (? >= since AND ? < till))
LIMIT 1 ];
my $overlap_check_h = $dbh->prepare_cached($sql);
# $sql = qq[INSERT INTO $cond_name SET logic_id = ?,
# since = ?,
# till = ?,
# value = ?];
$sql = qq[ INSERT INTO $cond_name VALUES (?, ?, ?, ?) ];
my $insert_h = $dbh->prepare_cached($sql);
$dbh->do( qq[ SET FOREIGN_KEY_CHECKS=0 ] );
for (0..10000) {
my ($t1, $t2) = make_iov();
$overlap_check_h->bind_param(1, $logic_id, SQL_INTEGER);
$overlap_check_h->bind_param(2, $t1, SQL_DATETIME);
$overlap_check_h->bind_param(3, $t2, SQL_DATETIME);
$overlap_check_h->bind_param(4, $t1, SQL_DATETIME);
$overlap_check_h->bind_param(5, $t2, SQL_DATETIME);
$overlap_check_h->bind_param(6, $t1, SQL_DATETIME);
$overlap_check_h->bind_param(7, $t2, SQL_DATETIME);
$overlap_check_h->execute();
my @overlap = $overlap_check_h->fetchrow_array();
if (@overlap) { print "OVERLAP! That's impossible!\n"; }
else {
$insert_h->bind_param(1, $logic_id, SQL_INTEGER);
$insert_h->bind_param(2, $t1, SQL_DATETIME);
$insert_h->bind_param(3, $t2, SQL_DATETIME);
$insert_h->bind_param(4, 3.1415, SQL_FLOAT);
$insert_h->execute();
$count++;
$commit_cnt++;
if ($commit_cnt == $commit_size) {
$dbh->commit();
$commit_cnt = 0;
}
if ($count == $MAXCOUNT) { report(); }
}
}
$dbh->do( qq[ SET FOREIGN_KEY_CHECKS=1 ] );
$dbh->commit();
$dbh->disconnect();
####
[insert] [date time] [ins/s]
1000 2005-03-08 16:02:23 1053.265
2000 2005-03-08 16:02:25 555.494
3000 2005-03-08 16:02:27 374.252
4000 2005-03-08 16:02:31 280.796
5000 2005-03-08 16:02:35 221.845
6000 2005-03-08 16:02:41 189.839
7000 2005-03-08 16:02:47 162.636
8000 2005-03-08 16:02:54 142.633
9000 2005-03-08 16:03:02 126.241
10000 2005-03-08 16:03:10 114.398
####
0: 587.5440658049354 ins/s
1000: 1117.31843575419 ins/s
2000: 1658.374792703151 ins/s
3000: 1968.503937007874 ins/s
4000: 1968.503937007874 ins/s
5000: 2150.537634408602 ins/s
6000: 2212.3893805309735 ins/s
7000: 2262.443438914027 ins/s
8000: 2188.1838074398247 ins/s
9000: 2066.115702479339 ins/s
10000: 2314.814814814815 ins/s
####
[#insert] [date time] [ins/s]
1000 2005-03-08 16:32:06 1109.196
2000 2005-03-08 16:32:08 568.175
3000 2005-03-08 16:32:11 373.548
4000 2005-03-08 16:32:14 284.840
5000 2005-03-08 16:32:19 227.884
6000 2005-03-08 16:32:24 189.410
7000 2005-03-08 16:32:31 154.263
8000 2005-03-08 16:32:38 137.563
9000 2005-03-08 16:32:47 110.940
10000 2005-03-08 16:32:59 82.182