Testando a Estimativa Periódica em Conjuntos de Dados Grandes
Este tópico fornece diretrizes para testar estimativas periódicas em grandes conjuntos de dados.
Antes de executar a estimativa periódica em um conjunto de dados grande, é importante ter uma ideia de aproximadamente quantos dispositivos e por quanto tempo você espera estimar. Isso pode ser medido de forma bastante rápida, observando a Data/Hora da Última Medição no componente de medição. Esta é uma consulta de amostra que fornecerá uma contagem de componentes de medição pelo número de meses a partir de uma data de processo fornecida. A data/hora da última medição contígua é:
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
;
A seguir, há uma consulta mais complexa que mostrará por thread quantos componentes de medição para uma determinada Data/Hora da Última Medição que você processará. Ela faz um pouco mais de trabalho para verificar apenas os dispositivos instalados e os componentes de medição configurados para estimativa periódica e o componente de medição está realmente pronto para estimar com base nessa configuração.
-
threads: digite 1 para evitar a divisão dos resultados em threads
-
processDateTime: deixe em branco para usar a data do sistema; caso contrário, forneça uma data/hora no formato: AAAA-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
;