Oracle自動統計信息的收集原理及實驗

 

[日期:2014-11-21]
來源:Linux社區  做者:stevendbaguo
[字體: ]linux

       從Oracle Database 10g開始,Oracle在建庫後就默認建立了一個名爲GATHER_STATS_JOB的定時任務,用於自動收集CBO的統計信息。這個自動任務默認狀況下在工做日晚上10:00-6:00和週末全天開啓。oracle

        調用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集統計信息。該過程首先檢測統計信息缺失和陳舊的對象。而後肯定優先級,再開始進行統計信息。收集的規則是user_tab_modifications中操做的記錄數超過表的數量的10%就會自動收集。更多的信息看官方文檔:http://docs.oracle.com/cd/B19306_01/server.102/b14211/stats.htm#sthref1068  。字體

      user_tab_modifications表中有inserts,updates,deletes,意思是修改了多少行數據,下面咱們來作一個實驗:server

SQL> create table test as select * from dba_objects;htm

SQL> select table_name,inserts,updates,deletes,timestamp
      from user_tab_modifications where table_name='TEST';
未選定行對象

SQL> exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
PL/SQL 過程已成功完成。文檔

SQL> select table_name,inserts,updates,deletes,timestamp
      from user_tab_modifications where table_name='TEST';
未選定行get

SQL> exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
PL/SQL 過程已成功完成。虛擬機

SQL> select table_name,inserts,updates,deletes,timestamp
      from user_tab_modifications where table_name='TEST';
未選定行it

SQL> exec dbms_stats.gather_table_stats(user,'TEST');
PL/SQL 過程已成功完成。

SQL> select table_name,inserts,updates,deletes,timestamp
      from user_tab_modifications where table_name='TEST';
未選定行

SQL> delete from test where rownum <=10000;
已刪除10000行。
SQL> commit;
提交完成。

SQL> select table_name,inserts,updates,deletes,timestamp
      from user_tab_modifications where table_name='TEST';
未選定行

SQL> exec dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
PL/SQL 過程已成功完成。

SQL> select table_name,inserts,updates,deletes,timestamp
      from user_tab_modifications where table_name='TEST';
TABLE_NAME                        INSERTS    UPDATES    DELETES TIMESTAMP
------------------------------ ---------- ---------- ---------- --------------
TEST                                    0          0    1000012-7月 -13

另外:

    關閉自動統計信息命令,exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');

    啓用自動統計信息命令,exec DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');

    查看自動統計信息是否開啓,

    oracle 10g :SELECT OWNER,JOB_NAME,ENABLED FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB';
    oracle 11g :select t1.owner, t1.job_name, t1.enabled  from dba_scheduler_jobs t1  where t1.job_name = 'BSLN_MAINTAIN_STATS_JOB';

Oracle 單實例 從32位 遷移到 64位 方法  http://www.linuxidc.com/Linux/2012-03/55759.htm

CentOS 6.4下安裝Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htm

Oracle 11gR2 在VMWare虛擬機中安裝步驟 http://www.linuxidc.com/Linux/2013-09/89579p2.htm

Debian 下 安裝 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htm

Oracle導入導出expdp IMPDP詳解 http://www.linuxidc.com/Linux/2014-04/99932.htm

Oracle 10g expdp導出報錯ORA-4031的解決方法 http://www.linuxidc.com/Linux/2014-04/99842.htm

更多Oracle相關信息見Oracle 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新連接地址http://www.linuxidc.com/Linux/2014-11/109690.htm

linux

相關文章
相關標籤/搜索