mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-09 07:30:02 +00:00
166 lines
5.1 KiB
Perl
166 lines
5.1 KiB
Perl
#!/usr/bin/env perl
|
|
|
|
BEGIN {
|
|
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
|
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
|
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
|
};
|
|
|
|
use strict;
|
|
use warnings FATAL => 'all';
|
|
use English qw(-no_match_vars);
|
|
use Test::More;
|
|
|
|
use PerconaTest;
|
|
use Sandbox;
|
|
use Time::HiRes qw(sleep);
|
|
require "$trunk/bin/pt-query-digest";
|
|
|
|
my $dp = new DSNParser(opts=>$dsn_opts);
|
|
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
|
my $dbh = $sb->get_dbh_for('master');
|
|
|
|
if ( !$dbh ) {
|
|
plan skip_all => 'Cannot connect to sandbox master';
|
|
}
|
|
else {
|
|
plan tests => 11;
|
|
}
|
|
|
|
my @args;
|
|
|
|
# #############################################################################
|
|
# Issue 361: Add a --runfor (or something) option to mk-query-digest
|
|
# #############################################################################
|
|
`$trunk/bin/pt-query-digest --processlist h=127.1,P=12345,u=msandbox,p=msandbox --run-time 3 --port 12345 --log /tmp/mk-query-digest.log --pid /tmp/mk-query-digest.pid --daemonize 1>/dev/null 2>/dev/null`;
|
|
chomp(my $pid = `cat /tmp/mk-query-digest.pid`);
|
|
sleep 2;
|
|
my $output = `ps x | grep $pid | grep processlist | grep -v grep`;
|
|
ok(
|
|
$output,
|
|
'Still running for --run-time (issue 361)'
|
|
);
|
|
|
|
sleep 1.5;
|
|
$output = `ps x | grep $pid | grep processlist | grep -v grep`;
|
|
is(
|
|
$output,
|
|
'',
|
|
'No longer running for --run-time (issue 361)'
|
|
);
|
|
|
|
diag(`rm -rf /tmp/mk-query-digest.log`);
|
|
|
|
# #############################################################################
|
|
# Issue 1150: Make mk-query-digest --run-time behavior more flexible
|
|
# #############################################################################
|
|
@args = ('--report-format', 'query_report,profile', '--limit', '10');
|
|
|
|
# --run-time-mode event without a --run-time should result in the same output
|
|
# as --run-time-mode clock because the log ts will be effectively ignored.
|
|
my $before = output(
|
|
sub { pt_query_digest::main("$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
'--report-format', 'query_report,profile')
|
|
},
|
|
);
|
|
|
|
@args = ('--report-format', 'query_report,profile', '--limit', '10');
|
|
|
|
my $after = output(
|
|
sub { pt_query_digest::main(@args, "$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
qw(--run-time-mode event))
|
|
},
|
|
);
|
|
|
|
is(
|
|
$before,
|
|
$after,
|
|
"Event run time mode doesn't change analysis"
|
|
);
|
|
|
|
ok(
|
|
no_diff(
|
|
sub { pt_query_digest::main(@args, "$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
qw(--run-time-mode event --run-time 1h)) },
|
|
"t/pt-query-digest/samples/slow033-rtm-event-1h.txt"
|
|
),
|
|
"Run-time mode event 1h"
|
|
);
|
|
|
|
# This is correct because the next event is 1d and 1m after the first.
|
|
# So runtime 1d should not include it.
|
|
ok(
|
|
no_diff(
|
|
sub { pt_query_digest::main(@args, "$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
qw(--run-time-mode event --run-time 1d)) },
|
|
"t/pt-query-digest/samples/slow033-rtm-event-1h.txt"
|
|
),
|
|
"Run-time mode event 1d"
|
|
);
|
|
|
|
# Now we'll get the 2nd event but not the 3rd.
|
|
ok(
|
|
no_diff(
|
|
sub { pt_query_digest::main(@args, "$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
qw(--run-time-mode event --run-time 25h)) },
|
|
"t/pt-query-digest/samples/slow033-rtm-event-25h.txt"
|
|
),
|
|
"Run-time mode event 25h"
|
|
);
|
|
|
|
# Run-time interval.
|
|
push @args, qw(--iterations 0);
|
|
ok(
|
|
no_diff(
|
|
sub { pt_query_digest::main(@args, "$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
qw(--run-time-mode interval --run-time 1d)) },
|
|
"t/pt-query-digest/samples/slow033-rtm-interval-1d.txt"
|
|
),
|
|
"Run-time mode interval 1d"
|
|
);
|
|
|
|
# This correctly splits these two events:
|
|
# Time: 090727 11:19:30 # User@Host: [SQL_SLAVE] @ []
|
|
# Time: 090727 11:19:31 # User@Host: [SQL_SLAVE] @ []
|
|
# The first belongs to the 0-29s interval, the second to the
|
|
# 30-60s interval.
|
|
ok(
|
|
no_diff(
|
|
sub { pt_query_digest::main(@args, "$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
qw(--run-time-mode interval --run-time 30)) },
|
|
"t/pt-query-digest/samples/slow033-rtm-interval-30s.txt"
|
|
),
|
|
"Run-time mode interval 30s"
|
|
);
|
|
|
|
# Now, contrary to the above, those two events are together because they're
|
|
# within the same 30m interval.
|
|
ok(
|
|
no_diff(
|
|
sub { pt_query_digest::main(@args, "$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
qw(--run-time-mode interval --run-time 30m)) },
|
|
"t/pt-query-digest/samples/slow033-rtm-interval-30m.txt",
|
|
),
|
|
"Run-time mode interval 30m"
|
|
);
|
|
|
|
pop @args; # report --iterations 0
|
|
pop @args;
|
|
# Like the first 30s run above, but with only 3 interations, only the
|
|
# first 3 queries are gotten.
|
|
ok(
|
|
no_diff(
|
|
sub { pt_query_digest::main(@args, "$trunk/t/lib/samples/slowlogs/slow033.txt",
|
|
qw(--run-time-mode interval --run-time 30 --iterations 3)) },
|
|
"t/pt-query-digest/samples/slow033-rtm-interval-30s-3iter.txt"
|
|
),
|
|
"Run-time mode interval and --iterations"
|
|
);
|
|
|
|
# #############################################################################
|
|
# Done.
|
|
# #############################################################################
|
|
$sb->wipe_clean($dbh);
|
|
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
|
exit;
|