Changeset 44 for trunk/tools

Show
Ignore:
Timestamp:
08/12/09 18:53:49 (5 years ago)
Author:
depesz
Message:

implement --min-pages and --min-wasted-pages options

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/tools/pg_bloat_report.pl

    r43 r44  
    44use Carp; 
    55use English qw( -no_match_vars ); 
    6 use Getopt::Long
     6use Getopt::Long qw(:config no_ignore_case)
    77use Data::Dumper; 
    88use File::Basename; 
     
    2929    $File::Path::VERSION =~ m{\A(\d+)} or die "File::Path::VERSION doesn't start with digits? : $File::Path::VERSION\n"; 
    3030    my $ver = $1; 
    31     return $ver < 2 ? File::Path::mkpath( @_ ) : File::Path::make_path( @_); 
     31    return $ver < 2 ? File::Path::mkpath( @_ ) : File::Path::make_path( @_ ); 
    3232} 
    3333 
     
    3737 
    3838    my $report = slurp_file( 'report.stdout' ); 
    39     if ( 
    40         ($report =~ m{^\(0\s+rows\)\s*\z}m) && 
    41         (!$O->{'send-zero'}) 
    42     ) { 
    43         log_info('Report contains 0 rows. Skipping mailing.'); 
     39    if (   ( $report =~ m{^\(0\s+rows\)\s*\z}m ) 
     40        && ( !$O->{ 'send-zero' } ) ) 
     41    { 
     42        log_info( 'Report contains 0 rows. Skipping mailing.' ); 
    4443        return; 
    4544    } 
     
    159158    my $where_string = join ' AND ', @where_parts; 
    160159    $sql =~ s/__EXTRA__WHERE__/ WHERE $where_string /g; 
     160 
     161    return $sql if ( !$O->{ 'min-pages' } ) && ( !$O->{ 'min-wasted-pages' } ); 
     162 
     163    my @pages_where = (); 
     164 
     165    if ( $O->{ 'min-pages' } ) { 
     166        if ( $O->{ 'mode' } eq 'tables' ) { 
     167            push @pages_where, 'relpages >= ' . $O->{ 'min-pages' }; 
     168        } 
     169        else { 
     170            push @pages_where, 'ipages >= ' . $O->{ 'min-pages' }; 
     171        } 
     172    } 
     173    if ( $O->{ 'min-wasted-pages' } ) { 
     174        if ( $O->{ 'mode' } eq 'tables' ) { 
     175            push @pages_where, 'wastedpages >= ' . $O->{ 'min-wasted-pages' }; 
     176        } 
     177        else { 
     178            push @pages_where, 'wastedipages >= ' . $O->{ 'min-wasted-pages' }; 
     179        } 
     180    } 
     181 
     182    $sql = "SELECT * FROM ( $sql ) as subquery WHERE " . join( ' AND ', @pages_where ); 
    161183 
    162184    return $sql; 
     
    276298        'exclude-schema' => '^(pg_.*|information_schema)$', 
    277299        'logfile'        => '-', 
     300        'mailx'          => 'mailx', 
    278301        'mode'           => 'tables', 
    279302        'psql'           => 'psql', 
    280         'mailx'          => 'mailx'
     303        'send-zero'      => undef
    281304        'subject'        => '[%Y-%m-%d %H:%M:%S %z] Bloat report for __mode__ in __dbname__ at __host__:__port__', 
    282         'send-zero'      => undef, 
    283305    ); 
    284306    show_help_and_die() unless GetOptions( 
     
    297319        'relation-name|t=s', 
    298320        'exclude-relation-name|T=s', 
     321        'min-pages|a=i', 
     322        'min-wasted-pages|A=i', 
    299323 
    300324        # system options 
     
    304328        'mailx|x=s', 
    305329 
    306         # mailing  
     330        # mailing 
    307331        'recipients|r=s', 
    308332        'subject|s=s', 
     
    389413   --relation-name         (-t) : regexp to choose which relations to report on 
    390414   --exclude-relation-name (-T) : regexp to choose which relations should be excluded from report 
     415   --min-pages             (-a) : minimal number of pages object have to have to be on report 
     416   --min-wasted-pages      (-A) : minimal number of wasted pages object have to have to be on report 
    391417 
    392418  [ system options ] 
     
    405431 
    406432Defaults: 
    407    --exclude-schema '^(pg_.*|information_schema)\$' 
    408    --logfile        - 
    409    --mode           tables 
    410    --psql           psql 
    411    --mailx          mailx 
    412    --subject        [%Y-%m-%d %H:%M:%S %z] Bloat report for __mode__ in __dbname__ at __host__:__port__ 
     433   --exclude-schema   '^(pg_.*|information_schema)\$' 
     434   --logfile          - 
     435   --mailx            mailx 
     436   --min-pages        0 
     437   --min-wasted-pages 0 
     438   --mode             tables 
     439   --psql             psql 
     440   --subject          [%Y-%m-%d %H:%M:%S %z] Bloat report for __mode__ in __dbname__ at __host__:__port__ 
    413441 
    414442Notes: