From 75e11f1d1a5ced24496b5732e290f7762403feb8 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 4 Jan 2012 01:20:13 +0000 Subject: [PATCH] optimize CDR rating after timed rate perf regression, RT#15739 --- FS/FS/Schema.pm | 4 +++- 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" -- 2.11.0