Zlepšení odezvy díky dynamickému sběru statistik tabulky SDE_LOGFILE_DATA

27. 12. 2011
  • Serverový GIS
  • Další
  • ArcGIS 10.0
  • ArcGIS 10.1
  • ArcGIS 10.2
  • ArcGIS 10.3

Povolení 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');