監視oracle執行的SQL語句


查詢v$sql

select * from v$sql t
where t.LAST_ACTIVE_TIME>(sysdate - interval '1' MINUTE)  --執行1分鍾內的SQL語句
      and t.PARSING_SCHEMA_NAME = 'LSBIKE' --數據庫
      and (t.MODULE is null or t.MODULE not like '%PL/SQL%') --不是在某些終端里的執行
      and lower(t.SQL_TEXT) like '%select%' --查詢某類SQL語句
order by t.LAST_ACTIVE_TIME desc

查詢匹配的參數,會造成每個語句多行:

select t.*,
       b.name,b.position,b.dup_position,
       b.value_string
from v$sql t, v$sql_bind_capture b
where 
     t.hash_value=b.hash_value
     and t.LAST_ACTIVE_TIME>(sysdate - interval '1' MINUTE)  --執行1分鍾內的SQL語句  
     and t.PARSING_SCHEMA_NAME = 'LSBIKE' --數據庫  
     and (t.MODULE = 'JDBC Thin Client') --不是在某些終端里的執行  
     and lower(t.SQL_TEXT) like '%select%' --查詢某類SQL語句  
order by t.LAST_ACTIVE_TIME desc 

Oracle11g使用sql_monitor實時監控sql

在 Oracle  Database  11g 中,v$session 視圖增加了一些新的字段,這其中包括SQL_EXEC_START 和 SQL_EXEC_ID
這兩個字段實際上代表了 Oracle 11g 的一個新特性:實時的 SQL 監視(Real Time SQL Monitoring)。
在 Oracle 11g 之前的版本,長時間運行的 SQL 可以通過監控 v$session_longops 
當某個操作執行時間超過 6 秒,就會被記錄在 v$session_longops 中,通常可以監控到全表掃
描、全索引掃描、哈希聯接、並行查詢等操作;而在 Oracle  11g 中,當 SQL 並行執行時,會
立即被實時監控到,或者當 SQL 單進程運行時,如果消耗超過 5 秒的 CPU 或 I/O 時間,它也
會被監控到。監控數據被記錄在 V$SQL_MONITOR 視圖中,當然也可以通過 Oracle 11g 新增
的 package DBMS_MONITOR 來主動對 SQL 執行監控部署。

 V$SQL_MONITOR 收集的信息每秒刷新一次,接近實時,當 SQL 執行完畢,信息並不會
立即從 v$sql_monitor 中刪除,至少會保留 1 分鍾,v$sql_plan_monitor 視圖中的執行計划信息
也是每秒更新一次,當 SQL 執行完結,它們同樣至少被保留 1 分鍾。
實時 SQL 監控需要 statistics_level 初始化參數設置為 TYPICAL 或 ALL

select * from v$sql_monito t

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM