Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Inkrementelles Sammeln von Statistiken in 11g

-11g-Datenbank hat die neue Funktion zum Sammeln von inkrementellen Statistiken eingeführt

- Inkrementelle Statistiken funktionieren nur für partitionierte Tabellen, bei denen globale Statistiken inkrementell aktualisiert werden, indem nur die Partitionen gescannt werden, die sich seit der letzten Ausführung geändert haben. Im Allgemeinen sind die neuesten Partitionen diejenigen, in die Daten eingefügt werden, und die meisten älteren Partitionen bleiben unberührt. Wenn Sie inkrementelle Statistiken für eine Tabelle aktivieren, werden nur auf den Partitionen Statistiken gesammelt, auf denen sich DMLs befinden, die restlichen werden nicht gescannt, was viel Zeit sparen würde.

- Partitionierte Tabellen sind große Tabellen, und wenn wir dazu regelmäßig Statistiken sammeln müssten, wäre dies sehr zeitaufwändig  und  das inkrementelle Sammeln von Statistiken reduziert die zum Sammeln von Statistiken erforderliche Zeit

Beispiel für die inkrementelle Statistikerfassungsfunktion von Oracle 11g in Oracle E-Business Suite.

Nehmen wir das Beispiel von xla_ae_lines, einer Partitionstabelle mit vielen Datensätzen in einer stark genutzten ERP-Instanz

Testfall ohne inkrementelle Einstellung

-Erstellen Sie eine Tabelle xla_ae_lines_bkp als Partitionstabelle, um diesen Testfall durchzuführen
– Fügen Sie Daten aus der Tabelle xla_ae_lines_bkp ein

insert in xla.xla_Ae_lines_bkp select * from xla.xla_ae_lines;

2119409 Zeilen erstellt.

-Zeit auf Timing setzen

exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
PL/SQL-Prozedur erfolgreich abgeschlossen.
Verstrichen:00:00:49.06
  • Es dauerte 49,06 Sekunden, bis nach dem Einfügen der Daten zum ersten Mal Statistiken erfasst wurden.
  • Überprüfen Sie die Statistiken und die globale und Partitionsebene
select table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ from dba_Tables where table_name like ‘XLA_AE_LINES_BKP’;

TABLE_NAME           zuletzt_analysiert

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

XLA_AE_LINES_BKP 09.09.16 10:04:34

select partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) “last_analyzed” from dba_Tab_partitions where table_name like ‘XLA_AE_LINES_BKP’;

PARTITION_NAME       last_analyzed

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

AP 09.09.16 10:04:15

AR 09-SEP-16 10:04:16

CE 09-SEP-16 10:04:16

CST 09.09.16 10:04:23

DPP 09-SEP-16 10:04:23

SPASS 09.09.16 10:04:23

FV 09-SEP-16 10:04:23

GMF 09.09.16 10:04:23

Regierungskonferenz 09.09.16 10:04:23

IGI 09-SEP-16 10:04:23

LNS 09-SEP-16 10:04:23

OFA 09.09.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

  • Löschen Sie die Daten aus einer der Partitionen, um zu prüfen, wie Statistiken berechnet werden
löschen von xla.xla_ae_lines_bkp wo application_id=222;
  • Sammeln von Statistiken mit fnd_Stats
    exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
    PL/SQL-Prozedur erfolgreich abgeschlossen.
    Verstrichen:00:00:25.06
  • Nach dem Löschen der Daten liefen Statistiken, ohne die Einstellung festzulegen. Es dauerte 25,06 Sekunden
  • Überprüfen der globalen Statistiken und Partitionsstatistiken
select table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ from dba_Tables where table_name like ‘XLA_AE_LINES_BKP’;

TABLE_NAME zuletzt_analysiert

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

XLA_AE_LINES_BKP 09-SEP-16 10:20:26

select partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) “last_analyzed” from dba_Tab_partitions where table_name like ‘XLA_AE_LINES_BKP’;

PARTITION_NAME zuletzt_analysiert

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

AP 09.09.16  10:20:14

AR 09-SEP-16  10:20:14

CE 09.09.16  10:20:14

CST 09.09.16 10:20:15

DPP 09.09.16  10:20:15

SPASS 09.09.16  10:20:15

FV 09-SEP-16  10:20:15

GMF 09.09.16  10:20:15

Regierungskonferenz 09.09.16  10:20:15

IGI 09.09.16  10:20:15

LNS 09.09.16  10:20:16

OFA 09.09.16  10:20:16

OKL 09.09.16  10:20:16

OZF 09.09.16  10:20:16

PA 09.09.16  10:20:17

HINWEIS:Statistiken werden auf allen Partitionen gesammelt, obwohl nur AR-Partitionsdaten gelöscht werden, last_analyzed wird für alle Partitionen aktualisiert

Testfall mit Einstellung inkrementeller Präferenz

  • Lassen Sie die Tabelle xla_ae_lines_bkp fallen und erstellen Sie sie neu als Partitionstabelle, um diesen Testfall durchzuführen

  • Daten aus Tabelle xla_ae_lines einfügen

insert in xla.xla_Ae_lines_bkp select * from xla.xla_ae_lines;

2119409 Zeilen erstellt.

-Zeit auf Timing setzen

exec dbms_stats.set_table_prefs(‘XLA’,’XLA_AE_LINES_BKP’,’INCREMENTAL’,’TRUE’);
  • Prüfen Sie, ob die Einstellung gesetzt ist
select dbms_stats.get_prefs(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’) from dual;

DBMS_STATS.GET_PREFS(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’)

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

WAHR

  • Sammeln Sie Statistiken, nachdem Sie die Einstellung festgelegt haben.
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);

PL/SQL-Prozedur erfolgreich abgeschlossen.

Verstrichen:00:00:25.91

  • Nach dem Festlegen der Einstellung dauerte es 25,91 Sekunden, bis zum ersten Mal nach dem Einfügen der Daten Statistiken erfasst wurden
  • Statistik-Timing-Informationen überprüfen
select table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ from dba_Tables where table_name like ‘XLA_AE_LINES_BKP’;

TABLE_NAME zuletzt_analysiert

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

XLA_AE_LINES_BKP              09-SEP-16  10:35:32

select partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) “last_analyzed” from dba_Tab_partitions where table_name like ‘XLA_AE_LINES_BKP’;

18

PARTITION_NAME zuletzt_analysiert

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

AP 09.09.16  10:35:30

AR 09-SEP-16  10:35:12

CE 09.09.16  10:35:10

CST 09.09.16  10:35:21

DPP 09.09.16  10:35:21

SPASS 09. SEPTEMBER 16  10:35:12

FV 09-SEP-16  10:35:10

GMF 09.09.16  10:35:10

Regierungskonferenz 09.09.16  10:35:10

IGI 09.09.16  10:35:12

LNS 09.09.16  10:35:10

OFA 09.09.16  10:35:10

OKL 09.09.16  10:35:12

OZF 09.09.16  10:35:30

PA 09.09.16  10:35:12

  • Löschen der Daten von einer Partition, um zu sehen, wie das Sammeln inkrementeller Statistiken beim nächsten Mal helfen wird, wenn Statistiken gesammelt werden.
löschen von xla_ae_lines_bkp wo application_id=222;

100233 Zeilen gelöscht

  • Sammeln Sie Statistiken nach dem Löschen von Daten aus der Anwendungs-ID 222 Partition AR
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);

PL/SQL-Prozedur erfolgreich abgeschlossen.

Verstrichen:00:00:4.11

  • Nach dem Löschen der Daten für eine Partition dauerte das inkrementelle Sammeln von Statistiken 4,11 Sekunden
  • Überprüfen Sie globale und Partitionsstatistiken
select table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ from dba_Tables where table_name like ‘XLA_AE_LINES_BKP’;

TABLE_NAME zuletzt_analysiert

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

XLA_AE_LINES_BKP 09.09.16  10:45:18

select partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ from dba_Tab_partitions where ta

ble_name wie „XLA_AE_LINES_BKP“;

PARTITION_NAME zuletzt_analysiert

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

AP 09.09.16 10:35:30

AR 09-SEP-16  10:45:18

CE 09-SEP-16  10:35 :10

CST 09.09.16 10:35:21

DPP 09-SEP-16  10:35 :21

SPASS 09. SEPTEMBER 16  10:35 :12

FV 09-SEP-16  10:35 :10

GMF 09-SEP-16  10:35 :10

Regierungskonferenz 09. September 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

Wichtige Dinge, die zu beachten sind, Statistiken werden gesammelt, das Datum der letzten_Analyse wurde nur für die AR-Partition geändert und das Timing wurde ebenfalls verkürzt.

Wir sehen also, dass das inkrementelle Sammeln von Statistiken den Zeitaufwand für das Sammeln von Statistiken reduziert und für große Partitionstabellen sehr vorteilhaft sein kann.