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

« back to all changes in this revision

Viewing changes to tests/kewpie/randgen/performance/perfrun.pl

  • Committer: Package Import Robot
  • Author(s): Clint Byrum
  • Date: 2012-06-19 10:46:49 UTC
  • mfrom: (1.1.6)
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20120619104649-e2l0ggd4oz3um0f4
Tags: upstream-7.1.36-stable
ImportĀ upstreamĀ versionĀ 7.1.36-stable

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
 
 
3
use strict;
 
4
use lib 'lib';
 
5
use lib '../lib';
 
6
 
 
7
use Data::Dumper;
 
8
use Getopt::Long;
 
9
 
 
10
use GenTest;
 
11
use GenTest::Generator::FromDirectory;
 
12
use GenTest::QueryPerformance;
 
13
use GenTest::QueryPerformanceDelta;
 
14
use GenTest::Executor;
 
15
use GenTest::Executor::MySQL;
 
16
use GenTest::Constants;
 
17
use GenTest::Comparator;
 
18
 
 
19
$| = 1;
 
20
 
 
21
my (@dsns, $filter, $in_dir_name, $out_file_name);
 
22
 
 
23
say("Please see http://forge.mysql.com/wiki/Category:RandomQueryGenerator for more information on this test framework.");
 
24
say("Starting $0 ".join(" ", @ARGV));
 
25
 
 
26
my $opt_result = GetOptions(
 
27
        'dsn1=s'                => \$dsns[0],
 
28
        'dsn2=s'                => \$dsns[1],
 
29
        'input-directory=s'     => \$in_dir_name,
 
30
        'output-file=s'         => \$out_file_name,
 
31
        'filter=s'              => \$filter
 
32
);
 
33
 
 
34
if ($opt_result == 0) {
 
35
        exit(STATUS_ENVIRONMENT_FAILURE);
 
36
} elsif (not (defined $dsns[0] && defined $dsns[1] && defined $in_dir_name)) {
 
37
        say("The following options are required: --dsn1 , --dsn2 , --input-directory");
 
38
        exit(STATUS_ENVIRONMENT_FAILURE);
 
39
}
 
40
 
 
41
if (defined $out_file_name) {
 
42
        open (OUT_FILE, ">$out_file_name") or die "Unable to open output file $out_file_name: $!";
 
43
        say("Dumping results to $out_file_name.");
 
44
        select OUT_FILE; $| = 1; select STDOUT;
 
45
}
 
46
 
 
47
if (not defined $filter) {
 
48
        say("No filter defined. All results will be dumped.");
 
49
} else {
 
50
        say("Filter: $filter") if defined $filter;
 
51
}
 
52
 
 
53
my @executors;
 
54
 
 
55
foreach my $server_id (0..1) {
 
56
        say("Connecting to server at DSN $dsns[$server_id] ...");
 
57
        my $executor = GenTest::Executor->newFromDSN($dsns[$server_id]);
 
58
 
 
59
        exit(STATUS_ENVIRONMENT_FAILURE) if $executor->init() != STATUS_OK;
 
60
 
 
61
#       if (!$executor->read_only()) {
 
62
#               say("Executor for dsn: ".$executor->dsn()." has been granted more than just SELECT privilege. Please restrict the user and try again");
 
63
#               exit(STATUS_ENVIRONMENT_FAILURE);
 
64
#       } else {
 
65
                $executor->setFlags($executor->flags() | EXECUTOR_FLAG_PERFORMANCE | EXECUTOR_FLAG_HASH_DATA );
 
66
#       }
 
67
 
 
68
#       $executor->execute("SET GLOBAL innodb_stats_sample_pages = 128");
 
69
#       $executor->execute("SHOW TABLE STATUS");
 
70
 
 
71
        $executors[$server_id] = $executor;
 
72
        say("... done.");
 
73
}
 
74
 
 
75
my $generator = GenTest::Generator::FromDirectory->new( directory_name => $in_dir_name );
 
76
my %counters = (
 
77
        incoming_queries        => 0,
 
78
        executed_queries        => 0,
 
79
        reported_queries        => 0,
 
80
        error_queries           => 0,
 
81
        diverging_queries       => 0
 
82
);
 
83
 
 
84
query: while (my $query_ref = $generator->next(\@executors)) {
 
85
        $counters{incoming_queries}++;
 
86
        last if $query_ref == STATUS_EOF;
 
87
        my $query = $query_ref->[0];
 
88
        next if $query !~ m{\s*SELECT}sgio;
 
89
        $counters{executed_queries}++;
 
90
        
 
91
        foreach my $temperature ('cold','warm') {
 
92
                my @results;
 
93
                foreach my $server_id (0..1) {
 
94
                        $results[$server_id] = $executors[$server_id]->execute($query);
 
95
                }
 
96
 
 
97
                if (($results[0]->status() != STATUS_OK) || ($results[1]->status() != STATUS_OK)) {
 
98
                        $counters{error_queries}++;
 
99
                        next query;
 
100
                } elsif (GenTest::Comparator::compare($results[0], $results[1]) != STATUS_OK) {
 
101
                        say("The two servers returned different result sets for query: $query ;");
 
102
                        $counters{diverging_queries}++;
 
103
                        next query;
 
104
                }
 
105
 
 
106
                my $performance_delta = GenTest::QueryPerformanceDelta->new(
 
107
                        query => $query,
 
108
                        temperature => $temperature,
 
109
                        performances => [ $results[0]->performance() , $results[1]->performance() ]
 
110
                );
 
111
 
 
112
                if ($performance_delta->matchesFilter($filter) == STATUS_OK) {
 
113
                        $counters{reported_queries}++;
 
114
                        print $performance_delta->toString();
 
115
                        print OUT_FILE $performance_delta->serialize() if defined $out_file_name;
 
116
                }
 
117
        }
 
118
}
 
119
 
 
120
say("Run statistics:");
 
121
say("Incoming: $counters{incoming_queries} queries.");
 
122
say("Executed: $counters{executed_queries} queries.");
 
123
say("Reported: $counters{reported_queries} queries.");
 
124
say();
 
125
say("Errors: $counters{error_queries} queries.");
 
126
say("Diverging results: $counters{diverging_queries} queries.");
 
127
 
 
128
close OUT_FILE if defined $out_file_name;