Baza danych -11g wprowadziła nową funkcję gromadzenia statystyk przyrostowych
— Statystyki przyrostowe będą działać tylko dla tabel podzielonych na partycje, w których statystyki globalne są aktualizowane przyrostowo poprzez skanowanie tylko partycji, które uległy zmianie od ostatniego uruchomienia. Generalnie najnowsze partycje to te, do których wstawiane są dane i w większości starsze partycje pozostają nienaruszone. Po włączeniu statystyk przyrostowych w tabeli, statystyki są gromadzone tylko na tych partycjach, na których znajdują się jakiekolwiek DML, pozostałe nie są skanowane, co pozwoliłoby zaoszczędzić dużo czasu.
– Tabele podzielone na partycje są duże i jeśli musimy regularnie gromadzić statystyki na ten temat, byłoby to bardzo czasochłonne, a przyrostowe zbieranie statystyk skraca czas potrzebny na zbieranie statystyk
Przykład funkcji przyrostowego gromadzenia statystyk Oracle 11g w pakiecie Oracle E-Business Suite.
Weźmy przykład xla_ae_lines, który jest tabelą partycji i ma wiele rekordów w intensywnie używanej instancji ERP
Przypadek testowy bez ustawiania preferencji przyrostowych
-Utwórz tabelę xla_ae_lines_bkp jako tabelę partycji, aby wykonać ten przypadek testowy
– Wstaw dane z tabeli xla_ae_lines
wstaw w xla.xla_Ae_lines_bkp wybierz * z xla.xla_ae_lines;
Utworzono 2119409 wierszy. |
-ustaw czas na synchronizację
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP'); Procedura PL/SQL zakończona pomyślnie. Upłynął:00:00:49.06 |
- Zbieranie statystyk po raz pierwszy po wstawieniu danych zajęło 49,06 s.
- Sprawdź statystyki oraz poziom globalny i partycji
wybierz table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed” z dba_Tables, gdzie table_name jak „XLA_AE_LINES_BKP”;
TABLE_NAME ostatnie_analizowane —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:04:34
wybierz nazwę_partycji,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed” z dba_Tab_partitions gdzie nazwa_tabeli jak „XLA_AE_LINES_BKP”; PARTITION_NAME ostatnia_analiza —————————— ———————— AP 09-września-16 10:04:15 CZ 09-WRZEŚ-16 10:04:16 CE 09-września-16 10:04:16 CST 09-SEP-16 10:04:23 DPP 09-SEP-16 10:04:23 ZABAWA 09-WRZEŚ-16 10:04:23 FV 09-września-16 10:04:23 GMF 09-września-16 10:04:23 IGC 09-września-16 10:04:23 IGI 09-września-16 10:04:23 LNS 09-SEP-16 10:04:23 OFA 09-WRZEŚ-16 10:04:23 OKL 09-WRZ-16 10:04:23 OZF 09-SEP-16 10:04:23 PA 09-wrzesień-16 10:04:24
|
- Usuń dane z jednej z partycji, aby sprawdzić, jak obliczane są statystyki
usuń z xla.xla_ae_lines_bkp gdzie application_id=222; |
- Zbieranie statystyk przy użyciu fnd_Stats
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
Procedura PL/SQL zakończona pomyślnie.
Upłynął:00:00:25.06 - Po usunięciu danych zbieraj statystyki bez ustawiania preferencji. Zajęło to 25,06 s
- Sprawdzanie statystyk globalnych i statystyk partycji
wybierz table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed” z dba_Tables, gdzie table_name jak „XLA_AE_LINES_BKP”;
TABLE_NAME ostatnio_analizowane —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:20:26 wybierz nazwę_partycji,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed” z dba_Tab_partitions gdzie nazwa_tabeli jak „XLA_AE_LINES_BKP”; PARTITION_NAME ostatnio_analizowane —————————— ———————— AP 09-września-16 10:20:14 RR 09-WRZ-16 10:20:14 CE 09-września-16 10:20:14 CST 09-SEP-16 10:20:15 DPP 09-SEP-16 10:20:15 ZABAWA 09.09.16 10:20:15 FV 09-WRZEŚ 16 10:20:15 GMF 09-września-16 10:20:15 IGC 09-września-16 10:20:15 IGI 09-SEP-16 10:20:15 LNS 09-SEP-16 10:20:16 OFA 09-WRZ-16 10:20:16 OKL 09-WRZ-16 10:20:16 OZF 09-SEP-16 10:20:16 PA 09-wrzesień-16 10:20:17
|
UWAGA:statystyki są gromadzone na wszystkich partycjach, mimo że usuwane są tylko dane partycji AR, last_analyzed jest aktualizowane dla wszystkich partycji
Przypadek testowy z ustawieniem preferencji przyrostowej
- Upuść i ponownie utwórz tabelę xla_ae_lines_bkp jako tabelę partycji, aby wykonać ten przypadek testowy
- Wstaw dane z tabeli xla_ae_lines
wstaw w xla.xla_Ae_lines_bkp wybierz * z xla.xla_ae_lines;
Utworzono 2119409 wierszy. |
-ustaw czas na synchronizację
exec dbms_stats.set_table_prefs („XLA”, „XLA_AE_LINES_BKP”, „INCREMENTAL”, „TRUE”); |
- Sprawdź, czy preferencje są ustawione
wybierz dbms_stats.get_prefs („INCREMENTAL”, „XLA”, „XLA_AE_LINES_BKP”) z podwójnego;
DBMS_STATS.GET_PREFS('WZROST','XLA','XLA_AE_LINES_BKP') ————————————————————— PRAWDA |
- Zbierz statystyki po ustawieniu preferencji.
exec fnd_stats.gather_table_stats(„XLA”, „XLA_AE_LINES_BKP”);
Procedura PL/SQL zakończona pomyślnie. Upłynęło:00:00:25.91 |
- Po ustawieniu preferencji zebranie statystyk po raz pierwszy po wstawieniu danych zajęło 25,91 s
- sprawdzanie informacji o czasie w statystykach
wybierz table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed” z dba_Tables, gdzie table_name jak „XLA_AE_LINES_BKP”;
TABLE_NAME ostatnio_analizowane —————————— ———————— XLA_AE_LINES_BKP 09-września-16 10:35:32 wybierz nazwę_partycji,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed” z dba_Tab_partitions gdzie nazwa_tabeli jak „XLA_AE_LINES_BKP”; 18
PARTITION_NAME ostatnio_analizowane —————————— ———————— AP 09-września-16 10:35:30 RR 09-WRZ-16 10:35:12 CE 09-WRZEŚ-16 10:35:10 CST 09-SEP-16 10:35:21 DPP 09-SEP-16 10:35:21 ZABAWA 09-WRZ-16 10:35:12 FV 09-SEP-16 10:35:10 GMF 09-września-16 10:35:10 IGC 09-września-16 10:35:10 IGI 09-SEP-16 10:35:12 LNS 09-WRZ-16 10:35:10 OFA 09-WRZ-16 10:35:10 OKL 09-WRZ-16 10:35:12 OZF 09-SEP-16 10:35:30 PA 09-wrzesień-16 10:35:12
|
- Usunięcie danych z jednej partycji, aby zobaczyć, jak przyrostowe zbieranie statystyk pomoże następnym razem, gdy statystyki będą gromadzone.
usuń z xla_ae_lines_bkp gdzie application_id=222;
Usunięto 100233 wierszy |
- Zbierz statystyki po usunięciu danych z application_id 222 partycji AR
exec fnd_stats.gather_table_stats(„XLA”, „XLA_AE_LINES_BKP”);
Procedura PL/SQL zakończona pomyślnie. Upłynęło:00:00:4.11 |
- Po usunięciu danych dla jednej partycji przyrostowe gromadzenie statystyk zajęło 4,11 s
- Sprawdź statystyki globalne i partycji
wybierz table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed” z dba_Tables, gdzie table_name jak „XLA_AE_LINES_BKP”;
TABLE_NAME ostatnio_analizowane —————————— ———————— XLA_AE_LINES_BKP 09-SEP-16 10:45:18 wybierz nazwę_partycji,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed” z dba_Tab_partitions gdzie ta ble_name jak „XLA_AE_LINES_BKP”; PARTITION_NAME ostatnio_analizowane —————————— ———————— AP 09-września-16 10:35 :30 RR 09-WRZEŚ-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 ZABAWA 09-WRZ-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-WRZEŚ 16 10:35 :10 OKL 09-WRZ-16 10:35 :12 OZF 09-SEP-16 10:35 :30 PA 09-wrzesień-16 10:35 :12
|
Ważne rzeczy, o których należy pamiętać, statystyki są gromadzone, data last_analyzed jest zmieniana tylko dla partycji AR, a czas został również skrócony.
Widzimy więc, że przyrostowe zbieranie statystyk skraca czas zbierania statystyk i może być całkiem korzystne w przypadku dużych tabel partycji.