核心表AUTOTRACE結果出錯
今天在跟蹤一個系統檢視的執行計劃的時候,意外發現了這個小bug。
資料庫版本9204 for Solaris。現象其實很簡單,查詢V$SQL檢視的基表X$KGLCURSOR,發現AUTOTRACE給出的執行計劃是掃描另一個核心表X$KGLOB。
SQL> SELECT COUNT(*) FROM X$KGLCURSOR;
COUNT(*)
----------
169800
1 row selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=11 Card=1)
1 0 SORT (AGGREGATE)
2 1 FIXED TABLE (FULL) OF 'X$KGLOB' (Cost=11 Card=100)
對這個語句進行SQL_TRACE:
SQL> ALTER SESSION SET SQL_TRACE = TRUE;
Session altered.
SQL> SELECT COUNT(*) FROM X$KGLCURSOR;
COUNT(*)
----------
169807
1 row selected.
SQL> ALTER SESSION SET SQL_TRACE = FALSE;
Session altered.
而Trace檔案中得到的執行計劃是正確的:
PARSING IN CURSOR #1 len=32 dep=0 uid=0 oct=3 lid=0 tim=13924902108484 hv=2433647412 ad='dee36710'
SELECT COUNT(*) FROM X$KGLCURSOR
END OF STMT
PARSE #1:c=0,e=12843,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=13924902108471
EXEC #1:c=0,e=80,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=13924902108826
FETCH #1:c=2620000,e=2568180,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,tim=13924904677105
FETCH #1:c=0,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=13924904678308
STAT #1 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=0 r=0 w=0 time=2568154 us)'
STAT #1 id=2 cnt=169807 pid=1 pos=1 obj=282 op='FIXED TABLE FULL X$KGLCURSOR (cr=0 r=0 w=0 time=2492440 us)'
看來錯誤是AUTOTRACE造成的。那麼看看X$KGLOB是那些檢視的基表:
SQL> select view_name from v$fixed_view_definition where view_definition like '%x$kglob%';
VIEW_NAME
------------------------------
GV$ACCESS
GV$OBJECT_DEPENDENCY
GV$DB_OBJECT_CACHE
GV$DB_PIPES
4 rows selected.
X$KGLOB中的記錄和物件資訊有很大關係,對比X$KGLOB和X$KGLCURSOR表,發現二者的列完全一致,且裡面部分記錄也完全一樣。懷疑Oracle在這裡出了bug。
訪問其他核心表未發現類似的現象。
不過一般很少會去關心核心表的訪問和執行計劃,因此這個bug也不會造成什麼影響。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69363/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 以scott使用者執行set autotrace 出錯
- 設定AUTOTRACE出現ORA-3212錯誤
- [ORACLE BUG]查詢結果錯誤--臨時表並行Oracle並行
- 資料結果表概述
- Autotrace 用法總結
- 核心頁表除錯除錯
- navicat 匯出查詢結果
- mysql匯出查詢結果MySql
- Windows計劃任務出現0x1錯誤結果Windows
- 使用外部表儲存查詢結果
- Oracle 開啟SQL跟蹤執行SET AUTOTRACE ON命令時出錯OracleSQL
- 設定AUTOTRACE時出現SP2-0611錯誤
- 實時計算Flink>獨享模式>Batch(試用)>建立結果表——建立CSV結果表模式BAT
- MySQL查詢結果匯出方式總結MySql
- C#呼叫Windows CMD命令並,返回輸出結果或錯誤資訊C#Windows
- oracle不走hint原因1:依據hint會出現錯誤結果Oracle
- eCognition易康匯出分割結果
- 記錄輸出結果工具-script
- 使用查詢結果更新表的方法
- sql出現結果集錯誤以及出現ora-600或者ora-7445錯誤的解決方法思路SQL
- PostgreSQL函式:返回表查詢結果集SQL函式
- C#格式化數值結果表C#
- FIRST_ROWS優化模式訪問遠端表可能導致錯誤結果(二)優化模式
- FIRST_ROWS優化模式訪問遠端表可能導致錯誤結果(一)優化模式
- 怎樣把分組查詢出來的結果插入到一張新表中?
- .NET 結果與錯誤處理利器 FluentResults
- MySQL的Explain結果輸出項解釋MySqlAI
- MySQL show status命令輸出結果詳解MySql
- mysql匯出select結果到檔案MySql
- QTP小技巧 - 自動匯出HTML結果QTHTML
- DBeaver 匯出多個查詢結果集
- SQL 把查詢結果當作"表"來使用SQL
- 巧用臨時表將大結果集轉換為小結果集驅動查詢薦
- 設定autotrace的報錯問題解決
- 設定AUTOTRACE是出現SP2-0611和ORA-942錯誤。
- CHAR型別函式索引導致結果錯誤型別函式索引
- filebeat輸出結果到elasticsearch的多個索引Elasticsearch索引
- 利用資料泵匯出查詢結果(二)