From: ivan Date: Wed, 4 Jan 2012 01:20:13 +0000 (+0000) Subject: optimize CDR rating after timed rate perf regression, RT#15739 X-Git-Tag: freeside_2_3_1~39 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=75e11f1d1a5ced24496b5732e290f7762403feb8 optimize CDR rating after timed rate perf regression, RT#15739 --- diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 5046ec733..782597313 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -2694,7 +2694,9 @@ sub tables_hashref { ], 'primary_key' => 'ratedetailnum', 'unique' => [ [ 'ratenum', 'orig_regionnum', 'dest_regionnum' ] ], - 'index' => [ [ 'ratenum', 'dest_regionnum' ] ], + 'index' => [ [ 'ratenum', 'dest_regionnum' ], + [ 'ratenum', 'ratetimenum' ] + ], }, 'rate_region' => { diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index df1f2ccf1..08cf4a10a 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -570,8 +570,11 @@ sub calc_usage { if ( !exists($interval_cache{$regionnum}) ) { my @intervals = ( sort { $a->stime <=> $b->stime } - map { my $r = $_->rate_time; $r ? $r->intervals : () } - $rate->rate_detail + map { $_->rate_time->intervals } + qsearch({ 'table' => 'rate_detail', + 'hashref' => { 'ratenum' => $rate->ratenum }, + 'extra_sql' => 'AND ratetimenum IS NOT NULL', + }) ); $interval_cache{$regionnum} = \@intervals; warn " cached ".scalar(@intervals)." interval(s)\n"