summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorglyn2015-04-15 09:53:31 +0000
committerChristoph Berg2015-04-15 15:39:40 +0000
commit7d56cc7dad04b05d965a28aa05764bc08314f166 (patch)
treedd9111310fa850562f99a2eac057c80239f04e20
parente3d43fece536cb8a5d5c717b7fb2843e8b576bcb (diff)
Fix issues with latest changes to check_sequence and run_command:
check_sequence - Split big UNION of sequence selects into chunks to avoid overrunning system argument size run_command - If we have specified a "target" database, skip all others in global targetdb list
-rwxr-xr-xcheck_postgres.pl52
1 files changed, 29 insertions, 23 deletions
diff --git a/check_postgres.pl b/check_postgres.pl
index e1915ace0..a702ee431 100755
--- a/check_postgres.pl
+++ b/check_postgres.pl
@@ -2254,6 +2254,10 @@ sub run_command {
if ($arg->{dbnumber} and $arg->{dbnumber} != $num) {
next;
}
+ ## Likewise if we have specified "target" database info and this is not our choice
+ if ($arg->{target} and $arg->{target} != $db) {
+ next;
+ }
## Just to keep things clean:
truncate $tempfh, 0;
@@ -7291,30 +7295,34 @@ FROM (
FROM $seqname) foo
};
}
- my $seqinfo = run_command(join("\nUNION ALL\n", @seq_sql), { target => $db }); # execute all SQL commands at once
- for my $r2 (@{$seqinfo->{db}[0]{slurp}}) { # now look at all results
- my ($seqname, $last, $slots, $used, $percent, $left) = @$r2{qw/ seqname last_value slots used percent numleft / };
- if (! defined $last) {
- ndie msg('seq-die', $seqname);
- }
- my $msg = msg('seq-msg', $seqname, $percent, $left);
- my $nicename = perfname("$multidb$seqname");
- $seqperf{$percent}{$seqname} = [$left, " $nicename=$percent%;$w%;$c%"];
- if ($percent >= $maxp) {
- $maxp = $percent;
- if (! exists $opt{perflimit} or $limit++ < $opt{perflimit}) {
- push @{$seqinfo{$percent}} => $MRTG ? [$seqname,$percent,$slots,$used,$left] : $msg;
+ # Use UNION ALL to query multiple sequences at once, however if there are too many sequences this can exceed
+ # maximum argument length; so split into chunks of 200 sequences or less and iterate over them.
+ while (my @seq_sql_chunk = splice @seq_sql, 0, 200) {
+ my $seqinfo = run_command(join("\nUNION ALL\n", @seq_sql_chunk), { target => $db }); # execute all SQL commands at once
+ for my $r2 (@{$seqinfo->{db}[0]{slurp}}) { # now look at all results
+ my ($seqname, $last, $slots, $used, $percent, $left) = @$r2{qw/ seqname last_value slots used percent numleft / };
+ if (! defined $last) {
+ ndie msg('seq-die', $seqname);
}
- }
- next if $MRTG;
+ my $msg = msg('seq-msg', $seqname, $percent, $left);
+ my $nicename = perfname("$multidb$seqname");
+ $seqperf{$percent}{$seqname} = [$left, " $nicename=$percent%;$w%;$c%"];
+ if ($percent >= $maxp) {
+ $maxp = $percent;
+ if (! exists $opt{perflimit} or $limit++ < $opt{perflimit}) {
+ push @{$seqinfo{$percent}} => $MRTG ? [$seqname,$percent,$slots,$used,$left] : $msg;
+ }
+ }
+ next if $MRTG;
- if (length $critical and $percent >= $c) {
- push @crit => $msg;
- }
- elsif (length $warning and $percent >= $w) {
- push @warn => $msg;
+ if (length $critical and $percent >= $c) {
+ push @crit => $msg;
+ }
+ elsif (length $warning and $percent >= $w) {
+ push @warn => $msg;
+ }
}
- }
+ }
if ($MRTG) {
my $msg = join ' | ' => map { $_->[0] } @{$seqinfo{$maxp}};
do_mrtg({one => $maxp, msg => $msg});
@@ -7958,8 +7966,6 @@ sub check_wal_files {
} ## end of check_wal_files
-
-
=pod
=encoding utf8