-11g-database heeft de nieuwe functie voor het verzamelen van incrementele statistieken geïntroduceerd
-Incrementele statistieken werken alleen voor gepartitioneerde tabellen waar globale statistieken incrementeel worden bijgewerkt door alleen de partities te scannen die zijn gewijzigd sinds de laatste run. Over het algemeen zijn de nieuwste partities degene waar gegevens worden ingevoegd en meestal blijven de oudere partities onaangeroerd. Door incrementele statistieken voor een tabel in te schakelen, worden alleen op die partities statistieken verzameld waar er DML's op staan. De resterende statistieken worden niet gescand, wat veel tijd zou besparen.
-Gepartitioneerde tabellen zijn grote tabellen en als we hier regelmatig statistieken over moeten verzamelen, zou het erg tijdrovend zijn en incrementeel verzamelen van statistieken vermindert de tijd die nodig is om statistieken te verzamelen
Voorbeeld van Oracle 11g incrementele statistische verzameling van statistieken in Oracle E-Business Suite.
Laten we het voorbeeld nemen van xla_ae_lines, wat een partitietabel is en veel records heeft in een veelgebruikte ERP-instantie
Testcase zonder incrementele voorkeur in te stellen
-Maak een tabel xla_ae_lines_bkp als partitietabel om deze testcase uit te voeren
– Gegevens invoegen uit de xla_ae_lines-tabel
invoegen in xla.xla_Ae_lines_bkp selecteer * van xla.xla_ae_lines;
2119409 rijen gemaakt. |
-zet tijd op timing op
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP'); PL/SQL-procedure succesvol voltooid. Verstreken:00:00:49.06 |
- Het duurde 49,06 seconden om voor het eerst statistieken te verzamelen na het invoegen van gegevens.
- Controleer de statistieken en het globale en partitieniveau
select table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" van dba_Tables waarbij table_name zoals 'XLA_AE_LINES_BKP';
TABLE_NAME laatste_analyse —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:04:34
selecteer partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" van dba_Tab_partitions waar table_name zoals 'XLA_AE_LINES_BKP'; PARTITION_NAME laatst geanalyseerd —————————— ———————— 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 LEUK 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
|
- Verwijder de gegevens van een van de partities om te controleren hoe statistieken worden berekend
verwijder uit xla.xla_ae_lines_bkp waar application_id=222; |
- Statistieken verzamelen usign fnd_Stats
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
PL/SQL-procedure succesvol voltooid.
Verstreken:00:00:25.06 - Na het verwijderen van de gegevens werden statistieken verzameld zonder de voorkeur in te stellen. Het duurde 25,06 sec
- Algemene statistieken en partitiestatistieken controleren
select table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" van dba_Tables waarbij table_name zoals 'XLA_AE_LINES_BKP';
TABLE_NAME laatst_geanalyseerd —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:20:26 selecteer partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" van dba_Tab_partitions waar table_name zoals 'XLA_AE_LINES_BKP'; PARTITION_NAME laatst_geanalyseerd —————————— ———————— 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 LEUK 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
|
OPMERKING:er worden statistieken verzameld over alle partities, ook al worden alleen AR-partitiegegevens verwijderd, last_analyzed wordt bijgewerkt voor alle partities
Testcase met instelling van incrementele voorkeur
- Drop en maak de tabel xla_ae_lines_bkp opnieuw aan als een partitietabel om deze testcase uit te voeren
- Gegevens uit tabel xla_ae_lines invoegen
invoegen in xla.xla_Ae_lines_bkp selecteer * van xla.xla_ae_lines;
2119409 rijen gemaakt. |
-zet tijd op timing op
exec dbms_stats.set_table_prefs(‘XLA’,’XLA_AE_LINES_BKP’,’INCREMENTAL’,’TRUE’); |
- Controleer of de voorkeur is ingesteld
selecteer dbms_stats.get_prefs(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’) van dual;
DBMS_STATS.GET_PREFS(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’) ———————————————————— WAAR |
- Verzamel statistieken na het instellen van de voorkeur.
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);
PL/SQL-procedure succesvol afgerond. Verstreken:00:00:25.91 |
- Na het instellen van de voorkeur duurde het 25,91 sec om voor de eerste keer statistieken te verzamelen na het invoegen van gegevens
- tijdinformatie van statistieken controleren
select table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" van dba_Tables waarbij table_name zoals 'XLA_AE_LINES_BKP';
TABLE_NAME laatst_geanalyseerd —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:35:32 selecteer partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" van dba_Tab_partitions waar table_name zoals 'XLA_AE_LINES_BKP'; 18
PARTITION_NAME laatst_geanalyseerd —————————— ———————— 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 LEUK 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
|
- De gegevens van de ene partitie verwijderen om te zien hoe het verzamelen van incrementele statistieken de volgende keer helpt wanneer statistieken worden verzameld.
verwijderen uit xla_ae_lines_bkp waar application_id=222;
100233 rijen verwijderd |
- Verzamel statistieken na het verwijderen van gegevens van application_id 222 partitie AR
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);
PL/SQL-procedure succesvol afgerond. Verstreken:00:00:4.11 |
- Na het verwijderen van de gegevens voor één partitie duurde het incrementeel verzamelen van statistieken 4,11 sec
- Controleer globale en partitiestatistieken
select table_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" van dba_Tables waarbij table_name zoals 'XLA_AE_LINES_BKP';
TABLE_NAME laatst_geanalyseerd —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:45:18 selecteer partition_name,to_Char(last_analyzed,'DD-MON-YY HH24:MI:SS') "last_analyzed" van dba_Tab_partitions waar ta ble_name zoals 'XLA_AE_LINES_BKP'; PARTITION_NAME laatst_geanalyseerd —————————— ———————— 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 LEUK 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
|
Belangrijke dingen om op te merken: statistieken worden verzameld, de datum van de laatste analyse is gewijzigd voor alleen AR-partitie en de timing is ook verminderd.
We zien dus dat Incremental Statistics Gathering de timing voor het verzamelen van statistieken verkort en het kan heel gunstig zijn voor grote partitietabellen.