oracle之 v$sql_monitor 監視正在執行的SQL語句的統計資訊
11g中引入了新的動態效能檢視V$SQL_MONITOR,該檢視用以顯示Oracle監視的SQL語句資訊。SQL監視會對那些並行執行或者消耗5秒以上cpu時間或I/O時間的SQL語句自動啟動,同時在V$SQL_MONITOR檢視中產生一條記錄。當SQL語句正在執行,V$SQL_MONITOR檢視中的統計資訊將被實時重新整理,頻率為每秒1次。SQL語句執行完成後,監視資訊將不會被立即刪除,Oracle會保證相關記錄儲存一分鐘(由引數_sqlmon_recycle_time所控制,預設為60s),最終這些記錄都會被刪除並被重用。這一新的SQL效能監視特性僅在CONTROL_MANAGEMENT_PACK_ACCESS為DIAGNOSTIC+TUNING和STATISTICS_LEVEL為ALL|TYPICAL時被啟用。
v$sql_monitor檢視包含當前正在執行的SQL語句,以及最近執行的SQL語句。
使用v$sql_monitor檢視中所監控的SQL語句時需在滿足以下條件:
1) 自動監控任何並行語句
2) 如果一個SQL語句消耗了超過5秒的CPU或I/O時間,則會自動監控
3) 監控任何在語句級啟用監控的SQL語句(使用monitor或no_monitor)
提示:結合v$sql_monitor檢視與v$sql_plan_monitor檢視可以進一步查詢SQL的執行計劃等資訊。聯合一些其他檢視,如v$active_session_history、v$session、v$session_longops、v$sql、v$sql_plan等,可以獲得關於SQL的更多資訊。
注意:為了進行SQL監控,初始化引數STATISTICS_LEVEL必須設定為TYPICAL或ALL,CONTROL_MANAGEMENT_PACK_ACCESS必須設定為DIAGNOSTIC+TUNING。
SQL> show parameter STATISTICS_LEVE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL
SQL> show parameter CONTROL_MANAGEMENT_PACK_ACCESS
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_management_pack_access string DIAGNOSTIC+TUNING
1、 如檢視資料庫中消耗CPU資源排名前10位的查詢:
select * from (
select sql_id,username,to_char(sql_exec_start,'yyyy-mm-dd hh24:mi:ss') sql_exec_start,
sql_exec_id,sum(buffer_gets) buffer_gets,
sum(disk_reads) disk_reads,round(sum(cpu_time/1000000),1) cpu_secs
from v$sql_monitor
where username not in ('SYS','SYSTEM')
group by sql_id,username,sql_exec_start,sql_exec_id
order by 7 desc)
where rownum<=10;
SQL_ID USERNAME SQL_EXEC_START SQL_EXEC_ID BUFFER_GETS DISK_READS CPU_SECS
------------- ------------------------------ ------------------- ----------- ----------- ---------- ----------
8p8ann3c68vxc SCOTT 2016-11-24 09:50:20 16777216 0 0 37.1
2、監控指定的SQL語句:
2.1、 Hint提示監控指定的SQL語句
select /*+ monitor */e.empno,e.ename,e.sal,d.dname from scott.emp e,scott.dept d where e.deptno=d.deptno;
2.2、v$sql_monitor檢視中檢視被監控的SQL語句消耗的資源資訊:
select sql_id,username,to_char(sql_exec_start,'yyyy-mm-dd hh24:mi:ss') sql_exec_start,
sql_exec_id,sum(buffer_gets) buffer_gets,
sum(disk_reads)disk_reads,round(sum(cpu_time/1000000),1) cpu_secs
from v$sql_monitor
where sql_text like '%monitor%'
group by sql_id,username,sql_exec_start,sql_exec_id;
2.3、 然後可以使用DBMS_SQLTUNE包來檢視SQL語句生成的監控資訊(如執行計劃等):
SQL>
set long 10000000
set longchunksize 10000000
set linesize 200
select dbms_sqltune.report_sql_monitor from dual;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2144816/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢視mysql正在執行的SQL語句MySql
- 檢視當前oracle中正在執行的sql語句OracleSQL
- 查詢Oracle正在執行的SQL語句OracleSQL
- 查詢Oracle正在執行和執行過的SQL語句OracleSQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- 查詢正在執行的SQL語句SQL
- 獲取oracle正在處於等待狀態的sql語句的執行計劃的語句OracleSQL
- Oracle 查詢某個session正在執行的sql語句OracleSessionSQL
- 查詢正在執行的sql語句及該語句執行的時間SQL
- 通過日誌檢視mysql正在執行的SQL語句MySql
- Oracle檢視正在執行的SQL以及執行計劃分析OracleSQL
- 【檢視】使用V$SQL_PLAN檢視獲取曾經執行過的SQL語句執行計劃SQL
- Oracle使用審計監控使用者執行過的SQL語句OracleSQL
- Oracle SQL 語句的執行過程OracleSQL
- 檢視正在執行的SQLSQL
- 【Gp】PostgreSql中如何kill掉正在執行的sql語句SQL
- 查詢當前正在執行的SQL語句並KILLSQL
- 清除SQL語句的執行計劃SQL
- 理解oracle執行sql語句的過程OracleSQL
- 通過分析SQL語句的執行計劃優化SQL語句SQL優化
- 如何在oracle10g上檢視sql的執行計劃(不實際執行語句)OracleSQL
- 後臺執行SQL語句(oracle)SQLOracle
- Oracle SQL語句執行步驟OracleSQL
- sql語句如何執行的SQL
- 執行大的sql語句SQL
- MySQL 5.7獲取指定執行緒正在執行SQL的執行計劃資訊MySql執行緒
- ORACLE sql 語句的執行過程(SQL效能調整)OracleSQL
- oracle檢視執行最慢與查詢次數最多的sql語句OracleSQL
- oracle 中如何顯示sql語句的執行時間和sql語句的執行後的當前時間OracleSQL
- Oracle - 執行過的SQL、正在執行的SQL、消耗資源最多的SQLOracleSQL
- mysql的sql語句執行流程MySql
- SQL 語句的執行順序SQL
- 監控 SQL Server 的執行狀況--常用檢測語句SQLServer
- Oracle中檢視已執行sql的執行計劃OracleSQL
- Oracle 檢視SQL的執行計劃OracleSQL
- sql server中如何檢視執行效率不高的語句SQLServer
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- 檢視資料中正在執行的sqlSQL