首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle ASH 報告出現「SQL Text Not Available」原因探究:未提交交易導致 SQL 文本不可見

     編輯:Oracle 教學

ASH 報告 Top SQL 顯示 "** SQL Text Not Available **" 現象分析

現場情境

  • HVR 資料同步大量 LOB 資料(1 筆 14MB,共 3000 筆)
  • IO 效能極差,log file parallel write 平均等待 49ms
  • AWR 報告顯示系統閒置,但 ASH 報告 Top SQL 出現 "** SQL Text Not Available **"

調查過程

-- 從 ASH Top Sessions 取得 SID/SERIAL#
SELECT sid, serial#, sql_id, event 
FROM v$session 
WHERE (sid=1075 AND serial#=364) OR (sid=1074 AND serial#=230);

-- 結果
SID    SERIAL#  SQL_ID         EVENT
1074   230      9jnsccphbp7a9  SQL*Net message from client
1075   364      bvgbvn8a7313c  SQL*Net message from client

關鍵發現

  • 此時目的表無資料,HVR 正在工作尚未提交
  • AWR 報告中搜尋不到這兩個 SQL_ID
  • 透過 OS Process ID 反查可在 V$SQL 找到 9jnsccphbp7a9

推測結論

ASH 報告顯示 "SQL Text Not Available" 的原因:對應的 SQL 陳述式所在的交易尚未提交(或尚未硬解析完成),導致 SQL 文本尚未寫入共用池(Library Cache),ASH 取樣時無法關聯到完整 SQL 文本。

技術背景補充

  • ASH(Active Session History)每秒取樣 V$SESSION,關聯 V$SQL/V$SQLAREA 取得 SQL 文本
  • 長時間執行、未提交的 DML,其游標可能處於開啟狀態,SQL 文本尚未完全載入共用池或已老化
  • AWR 只收集已完成/顯著的 SQL,未提交的長交易可能不在 AWR 快照範圍內

驗證建議

  1. 查詢 V$OPEN_CURSOR 確認 Session 持有的游標狀態
  2. 檢查 V$SQL.SQL_FULLTEXT 是否可見
  3. 觀察交易提交後,ASH 後續取樣是否顯示正常 SQL 文本

遇到 ASH 顯示 SQL Text Not Available,優先檢查對應 Session 是否有長時間未提交的交易,或 SQL 過長超出共用池顯示限制。此現象不代表資料庫故障,而是取樣可見性限制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved