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 = '<div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div>';
my $MAX_QUERY_LENGTH = 20480;
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);
$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});
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{
<tr>
<td>$zday</td>
<td>$count</td>
<td>$min</td>
<td>$max</td>
- <td>$average</td>
- </tr>};
+ <td>$average</td>} ;
+ foreach my $lp (@LATENCY_PERCENTILE) {
+ $queries .=
+ qq{
+ <td>$percentile{$lp}</td> };
+ };
+ $queries .= qq{</tr>};
$count = &comma_numbers($cur_period_info{'SELECT'}{count});
$average = &convert_time($cur_period_info{'SELECT'}{average});
$select_queries .= qq{
<td>$zday</td>
<td>$h</td>
<td>$count</td>
- <td>$average</td>
- </tr>};
+ <td>$average</td>} ;
+ foreach my $lp (@LATENCY_PERCENTILE) {
+ $select_queries .=
+ qq{
+ <td>$percentile{'SELECT'}{$lp}</td> };
+ };
+ $select_queries .= qq{</tr>};
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});
<td>$insert_count</td>
<td>$update_count</td>
<td>$delete_count</td>
- <td>$write_average</td>
- </tr>};
+ <td>$write_average</td>} ;
+ foreach my $lp (@LATENCY_PERCENTILE) {
+ $write_queries .=
+ qq{
+ <td>$percentile{'WRITE'}{$lp}</td> };
+ };
+ $write_queries .= qq{</tr>};
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)));
<th>Min duration</th>
<th>Max duration</th>
<th>Avg duration</th>
+ <th>Latency Percentile(99)</th>
+ <th>Latency Percentile(95)</th>
+ <th>Latency Percentile(90)</th>
</tr>
</thead>
<tbody>$queries
<th>Hour</th>
<th>Count</th>
<th>Average Duration</th>
+ <th>Latency Percentile(99)</th>
+ <th>Latency Percentile(95)</th>
+ <th>Latency Percentile(90)</th>
</tr>
</thead>
<tbody>$select_queries
<th>UPDATE</th>
<th>DELETE</th>
<th>Average Duration</th>
+ <th>Latency Percentile(99)</th>
+ <th>Latency Percentile(95)</th>
+ <th>Latency Percentile(90)</th>
</tr>
</thead>
<tbody>$write_queries