~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): 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
 
 
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;