Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Coleta de Estatísticas Incrementais em 11g


O banco de dados -11g introduziu o novo recurso de coleta de estatísticas incrementais

-As estatísticas incrementais funcionarão apenas para tabelas particionadas onde as estatísticas globais são atualizadas incrementalmente verificando apenas as partições que foram alteradas desde a última execução. Geralmente, as partições mais recentes são aquelas em que os dados são inseridos e, principalmente, as partições mais antigas permanecem intocadas. Com a habilitação de estatísticas incrementais em uma tabela, somente nessas partições as estatísticas são coletadas onde há DMLs nela, as restantes não são verificadas, o que economizaria muito tempo.

-As tabelas particionadas são grandes e se precisarmos coletar estatísticas regularmente sobre isso, seria muito demorado  e  A coleta incremental de estatísticas reduz o tempo necessário para coletar estatísticas

Exemplo do recurso Oracle 11g incremental Statistics Gathering no Oracle E-Business Suite.

Vamos pegar o exemplo de xla_ae_lines que é uma tabela de partição e está tendo muitos registros em instância de ERP de uso pesado

Caso de teste sem definir preferência incremental

-Criar uma tabela xla_ae_lines_bkp como uma tabela de partição para realizar este caso de teste
– Inserir dados da tabela xla_ae_lines
insira em xla.xla_Ae_lines_bkp selecione * de xla.xla_ae_lines;


2119409 linhas criadas.

-defina o tempo no tempo em
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
Procedimento PL/SQL concluído com sucesso.
Decorrido:00:00:49.06
  • Levou 49,06 segundos para reunir as estatísticas pela primeira vez após a inserção dos dados.
  • Verifique as estatísticas e o nível global e de partição
selecione table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tables onde table_name like 'XLA_AE_LINES_BKP';


TABLE_NAME           last_analyzed

——————————————————

XLA_AE_LINES_BKP 09-SET-16 10:04:34



selecione partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tab_partitions onde table_name like 'XLA_AE_LINES_BKP';

PARTITION_NAME       last_analisado

——————————————————

AP 09-SET-16 10:04:15

AR 09-SET-16 10:04:16

CE 09-SET-16 10:04:16

CST 09-SET-16 10:04:23

DPP 09-SET-16 10:04:23

DIVERSÃO 09-SET-16 10:04:23

FV 09-SET-16 10:04:23

GMF 09-SET-16 10:04:23

IGC 09-SET-16 10:04:23

IGI 09-SET-16 10:04:23

LNS 09-SET-16 10:04:23

OFA 09-SET-16 10:04:23

OKL 09-SET-16 10:04:23

OZF 09-SET-16 10:04:23

PA 09-SET-16 10:04:24


  • Exclua os dados de uma das partições para verificar como as estatísticas estão sendo calculadas
excluir de xla.xla_ae_lines_bkp onde application_id=222;
  • Reunindo estatísticas usign fnd_Stats
    exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
    Procedimento PL/SQL concluído com sucesso.
    Decorrido:00:00:25.06
  • Depois de excluir os dados, colete estatísticas sem definir a preferência. Demorou 25,06 segundos
  • Verificando estatísticas globais e estatísticas de partição
selecione table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tables onde table_name like 'XLA_AE_LINES_BKP';


TABLE_NAME last_analisado

——————————————————

XLA_AE_LINES_BKP 09-SET-16 10:20:26

selecione partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tab_partitions onde table_name like 'XLA_AE_LINES_BKP';

PARTITION_NAME last_analisado

——————————————————

AP 09-SET-16  10:20:14

AR 09-SET-16  10:20:14

CE 09-SET-16  10:20:14

CST 09-SET-16  10:20:15

DPP 09-SET-16  10:20:15

DIVERSÃO 09-SET-16  10:20:15

FV 09-SET-16  10:20:15

GMF 09-SET-16  10:20:15

CIG 09-SET-16  10:20:15

IGI 09-SET-16  10:20:15

LNS 09-SET-16  10:20:16

OFA 09-SET-16  10:20:16

OKL 09-SET-16  10:20:16

OZF 09-SET-16  10:20:16

PA 09-SET-16  10:20:17



NOTA:as estatísticas são coletadas em todas as partições, mesmo que apenas os dados de partição AR sejam excluídos, last_analyzed é atualizado para todas as partições

Caso de teste com configuração de preferência incremental
  • Solte e recrie a tabela xla_ae_lines_bkp como uma tabela de partição para realizar este caso de teste

  • Inserir dados da tabela xla_ae_lines

insira em xla.xla_Ae_lines_bkp selecione * de xla.xla_ae_lines;


2119409 linhas criadas.

-defina o tempo no tempo em
exec dbms_stats.set_table_prefs('XLA','XLA_AE_LINES_BKP','INCREMENTAL','TRUE');
  • Verifique se a preferência está definida
selecione dbms_stats.get_prefs('INCREMENTAL','XLA','XLA_AE_LINES_BKP') de dual;


DBMS_STATS.GET_PREFS('INCREMENTAL','XLA','XLA_AE_LINES_BKP')

————————————————————

VERDADE
  • Reúna estatísticas após definir a preferência.
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');


Procedimento PL/SQL concluído com sucesso.

Decorrido:00:00:25.91
  • Depois de definir a preferência, levou 25,91 segundos para reunir estatísticas pela primeira vez após a inserção de dados
  • verificação das informações de tempo das estatísticas
selecione table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tables onde table_name like 'XLA_AE_LINES_BKP';


TABLE_NAME last_analisado

——————————   ————————

XLA_AE_LINES_BKP              09-SET-16  10:35:32

selecione partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tab_partitions onde table_name like 'XLA_AE_LINES_BKP';

18





PARTITION_NAME last_analisado

——————————————————

AP 09-SET-16  10:35:30

AR 09-SET-16  10:35:12

CE 09-SET-16  10:35:10

CST 09-SET-16  10:35:21

DPP 09-SET-16  10:35:21

DIVERSÃO 09-SET-16  10:35:12

FV 09-SET-16  10:35:10

GMF 09-SET-16  10:35:10

CIG 09-SET-16  10:35:10

IGI 09-SET-16  10:35:12

LNS 09-SET-16  10:35:10

OFA 09-SET-16  10:35:10

OKL 09-SET-16  10:35:12

OZF 09-SET-16  10:35:30

PA 09-SET-16  10:35:12


  • Excluir os dados de uma partição para ver como a coleta incremental de estatísticas ajudará na próxima vez que as estatísticas forem coletadas.
excluir de xla_ae_lines_bkp onde application_id=222;


100233 linhas excluídas
  • Reúna estatísticas após excluir dados da partição application_id 222 AR
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');


Procedimento PL/SQL concluído com sucesso.

Decorrido:00:00:4.11
  • Depois de excluir os dados de uma partição, a coleta incremental de estatísticas levou 4,11 segundos
  • Verifique as estatísticas globais e de partição
selecione table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" de dba_Tables onde table_name like 'XLA_AE_LINES_BKP';


TABLE_NAME last_analisado

——————————————————

XLA_AE_LINES_BKP 09-SET-16  10:45:18

selecione partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) “last_analyzed” de dba_Tab_partitions onde ta

ble_name como ‘XLA_AE_LINES_BKP’;

PARTITION_NAME last_analisado

——————————————————

AP 09-SET-16  10:35 :30

AR 09-SET-16  10:45:18

CE 09-SET-16  10:35 :10

CST 09-SET-16  10:35 :21

DPP 09-SET-16  10:35 :21

DIVERSÃO 09-SET-16  10:35 :12

FV 09-SET-16  10:35 :10

GMF 09-SET-16  10:35 :10

CIG 09-SET-16  10:35 :10

IGI 09-SET-16  10:35 :12

LNS 09-SET-16  10:35 :10

OFA 09-SET-16  10:35 :10

OKL 09-SET-16  10:35 :12

OZF 09-SET-16  10:35 :30

PA 09-SET-16  10:35 :12



Coisas importantes a serem observadas, as estatísticas são coletadas, a data last_analyzed é alterada apenas para a partição AR e o tempo também foi reduzido.

Portanto, vemos que a coleta incremental de estatísticas reduz o tempo de coleta de estatísticas e pode ser bastante benéfica para tabelas de partição grandes.