sql >> Databasteknik >  >> RDS >> Oracle

Inkrementell statistik insamling i 11g

-11g-databasen har introducerat inkrementell statistik som samlar in ny funktion

-Inkrementell statistik fungerar endast för partitionerade tabeller där global statistik uppdateras inkrementellt genom att endast skanna de partitioner som har ändrats från den senaste körningen. Generellt sett är de senaste partitionerna de där data infogas och oftast förblir de äldre partitionerna orörda. Med aktivering av inkrementell statistik på en tabell samlas bara statistik in på de partitioner där det finns några DML:er på den, återstående skannas inte vilket skulle spara mycket tid.

-Partitionerade tabeller är stora och om vi behöver samla in statistik om detta regelbundet skulle det vara mycket tidskrävande  och  Inkrementell statistikinsamling minskar tiden som krävs för att samla in statistik

Exempel på Oracle 11g inkrementell statistikinsamlingsfunktion i Oracle E-Business Suite.

Låt oss ta exemplet med xla_ae_lines som är en partitionstabell och den har många poster i tungt använda ERP-instanser

Testfall utan att ange inkrementella preferenser

-Skapa en tabell xla_ae_lines_bkp som en partitionstabell för att utföra detta testfall
– Infoga data från tabellen xla_ae_lines

infoga i xla.xla_Ae_lines_bkp välj * från xla.xla_ae_lines;

2119409 rader skapade.

-ställ tid på tidtagning på

exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
PL/SQL-proceduren har slutförts.
Förfluten:00:00:49.06
  • Det tog 49,06 sekunder att samla in statistik för första gången efter datainfogning.
  • Kontrollera statistiken och global nivå och partitionsnivå
välj tabellnamn,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" från dba_Tables där tabellnamn som 'XLA_AE_LINES_BKP';

TABLE_NAME           senast_analyserade

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

XLA_AE_LINES_BKP 09-SEP-16 10:04:34

välj partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" från dba_Tab_partitions där tabellnamn som 'XLA_AE_LINES_BKP';

PARTITION_NAME       senast_analyserade

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

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

ROLIGT 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

  • Ta bort data från en av partitionerna för att kontrollera hur statistiken beräknas
ta bort från xla.xla_ae_lines_bkp där application_id=222;
  • Insamling av statistik usign fnd_Stats
    exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
    PL/SQL-proceduren har slutförts.
    Förfluten:00:00:25.06
  • Efter att ha raderat data kördes insamling av statistik utan att ange inställning. Det tog 25,06 sek
  • Kontrollera global statistik och partitionsstatistik
välj tabellnamn,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" från dba_Tables där tabellnamn som 'XLA_AE_LINES_BKP';

TABLE_NAME senast_analyserade

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

XLA_AE_LINES_BKP 09-SEP-16 10:20:26

välj partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" från dba_Tab_partitions där tabellnamn som 'XLA_AE_LINES_BKP';

PARTITION_NAME senast_analyserade

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

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

ROLIGT 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

OBS:statistik samlas in på alla partitioner även om endast AR-paritionsdata raderas, last_analyzed uppdateras för alla partitioner

Testfall med inkrementella inställningar

  • Släpp och återskapa tabellen xla_ae_lines_bkp som en partitionstabell för att utföra detta testfall

  • Infoga data från tabellen xla_ae_lines

infoga i xla.xla_Ae_lines_bkp välj * från xla.xla_ae_lines;

2119409 rader skapade.

-ställ tid på tidtagning på

exec dbms_stats.set_table_prefs('XLA','XLA_AE_LINES_BKP','INCREMENTAL','TRUE');
  • Kontrollera om inställningen är inställd
välj dbms_stats.get_prefs(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’) från dual;

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

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

SANT

  • Samla statistik efter att ha ställt in inställningen.
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);

PL/SQL-proceduren har slutförts.

Förfluten:00:00:25.91

  • Efter att ha ställt in inställningen tog det 25,91 sekunder att samla in statistik för första gången efter datainfogning
  • kontrollera statistikens tidsinformation
välj tabellnamn,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" från dba_Tables där tabellnamn som 'XLA_AE_LINES_BKP';

TABLE_NAME senast_analyserade

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

XLA_AE_LINES_BKP              09-SEP-16  10:35:32

välj partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" från dba_Tab_partitions där tabellnamn som 'XLA_AE_LINES_BKP';

18

PARTITION_NAME senast_analyserade

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

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

ROLIGT 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

  • Ta bort data från en partition för att se hur inkrementell statistikinsamling kommer att hjälpa nästa gång statistik samlas in.
ta bort från xla_ae_lines_bkp där application_id=222;

100233 rader raderade

  • Samla statistik efter att ha raderat data från application_id 222 partition AR
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);

PL/SQL-proceduren har slutförts.

Förfluten:00:00:4.11

  • Efter att ha raderat data för en partition tog inkrementell insamling av statistik 4,11 sek
  • Kontrollera global statistik och partitionsstatistik
välj tabellnamn,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" från dba_Tables där tabellnamn som 'XLA_AE_LINES_BKP';

TABLE_NAME senast_analyserade

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

XLA_AE_LINES_BKP 09-SEP-16  10:45:18

välj partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) “last_analyzed” från dba_Tab_partitions där ta

ble_name som 'XLA_AE_LINES_BKP';

PARTITION_NAME senast_analyserade

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

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

ROLIGT 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

Viktiga saker att notera, statistik samlas in, datum för senaste_analys har ändrats för endast AR-partition och timingen har också minskat.

Så vi ser att inkrementell statistikinsamling minskar tidpunkten för insamling av statistik och det kan vara mycket fördelaktigt för stora partitionstabeller.


  1. Vilket är snabbast? VÄLJ SQL_CALC_FOUND_ROWS FRÅN "tabell", eller VÄLJ ANTAL(*)

  2. Hur konverterar man en bild till byte-array med hjälp av javascript endast för att lagra bilden på sql-servern?

  3. Beräkna nästa primärnyckel - av specifikt format

  4. Vad är PostgreSQL-motsvarigheten för ISNULL()