Oracle的奇葩設定之自動統計資訊更新

清風艾艾發表於2015-02-28
    目前,oracle資料庫版本已經到達12C了,資料庫SQL的執行基本都是基於CBO開銷模式的。但是,對於應用維護人員不盡理解資料庫的工作原理,他們為了最求資料庫的高效能,建立完資料庫,卻禁用了資料庫統計資訊自動更新的JOB。在聯通,透過如下方法檢視,發現很多資料庫的統計資訊更新作業都被禁用了。
SQL> select owner,job_name,enabled from dba_scheduler_jobs where job_name='GATHER_STATS_JOB';
OWNER                     JOB_NAME                 ENABL
------------------------------ ------------------------------  -----
SYS                         GATHER_STATS_JOB     FALSE
    這樣,雖然能暫時換來資料庫的高效能,但是這並不是應用最求應用系統最好效能的根本方法。反而,他們關閉了資料庫統計資訊自動更新任務,卻又忘記關注資料庫物件的統計資訊,更容易導致鎖表、全表掃描、表的高水位問題。因為,資料庫物件的統計資訊不再自動更新,SQL執行失去了CBO開銷模式評估的最有效的資訊,導致SQL執行發生一系列的問題。今天,ERP專案管理就發現一個奇特的問題:表只有143M,使用select進行記錄數統計時執行20多分鐘沒有結果,卻被資料庫強制斷開了連線;在綜合網管系統中發現很多ORA-01555的報錯,找到一個SQL執行老失敗,檢視SQL涉及的表的統計資訊也是2年前的,再一看資料庫的物件統計資訊自動更新任務也是被禁用了的。
    其實,如果想從統計資訊平衡應用的好效能,可以人為的做個crontab,人為判斷資料庫空閒時間,開啟資料庫統計資訊更新功能,執行資料庫統計資訊更新。在其他的時間段可以暫時停止該任務的執行。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-1443509/,如需轉載,請註明出處,否則將追究法律責任。

相關文章