From: Himanchali Date: Wed, 4 Jun 2014 09:44:39 +0000 (+0530) Subject: added query latencey percentile for user level , current percentiles are 90, 95, 99 X-Git-Tag: v6.0~36^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=99449607551e5825b0658e613dce20effc0c3fe4;p=pgbadger added query latencey percentile for user level , current percentiles are 90, 95, 99 --- diff --git a/pgbadger b/pgbadger index 65cab0e..3d64367 100644 --- a/pgbadger +++ b/pgbadger @@ -55,6 +55,7 @@ my $parent_pid = $$; my $interrupt = 0; my $tmp_last_parsed = ''; my @SQL_ACTION = ('SELECT', 'INSERT', 'UPDATE', 'DELETE'); +my @LATENCY_PERCENTILE = (99,95,90); my $graphid = 1; my $NODATA = '
NO DATASET
'; my $MAX_QUERY_LENGTH = 20480; @@ -3451,14 +3452,19 @@ sub print_general_activity my %cur_period_info = (); my $write_average_duration = 0; my $write_average_count = 0; + my %all_query_duration=(); foreach my $m (keys %{$per_minute_info{$d}{$h}}) { $cur_period_info{count} += ($per_minute_info{$d}{$h}{$m}{query}{count} || 0); $cur_period_info{duration} += ($per_minute_info{$d}{$h}{$m}{query}{duration} || 0); $cur_period_info{min} = $per_minute_info{$d}{$h}{$m}{query}{duration} if (!exists $cur_period_info{min} || ($per_minute_info{$d}{$h}{$m}{query}{duration} < $cur_period_info{min})); $cur_period_info{max} = $per_minute_info{$d}{$h}{$m}{query}{duration} if (!exists $cur_period_info{max} || ($per_minute_info{$d}{$h}{$m}{query}{duration} > $cur_period_info{max})); + #hima + push(@{$all_query_duration{'query'}}, $per_minute_info{$d}{$h}{$m}{query}{duration}||0); + foreach my $a (@SQL_ACTION) { $cur_period_info{$a}{count} += ($per_minute_info{$d}{$h}{$m}{$a}{count} || 0); $cur_period_info{$a}{duration} += ($per_minute_info{$d}{$h}{$m}{$a}{duration} || 0); + push(@{$all_query_duration{$a}}, $per_minute_info{$d}{$h}{$m}{$a}{duration}||0); $cur_period_info{usual} += ($per_minute_info{$d}{$h}{$m}{$a}{count} || 0); } $cur_period_info{prepare} += ($per_minute_info{$d}{$h}{$m}{prepare} || 0); @@ -3467,6 +3473,7 @@ sub print_general_activity $cur_period_info{average} = $cur_period_info{duration} / ($cur_period_info{count} || 1); $cur_period_info{'SELECT'}{average} = $cur_period_info{'SELECT'}{duration} / ($cur_period_info{'SELECT'}{count} || 1); + $write_average_duration = ($cur_period_info{'INSERT'}{duration} + $cur_period_info{'UPDATE'}{duration} + $cur_period_info{'DELETE'}{duration}); @@ -3480,6 +3487,22 @@ sub print_general_activity my $min = &convert_time($cur_period_info{min}); my $max = &convert_time($cur_period_info{max}); my $average = &convert_time($cur_period_info{average}); + my %percentile = (); + foreach my $lp (@LATENCY_PERCENTILE) { + $cur_period_info{$lp}{percentileindex} = int(@{$all_query_duration{'query'}} * $lp / 100) ; + @{$all_query_duration{'query'}}=sort(@{$all_query_duration{'query'}}); + $cur_period_info{$lp}{percentile} = $all_query_duration{'query'}[$cur_period_info{$lp}{percentileindex}]; $percentile{$lp} = &convert_time($cur_period_info{$lp}{percentile}); + + $cur_period_info{'SELECT'}{$lp}{percentileindex} = int(@{$all_query_duration{'SELECT'}} * $lp / 100) ; + @{$all_query_duration{'SELECT'}}=sort(@{$all_query_duration{'SELECT'}}); + $cur_period_info{'SELECT'}{$lp}{percentile} = $all_query_duration{'SELECT'}[$cur_period_info{'SELECT'}{$lp}{percentileindex}]; + $percentile{'SELECT'}{$lp} = &convert_time($cur_period_info{'SELECT'}{$lp}{percentile}); + + @{$all_query_duration{'WRITE'}}=sort(@{$all_query_duration{'INSERT'}},@{$all_query_duration{'UPDATE'}},@{$all_query_duration{'DELETE'}}); + $cur_period_info{'WRITE'}{$lp}{percentileindex} = int(@{$all_query_duration{'WRITE'}} * $lp / 100) ; + $cur_period_info{'WRITE'}{$lp}{percentile} = $all_query_duration{'WRITE'}[$cur_period_info{'WRITE'}{$lp}{percentileindex}]; + $percentile{'WRITE'}{$lp} = &convert_time($cur_period_info{'WRITE'}{$lp}{percentile}); + } $queries .= qq{ $zday @@ -3487,8 +3510,13 @@ sub print_general_activity $count $min $max - $average - }; + $average} ; + foreach my $lp (@LATENCY_PERCENTILE) { + $queries .= + qq{ + $percentile{$lp} }; + }; + $queries .= qq{}; $count = &comma_numbers($cur_period_info{'SELECT'}{count}); $average = &convert_time($cur_period_info{'SELECT'}{average}); $select_queries .= qq{ @@ -3496,8 +3524,13 @@ sub print_general_activity $zday $h $count - $average - }; + $average} ; + foreach my $lp (@LATENCY_PERCENTILE) { + $select_queries .= + qq{ + $percentile{'SELECT'}{$lp} }; + }; + $select_queries .= qq{}; my $insert_count = &comma_numbers($cur_period_info{'INSERT'}{count}); my $update_count = &comma_numbers($cur_period_info{'UPDATE'}{count}); my $delete_count = &comma_numbers($cur_period_info{'DELETE'}{count}); @@ -3509,8 +3542,13 @@ sub print_general_activity $insert_count $update_count $delete_count - $write_average - }; + $write_average} ; + foreach my $lp (@LATENCY_PERCENTILE) { + $write_queries .= + qq{ + $percentile{'WRITE'}{$lp} }; + }; + $write_queries .= qq{}; my $prepare_count = &comma_numbers($cur_period_info{prepare}); my $execute_count = &comma_numbers($cur_period_info{execute}); my $bind_prepare = &comma_numbers(sprintf("%.2f", $cur_period_info{execute}/($cur_period_info{prepare}||1))); @@ -3578,6 +3616,9 @@ sub print_general_activity Min duration Max duration Avg duration + Latency Percentile(99) + Latency Percentile(95) + Latency Percentile(90) $queries @@ -3592,6 +3633,9 @@ sub print_general_activity Hour Count Average Duration + Latency Percentile(99) + Latency Percentile(95) + Latency Percentile(90) $select_queries @@ -3608,6 +3652,9 @@ sub print_general_activity UPDATE DELETE Average Duration + Latency Percentile(99) + Latency Percentile(95) + Latency Percentile(90) $write_queries