Zlepšení odezvy díky dynamickému sběru statistik tabulky SDE_LOGFILE_DATA
27. 12. 2011Povolení dynamického sběru statistik má za následek, že se statistiky přepočítávají vždy před vyhodnocováním exekučního plánu SQL dotazu do tabulky, a tedy že Oracle Cost Based Optimizer má vždy aktuální informace pro optimální exekuční plán.
V případě, že dynamický sběr povolen není, může Cost Based Optimizer při vyhodnocování brát v potaz neaktuální informace o rozložení dat v dané tabulce a zvolit horší exekuční plán vedoucí ke zhoršeným odezvám systému.
Doporučujeme tedy zrušení tvorby statistik nad tabulkou SDE_LOGFILE_DATA a uzamknutí prázdných statistik pomocí procedury DBMS_STATS.LOCK_TABLE_STATS mající za následek vynucený dynamický sběr statistik.
Následující postup je aplikovatelný pouze na Oracle 10g. (Ve verzi databáze Oracle 9i totiž neexistuje procedura lock_table_stats.)
- Je nutné zkontrolovat, jako uživatel SYSDBA, zda je povolen dynamický sběr statistik v databázi. Tedy zda je parametr OPTIMIZER_DYNAMIC_SAMPLING nastaven na hodnotu 2:
select name, value from v$parameter where name = 'optimizer_dynamic_sampling';
V případě, že není, je nutné jej na tuto hodnotu nastavit:
alter system set optimizer_dynamic_sampling = 2 scope=both; - Pro každého databázového uživatele ArcSDE s konfigurací shared logfile je nutné zrušit aktuální statistiky u tabulky SDE_LOGFILE_DATA:
exec DBMS_STATS.DELETE_TABLE_STATS ('<owner>','sde_logfile_data'); - Pro zajištění, že se statistiky v budoucnu nepřepočtou procedurami jako DBMS_STATS.GATHER_SCHEMA_STATS či DBMS_STATS.GATHER_DATABASE_STATS, je potřeba prázdné statistiky tabulky SDE_LOGFILE_DATA uzamknout:
exec sys.dbms_stats.lock_table_stats('<USER>', 'SDE_LOGFILE_DATA');