Базата данни -11g въведе новата функция за събиране на допълнителни статистики
- Инкременталните статистики ще работят само за разделени таблици, където глобалната статистика се актуализира постепенно чрез сканиране само на дяловете, които са се променили от последното изпълнение. Обикновено най-новите дялове са тези, в които се вмъкват данни и най-вече по-старите дялове остават недокоснати. С активиране на инкрементални статистически данни за таблица, само за онези дялове се събират статистически данни, където има някакви DML-ове, останалите не се сканират, което би спестило много време.
-Разделените таблици са големи и ако трябва редовно да събираме статистически данни за това, това би отнело много време а Постепенното събиране на статистически данни намалява времето, необходимо за събиране на статистически данни
Пример за функцията за поетапно събиране на статистически данни на Oracle 11g в Oracle E-Business Suite.
Нека вземем примера с xla_ae_lines, която е таблица на дялове и има много записи в силно използван ERP екземпляр
Тестов случай без задаване на постепенни предпочитания
-Създайте таблица xla_ae_lines_bkp като таблица на дялове, за да изпълните този тестов случай
– Вмъкнете данни от таблицата xla_ae_lines
вмъкнете в xla.xla_Ae_lines_bkp изберете * от xla.xla_ae_lines;
Създадени са 2119409 реда. |
-задайте време за включване на времето
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP'); Процедурата PL/SQL е завършена успешно. Изтекло:00:00:49.06 |
- Отне 49,06 секунди, за да се съберат статистически данни за първи път след вмъкване на данни.
- Проверете статистиката и глобалното ниво и ниво на дял
изберете table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ от dba_Tables, където table_name като „XLA_AE_LINES_BKP“;
TABLE_NAME последно_анализирано ——————————————————— XLA_AE_LINES_BKP 09.09.16 10:04:34
изберете partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ от dba_Tab_partitions, където table_name като „XLA_AE_LINES_BKP“; PARTITION_NAME последно_анализиран ——————————————————— 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 ЗАБАВЛЕНИЕ 09.09.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
|
- Изтрийте данните от един от дяловете, за да проверите как се изчисляват статистическите данни
изтрийте от xla.xla_ae_lines_bkp, където application_id=222; |
- Събиране на статистически данни usign fnd_Stats
exec fnd_stats.gather_table_stats('XLA','XLA_AE_LINES_BKP');
Процедурата за PL/SQL е завършена успешно.
Изтекло:00:00:25.06 - След изтриване на данните се проведе събиране на статистически данни, без да се задава предпочитанието. Отне 25,06 сек
- Проверка на глобални статистики и статистика на дялове
изберете table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ от dba_Tables, където table_name като „XLA_AE_LINES_BKP“;
TABLE_NAME последно_анализирана ——————————————————— XLA_AE_LINES_BKP 09.09.16 10:20:26 изберете partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ от dba_Tab_partitions, където table_name като „XLA_AE_LINES_BKP“; PARTITION_NAME последно_анализиран ——————————————————— 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 ЗАБАВЛЕНИЕ 09.09.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
|
ЗАБЕЛЕЖКА:статистическите данни се събират за всички дялове, въпреки че са изтрити само данни за AR дялове, last_analyzed се актуализира за всички дялове
Тестов случай със задаване на постепенни предпочитания
- Отпуснете и създайте отново таблицата xla_ae_lines_bkp като таблица на дялове, за да изпълните този тестов случай
- Вмъкнете данни от таблицата xla_ae_lines
вмъкнете в xla.xla_Ae_lines_bkp изберете * от xla.xla_ae_lines;
Създадени са 2119409 реда. |
-задайте време за включване на времето
exec dbms_stats.set_table_prefs(‘XLA’,’XLA_AE_LINES_BKP’,’INCREMENTAL’,’TRUE’); |
- Проверете дали предпочитанието е зададено
изберете dbms_stats.get_prefs(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’) от двойно;
DBMS_STATS.GET_PREFS(‘INCREMENTAL’,’XLA’,’XLA_AE_LINES_BKP’) ————————————————————— ВЯРНО |
- Съберете статистически данни, след като зададете предпочитанието.
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);
PL/SQL процедурата е завършена успешно. Изтекло:00:00:25.91 |
- След задаване на предпочитанието отне 25,91 секунди, за да се съберат статистически данни за първи път след вмъкване на данни
- проверка на статистическата информация за времето
изберете table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ от dba_Tables, където table_name като „XLA_AE_LINES_BKP“;
TABLE_NAME последно_анализирана —————————— ————————— XLA_AE_LINES_BKP 09-SEP-16 10:35:32 изберете partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ от dba_Tab_partitions, където table_name като „XLA_AE_LINES_BKP“; 18
PARTITION_NAME последно_анализиран ——————————————————— 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 ЗАБАВЛЕНИЕ 09.09.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
|
- Изтриване на данните от един дял, за да видите как постепенното събиране на статистически данни ще помогне следващия път, когато се събират статистически данни.
изтриване от xla_ae_lines_bkp, където application_id=222;
100233 реда са изтрити |
- Съберете статистически данни след изтриване на данни от application_id 222 дял AR
exec fnd_stats.gather_table_stats(‘XLA’,’XLA_AE_LINES_BKP’);
PL/SQL процедурата е завършена успешно. Изтекло:00:00:4.11 |
- След изтриването на данните за един дял, постепенното събиране на статистиката отне 4,11 сек.
- Проверете глобалната статистика и статистиката на дяловете
изберете table_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ от dba_Tables, където table_name като „XLA_AE_LINES_BKP“;
TABLE_NAME последно_анализирана ——————————————————— XLA_AE_LINES_BKP 09-16-СЕП-16 10:45:18 изберете partition_name,to_Char(last_analyzed,’DD-MON-YY HH24:MI:SS’) „last_analyzed“ от dba_Tab_partitions, където ta ble_name като „XLA_AE_LINES_BKP“; PARTITION_NAME последно_анализиран ——————————————————— 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 ЗАБАВЛЕНИЕ 09.09.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
|
Важни неща, които трябва да се отбележат, статистическите данни се събират, датата на last_analyzed се променя само за AR дял и времето също е намалено.
Така че виждаме, че Incremental Statistics Gathering намалява времето за събиране на статистически данни и може да бъде много полезно за големи таблици на дялове.