天天看點

Fixed Table統計資訊

Fixed Table統計資訊

2 YEARS AGO ORACLE

Oracle有大量的内部視圖供DBA使用,這些視圖底層表以X$開頭,Fixed Objects指的是這些以x$開頭的表(下文中稱為基表)及它們的索引。

很多v$開頭的視圖基表都是x$表,包括動态性能視圖,管理視圖,如dba_free_space等,是以,這些fixed objects的統計資訊就顯得極其重要。

1. Fixed objects統計資訊重要性

優化器在生成執行計劃的時候依賴于這些基表的統計資訊,如果這些基表的統計資訊缺失,不像使用者對象的統計資訊缺失,Oracle會使用dynamic sampling,優化器在這些缺失統計資訊的基表上,會使用預設的預設值進行執行計劃的評估。在這種情況下,執行計劃可能是極其糟糕的。是以,可能存在查詢某些動态性能視圖或者資料字典時,出現很慢的情況。

例如, 

X$KTFBUE

記錄了資料檔案、extent的位圖等資訊,在查詢dba_free_space的時候,會使用到這個基表,如果這個表的統計資訊為0,則有可能導緻查詢dba_free_space很慢. 當這個基表缺失統計資訊時,該表的行數預設為10萬行。

1
2
3
4
5
6
7
8
9
      
column database_creation format a18
column last_analyzed format a18
select dbid
      ,to_char(created,'dd.mm.yyyy hh24:mi') database_creation
      ,version
      ,(select to_char(max(last_analyzed),'dd.mm.yyyy hh24:mi') last_analyzed
         from dba_tab_statistics
         where object_type='FIXED TABLE') last_analyzed
from v$database,v$instance;
      
  • 如何收集

    在12c以前,基表的統計資訊是不會通過Oracle自動任務去收集的,需要手動執行下面這個procedure, 使用者需要有sysdba或者

    ANALYZE ANY DICTIONARY

    的權限。
    1
          
    exec DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
          
    • 上面這個procedure與

      DBMS_STATS.GATHER_TABLE_STATS

      的差別是,它不會收集表/索引的blocks資訊,因為基表是存放在記憶體中随時動态變化的,它們的blocks永遠設定為0.
    • 統計資訊的收集都是會消耗資源,不建議在業務高峰期對任何批量對象進行統計資訊的收集。
    • 12c以後,雖然自動任務視窗會收集基表統計資訊,但是,其限制是在視窗時間内,其優先級是最低的,要先等到使用者對象的統計資訊收集完,等資料字典的統計資訊收集完,同時這些基表的統計資訊不存在,即是說,自動視窗不會去更新基表統計資訊的;是以,建議定期手工對基表進行收集。

      盡管基表生存周期是在記憶體中,但其統計資訊是會儲存在磁盤中,是以,執行個體重新開機後,除非負載有很大的變化,并沒有必要重新收集統計資訊。

2. Fixed tables統計資訊對資料庫的影響

對dba_extents, v$access, V$RMAN_BACKUP_JOB_DETAILS, V$RMAN_STATUS,DBA_FREE_SPACE等視圖有很大影響,很多時候查詢這些視圖很慢,極大可能就是因為基表統計資訊缺失或者存在錯誤的統計資訊。

Reference:

How to Gather Statistics on Objects Owned by the 'SYS' User and 'Fixed' Objects (Doc ID 457926.1)

Fixed Objects Statistics (GATHER_FIXED_OBJECTS_STATS) Considerations (Doc ID 798257.1)

Best Practices for Gathering Optimizer Statistics with Oracle Database 12c Release 2

ORA-01555 Caused By Auto Execute Of Job "SYS"."PMO_DEFERRED_GIDX_MAINT_JOB" (Doc ID 2523018.1)

Database SQL Tuning Guide - Gathering Statistics for Fixed Objects

EOF