2016-09-29 17 views
1

以下是我爲scott.emp表格所做的步驟。Oracle:導入表格統計信息後,優化程序使用動態採樣

  1. select * from emp where empno > 7503

  2. select * from table(dbms_xplan.display_cursor);

[..] 
    Note 
    ----- 
     - dynamic statistics used: dynamic sampling (level=2) 
  • exec DBMS_STATS.GATHER_TABLE_STATS ('scott','EMP');

  • select * from emp where empno > 7503.

  • select * from table(dbms_xplan.display_cursor);

    -- No Dynamic sampling used -- 
    
  • 導出的表統計信息。

  • 清理實例並啓動新實例。
  • 導入表格統計。
  • select NUM_ROWS,LAST_ANALYZED,GLOBAL_STATS,USER_STATS from USER_TAB_STATISTICS where table_name ='EMP';

    14 28-SEP-16 YES NO 
    
  • select * from emp where empno > 7503.

  • select * from table(dbms_xplan.display_cursor);
  • Note 
    ----- 
        - dynamic statistics used: dynamic sampling (level=2)** 
    

    爲什麼使用動態採樣,即使表有統計數據?導入統計數據後,我們是否需要觸發任何內容? 爲什麼優化程序在第一次收集統計數據(第5步)後未使用動態採樣?

    +1

    什麼版本的數據庫?步驟7到底意味着什麼?你在第8步輸入了什麼統計數據?是表emp分區,你有7503分區的統計數據?你能發佈完整的執行計劃嗎? – stee1rat

    +0

    7,卸載並重新安裝數據庫。在8中,我只導入了表格統計信息。沒有表是不是分區之一。感謝@stefan,我得到了DS爲什麼選擇了優化器並在答案部分中發佈了相同的原因。 – Chandan

    +0

    是12c數據庫嗎?這是由12c功能「自適應執行計劃」觸發的新功能。 – ibre5041

    回答

    0

    找到原因。在第8步中,我只導入了表格統計信息。如果我們導入數據庫統計數據,系統字典統計數據,那麼優化器不會進行動態採樣。

    優化程序規則:如果優化程序沒有沒有足夠的統計信息,那麼它會嘗試進行採樣。

    所以要模擬執行計劃,需要導入所有的統計數據。