sql >> Database teknologi >  >> RDS >> Oracle

Inkrementel statistik indsamling i 11g

-11g-databasen har introduceret den inkrementelle statistik, der samler ny funktion

-Inkrementelle statistikker vil kun virke for partitionerede tabeller, hvor globale statistikker opdateres trinvist ved kun at scanne de partitioner, der er ændret fra sidste kørsel. Generelt er de seneste partitioner dem, hvor data er indsat, og for det meste forbliver de ældre partitioner uberørte. Med aktivering af inkrementel statistik på en tabel, indsamles der kun statistik på de partitioner, hvor der er nogen DML'er på den, de resterende scannes ikke, hvilket ville spare en masse tid.

-Opdelte tabeller er store, og hvis vi har brug for regelmæssigt at indsamle statistik om dette, ville det være meget tidskrævende  og  Inkrementel statistikindsamling reducerer den tid, det tager at indsamle statistik

Eksempel på Oracle 11g inkrementel statistikindsamlingsfunktion i Oracle E-Business Suite.

Lad os tage eksemplet med xla_ae_lines, som er en partitionstabel, og den har mange poster i tungt brugt ERP-instans

Testsag uden at angive trinvis præference

-Opret en tabel xla_ae_lines_bkp som en partitionstabel for at udføre denne testcase
– Indsæt data fra tabellen xla_ae_lines

indsæt i xla.xla_Ae_lines_bkp vælg * fra xla.xla_ae_lines;

2119409 rækker oprettet.

-indstil tid på timing til

exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
PL/SQL-procedure gennemført.
Forløbet:00:00:49.06
  • Det tog 49,06 sekunder at indsamle statistik for første gang efter dataindsættelse.
  • Tjek statistikken og det globale niveau og partitionsniveau
vælg tabelnavn,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" fra dba_Tables, hvor tabelnavn som 'XLA_AE_LINES_BKP';

TABLE_NAME           sidst_analyseret

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

XLA_AE_LINES_BKP 09-SEP-16 10:04:34

vælg partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" fra dba_Tab_partitions, hvor tabelnavn som 'XLA_AE_LINES_BKP';

PARTITION_NAME       sidst_analyseret

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

AP 09-SEP-16 10:04:15

AR 09-SEP-16 10:04:16

CE 09-SEP-16 10:04:16

CST 09-SEP-16 10:04:23

DPP 09-SEP-16 10:04:23

SJOV 09-SEP-16 10:04:23

FV 09-SEP-16 10:04:23

GMF 09-SEP-16 10:04:23

IGC 09-SEP-16 10:04:23

IGI 09-SEP-16 10:04:23

LNS 09-SEP-16 10:04:23

OFA 09-SEP-16 10:04:23

OKL 09-SEP-16 10:04:23

OZF 09-SEP-16 10:04:23

PA 09-SEP-16 10:04:24

  • Slet dataene fra en af ​​partitionerne for at kontrollere, hvordan statistik beregnes
slet fra xla.xla_ae_lines_bkp hvor application_id=222;
  • Indsamlingsstatistik usign fnd_Stats
    exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
    PL/SQL-proceduren er gennemført.
    Forløbet:00:00:25.06
  • Efter sletning af dataene kørte indsamle statistik uden at angive præferencen. Det tog 25,06 sek
  • Tjek global statistik og partitionsstatistik
vælg tabelnavn,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" fra dba_Tables, hvor tabelnavn som 'XLA_AE_LINES_BKP';

TABLE_NAME sidst_analyserede

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

XLA_AE_LINES_BKP 09-SEP-16 10:20:26

vælg partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" fra dba_Tab_partitions, hvor tabelnavn som 'XLA_AE_LINES_BKP';

PARTITION_NAME sidst_analyserede

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

AP 09-SEP-16  10:20:14

AR 09-SEP-16  10:20:14

CE 09-SEP-16  10:20:14

CST 09-SEP-16  10:20:15

DPP 09-SEP-16  10:20:15

SJOV 09-SEP-16  10:20:15

FV 09-SEP-16  10:20:15

GMF 09-SEP-16  10:20:15

IGC 09-SEP-16  10:20:15

IGI 09-SEP-16  10:20:15

LNS 09-SEP-16  10:20:16

OFA 09-SEP-16  10:20:16

OKL 09-SEP-16  10:20:16

OZF 09-SEP-16  10:20:16

PA 09-SEP-16  10:20:17

BEMÆRK:statistik indsamles på alle partitionerne, selvom kun AR-paritionsdata slettes, last_analyzed opdateres for alle partitionerne

Testcase med indstilling af trinvis præference

  • Slip og genskab tabellen xla_ae_lines_bkp som en partitionstabel for at udføre denne testcase

  • Indsæt data fra tabellen xla_ae_lines

indsæt i xla.xla_Ae_lines_bkp vælg * fra xla.xla_ae_lines;

2119409 rækker oprettet.

-indstil tid på timing til

exec dbms_stats.set_table_prefs('XLA','XLA_AE_LINES_BKP','INCREMENTAL','TRUE');
  • Tjek, om præferencen er angivet
vælg dbms_stats.get_prefs('INCREMENTAL','XLA','XLA_AE_LINES_BKP') fra dual;

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

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

SAND

  • Samle statistik efter at have angivet præferencen.
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');

PL/SQL-proceduren er gennemført.

Forløbet:00:00:25.91

  • Efter at have indstillet præferencen tog det 25,91 sek. at indsamle statistik for første gang efter dataindsættelse
  • kontrol af statistik timing oplysninger
vælg tabelnavn,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" fra dba_Tables, hvor tabelnavn som 'XLA_AE_LINES_BKP';

TABLE_NAME sidst_analyserede

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

XLA_AE_LINES_BKP              09-SEP-16  10:35:32

vælg partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" fra dba_Tab_partitions, hvor tabelnavn som 'XLA_AE_LINES_BKP';

18

PARTITION_NAME sidst_analyserede

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

AP 09-SEP-16  10:35:30

AR 09-SEP-16  10:35:12

CE 09-SEP-16  10:35:10

CST 09-SEP-16  10:35:21

DPP 09-SEP-16  10:35:21

SJOV 09-SEP-16  10:35:12

FV 09-SEP-16  10:35:10

GMF 09-SEP-16  10:35:10

IGC 09-SEP-16  10:35:10

IGI 09-SEP-16  10:35:12

LNS 09-SEP-16  10:35:10

OFA 09-SEP-16  10:35:10

OKL 09-SEP-16  10:35:12

OZF 09-SEP-16  10:35:30

PA 09-SEP-16  10:35:12

  • Sletning af data fra én partition for at se, hvordan trinvis statistikindsamling vil hjælpe næste gang, når der indsamles statistik.
slet fra xla_ae_lines_bkp hvor application_id=222;

100233 rækker slettet

  • Samle statistik efter sletning af data fra application_id 222 partition AR
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');

PL/SQL-proceduren er gennemført.

Forløbet:00:00:4.11

  • Efter sletning af data for én partition tog trinvis indsamling af statistik 4,11 sek.
  • Tjek global statistik og partitionsstatistikker
vælg tabelnavn,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" fra dba_Tables, hvor tabelnavn som 'XLA_AE_LINES_BKP';

TABLE_NAME sidst_analyserede

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

XLA_AE_LINES_BKP 09-SEP-16  10:45:18

vælg partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" fra dba_Tab_partitions hvor ta

ble_navn som 'XLA_AE_LINES_BKP';

PARTITION_NAME sidst_analyserede

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

AP 09-SEP-16  10:35 :30

AR 09-SEP-16  10:45:18

CE 09-SEP-16  10:35 :10

CST 09-SEP-16  10:35 :21

DPP 09-SEP-16  10:35 :21

SJOV 09-SEP-16  10:35 :12

FV 09-SEP-16  10:35 :10

GMF 09-SEP-16  10:35 :10

IGC 09-SEP-16  10:35 :10

IGI 09-SEP-16  10:35 :12

LNS 09-SEP-16  10:35 :10

OFA 09-SEP-16  10:35 :10

OKL 09-SEP-16  10:35 :12

OZF 09-SEP-16  10:35 :30

PA 09-SEP-16  10:35 :12

Vigtige ting at bemærke, statistik indsamles, sidste_analyserede dato er ændret for kun AR-partition, og timingen er også reduceret.

Så vi ser, at Incremental Statistics Gathering reducerer timingen for indsamling af statistik, og det kan være ret fordelagtigt for store partitionstabeller.


  1. Ydeevne af tabelvariabler i SQL Server

  2. SSIS-pakken ønsker ikke at hente metadata fra den midlertidige tabel

  3. PostgreSQL-replikeringsopsætning og vedligeholdelse ved hjælp af Ansible

  4. SQL Server-understøttede versioner Matrix