DBMS_STATS收集統計資訊的問題及解決
收集資料庫的統計資訊是dba工作的一部分,如果在資料快速增長的庫上,統計資訊如果收集的頻率太慢,會對執行計劃有一定的影響。
而對於逐漸客戶飽和的系統來說,統計資訊就可以很長時間收集或者儘量不收集。
對於統計資訊的收集,如果是很大的表,收集100%也是不現實的,如果收集的百分比太小,統計資訊又失真,對系統系統無疑是雪上加霜。
以上是我採用的方式,不一定對,可以參考。如果表的大小超過30G,算是很大的表了,統計資訊的收集比例在30%到40%之間,我給了40%。以下類似。
巨型表(>30G), percentage 40%.
大型表(>8G,<30G), percentage 50%.
中型表(>1G,<8G), percentage 60%.
小 表(<1G), percentage 70%.
對於較大的表,都加了degree.
exec DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'xxxxx', TABNAME => 'xxxxxx' ,CASCADE => TRUE, METHOD_OPT =>'FOR ALL INDEXED COLUMNS SIZE 1', ESTIMATE_PERCENT =>60 ,DEGREE=>2,GRANULARITY =>'ALL');
今天我照例準備了一下指令碼,自己先試一下有沒有問題。結果出乎意料報錯了。
SQL> exec DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'XXXX', TABNAME => 'XXXXX' ,CASCADE => TRUE, METHOD_OPT =>'FOR ALL INDEXED COLUMNS SIZE 1', ESTIMATE_PERCENT =>70 ,DEGREE=>2,GRANULARITY =>'ALL');
BEGIN DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'XXXX', TABNAME => 'XXXXX' ,CASCADE => TRUE, METHOD_OPT =>'FOR ALL INDEXED COLUMNS SIZE 1', ESTIMATE_PERCENT =>70 ,DEGREE=>2,GRANULARITY =>'ALL'); END;
*
ERROR at line 1:
ORA-20000: Unable to analyze TABLE "XXXX"."XXXXX",
insufficient privileges or does not exist
ORA-06512: at "SYS.DBMS_STATS", line 23143
ORA-06512: at "SYS.DBMS_STATS", line 23205
ORA-06512: at line 1
我試著用dba使用者來執行,結果還是同樣的錯誤。我懷疑是不是bug了,
結果在metalink上轉了一圈,有過類似的bug,但在11.2版本都修復了。
最後有一篇文章。Doc ID 1315184.1
SQL> grant analyze any dictionary to adamb;
果然好使。
而對於逐漸客戶飽和的系統來說,統計資訊就可以很長時間收集或者儘量不收集。
對於統計資訊的收集,如果是很大的表,收集100%也是不現實的,如果收集的百分比太小,統計資訊又失真,對系統系統無疑是雪上加霜。
以上是我採用的方式,不一定對,可以參考。如果表的大小超過30G,算是很大的表了,統計資訊的收集比例在30%到40%之間,我給了40%。以下類似。
巨型表(>30G), percentage 40%.
大型表(>8G,<30G), percentage 50%.
中型表(>1G,<8G), percentage 60%.
小 表(<1G), percentage 70%.
對於較大的表,都加了degree.
exec DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'xxxxx', TABNAME => 'xxxxxx' ,CASCADE => TRUE, METHOD_OPT =>'FOR ALL INDEXED COLUMNS SIZE 1', ESTIMATE_PERCENT =>60 ,DEGREE=>2,GRANULARITY =>'ALL');
今天我照例準備了一下指令碼,自己先試一下有沒有問題。結果出乎意料報錯了。
SQL> exec DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'XXXX', TABNAME => 'XXXXX' ,CASCADE => TRUE, METHOD_OPT =>'FOR ALL INDEXED COLUMNS SIZE 1', ESTIMATE_PERCENT =>70 ,DEGREE=>2,GRANULARITY =>'ALL');
BEGIN DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'XXXX', TABNAME => 'XXXXX' ,CASCADE => TRUE, METHOD_OPT =>'FOR ALL INDEXED COLUMNS SIZE 1', ESTIMATE_PERCENT =>70 ,DEGREE=>2,GRANULARITY =>'ALL'); END;
*
ERROR at line 1:
ORA-20000: Unable to analyze TABLE "XXXX"."XXXXX",
insufficient privileges or does not exist
ORA-06512: at "SYS.DBMS_STATS", line 23143
ORA-06512: at "SYS.DBMS_STATS", line 23205
ORA-06512: at line 1
我試著用dba使用者來執行,結果還是同樣的錯誤。我懷疑是不是bug了,
結果在metalink上轉了一圈,有過類似的bug,但在11.2版本都修復了。
最後有一篇文章。Doc ID 1315184.1
CAUSE
Analyze operations against the XDB schema require the 'analyze any dictionary' privilege.
SOLUTION
Grant the required privilege:
SQL> grant analyze any dictionary to adamb;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1102566/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 統計資訊收集不完的解決
- oracle統計資訊 使用dbms_stats包收集統計資料Oracle
- Oracle學習遇到的問題收集及解決 - 不斷更新Oracle
- 使用dbms_stats包收集統計資料(zt)
- oracle 11.2.0.4使用dbms_stats收集統計資訊statistics及刪除和還原相關測試之一Oracle
- 【統計資訊】Oracle常用的收集統計資訊方式Oracle
- Oracle收集統計資訊Oracle
- Oracle 統計資訊收集Oracle
- 收集oracle統計資訊Oracle
- ORACLE 收集統計資訊Oracle
- 關於dbms_stats對系統統計資訊的管理
- oracle統計資訊包--dbms_stats介紹Oracle
- 使用dbms_stats列出沒有統計資訊的物件!物件
- 使用DBMS_STATS收集系統狀態
- 手工收集統計資訊及立即產生新的執行計劃
- 收集全庫統計資訊
- mysql如收集統計資訊MySql
- MySQL 5.5 統計資訊收集MySql
- 收集統計資訊的簡單操作
- ORACLE 統計資訊的收集與管理Oracle
- APP上架因收集個人資訊問題被拒絕該怎麼解決?APP
- 微課sql最佳化(3)、統計資訊收集(2)-如何收集統計資訊SQL
- oracle 10g_10.2.0.5如何合理高效使用dbms_stats收集統計資訊呢_part1Oracle 10g
- oracle 10g_10.2.0.5如何合理高效使用dbms_stats收集統計資訊呢_part2Oracle 10g
- 收集資料庫統計資訊需要收集直方圖資訊.資料庫直方圖
- MySQL系統如何收集統計資訊MySql
- Nebula Graph 特性講解——RocksDB 統計資訊的收集和展示
- UG程式設計常遇到的問題及解決方法程式設計
- Oracle統計資訊自動收集Oracle
- oracle收集統計資訊job停止Oracle
- oracle統計資訊--直方圖的收集:Oracle直方圖
- 重新收集oracle表的統計資訊Oracle
- Oracle統計資訊的收集和維護Oracle
- 用DBMS_STATS匯入匯出oracle統計資訊Oracle
- Oracle10g 自動統計資訊(dbms_stats)Oracle
- 常見問題及解決
- 奇怪的登入問題及解決
- 生產系統中EXP-00000的問題及解決