diff options
author | ivan <ivan> | 2012-01-04 01:20:13 +0000 |
---|---|---|
committer | ivan <ivan> | 2012-01-04 01:20:13 +0000 |
commit | 75e11f1d1a5ced24496b5732e290f7762403feb8 (patch) | |
tree | 881c3d0db1e6f2855ed73993fdcd9c0b9f8ea302 | |
parent | df41e077b4bf3d63604b7de171fbe53c04db1ea3 (diff) |
optimize CDR rating after timed rate perf regression, RT#15739
-rw-r--r-- | FS/FS/Schema.pm | 4 | ||||
-rw-r--r-- | FS/FS/part_pkg/voip_cdr.pm | 7 |
2 files changed, 8 insertions, 3 deletions
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" |