對大型資料集進行定期估算測試

本主題提供對大型資料集進行定期估算測試的指導方針。

在對大型資料集執行定期估算之前,務必大致瞭解預期估算的裝置數量和估算時間。這可以透過查看測量元件上的最新測量日期/時間來快速地量測。以下是一個範例查詢,它會依從提供的處理日期 (上次連續測量日期/時間) 起的月數提供測量元件計數:

select count(*)
, round((to_date(:processDateTime,'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm)/31,0) MONTHS
from d1_measr_comp mc
group by round((to_date(:processDateTime,'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm)/31,0)
order by 2
;

以下是一個更複雜的查詢,它會透過執行緒顯示您在指定的最新測量日期/時間內將處理的測量元件數目,它會做更多的工作來僅查看安裝的裝置和設定為定期估算的測量元件,該測量元件實際上已可根據該組態進行估算。

其參數為:
  • threads:輸入 1 以避免將結果分割成執行緒

  • processDateTime:保留空白以使用系統日期,否則請以下列格式提供日期/時間:YYYY-MM-DD-HH24.MI.SS

with threads as (
 select rownum thread_nbr
 , lpad(round((rownum - 1) * (rpad('9',12,'9')+1)/:threads,0),12,'0') low_id
 , lpad(round(rownum * ((rpad('9',12,'9')+1)/:threads),0)-1,12,'0') high_id
 from dual
 connect by rownum <= :threads
)
select /*+ parallel */ threads.thread_nbr
, threads.low_Id
, threads.high_id
, nvl(mc.adj_latest_msrmt_dttm,mc.latest_msrmt_dttm) LATEST_MSRMT_DTTM
, count(*) MC_COUNT
from threads
inner join d1_dvc dvc
 on dvc.d1_device_id between threads.low_id and threads.high_id
inner join d1_dvc_cfg dc
 on dc.d1_device_id = dvc.d1_device_id
inner join d1_install_evt ie
 on ie.device_config_id = dc.device_config_id
 and ie.d1_install_dttm < sysdate
 and (ie.d1_removal_dttm is null or ie.d1_removal_dttm >= sysdate)
inner join d1_measr_comp mc
 on mc.device_config_id = dc.device_config_id
inner join d1_measr_comp_type mct
 on mct.measr_comp_type_cd = mc.measr_comp_type_cd
 and hrs_wait_before_est > 0
where (to_date(nvl(:processDateTime,sysdate),'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm) * 24 > mct.hrs_wait_before_est
group by threads.thread_nbr
, threads.low_Id
, threads.high_id
, nvl(mc.adj_latest_msrmt_dttm,mc.latest_msrmt_dttm)
order by 1, 4
;