#!/usr/bin/perl

use DBI;
use Time::HiRes qw(gettimeofday tv_interval);
use strict;
use warnings;

my $iterations = 100;
my $dbi = DBI->connect('DBI:Pg:dbname=portal', 'web', '',
    { 'AutoCommit' => 0, 'RaiseError' => 1, 'PrintError' => 0 });
my @qfile = map { 'q' . $_ . '.txt'} (1..7);
my @qtext;
for my $qfile (@qfile) {
    open(QFILE, '<', $qfile) || die "can't read $qfile: $!";
    push @qtext, join("\n", <QFILE>);
    close(QFILE);
}

for (my $dst = 10; $dst <= 1000; $dst += $dst < 100 ? 10 : 50) {
    $dbi->do("SET default_statistics_target = $dst");
    my @t0 = gettimeofday;
    $dbi->do("ANALYZE");
    my $elapsed = tv_interval(\@t0, [gettimeofday]);
    print "$dst,ANALYZE,$elapsed\n";
    for (my $q = 0; $q < @qfile; ++$q) {
        my $explain = "EXPLAIN $qtext[$q]";
        my @t0 = gettimeofday;
        for (my $i = 0; $i < $iterations; ++$i) {
            $dbi->do($explain);
        }
        my $elapsed = tv_interval(\@t0, [gettimeofday]);
        print "$dst,$qfile[$q],$elapsed\n";
    }
}

$dbi->disconnect();
