[Oracle工程师手记] 利用 DBMS_SQLTUNE.report_sql_monitor 生成 SQL 语句的监控信息
返回 Oracle 索引页
可以通过给 SQL语句加 /*+ MONITOR */,强制收集 monitor 信息(正常情况下 5秒以上的 SQL语句会被自动收集),之后用 BMS_SQLTUNE.report_sql_monitor 得到执行时的执行计划等信息。甚至也包括执行时发生的 I/O 等信息。下面是一个小例子:
执行 SQL 语句:
1 2 3 4 5 6 7 8 9 10 | grant dba to u1 identified by u1; CONN u1/u1 create table tab001 as select * from dba_objects; SELECT /*+ MONITOR */ object_name FROM tab001 t1 where mod(t1.object_id,2) =0; |
查看这个SQL语句的 sql_id:
1 | SQL> SELECT sql_id, status, sql_text<br> FROM v$sql_monitor<br> WHERE username = 'U1' ;<br><br>SQL_ID STATUS<br> ------------- -------------------<br>SQL_TEXT<br>------------------------------------------------------<br>7djhpnfv7d4wu DONE (ALL ROWS)<br>SELECT /*+ MONITOR */ object_name<br>FROM tab001 t1<br>where mod(t1.object_id,2) =0 |
利用上面得到的 SQL_ID,获得执行计划等信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | SET LONG 1000000 SET LONGCHUNKSIZE 1000000 SET LINESIZE 1000 SET PAGESIZE 0 SET TRIM ON SET TRIMSPOOL ON SET ECHO OFF SET FEEDBACK OFF SELECT DBMS_SQLTUNE.report_sql_monitor( sql_id => '7djhpnfv7d4wu' , type => 'TEXT' , report_level => 'ALL' ) AS report FROM dual; SQL Text ------------------------------ SELECT /*+ MONITOR */ object_name FROM tab001 t1 where mod(t1.object_id,2) =0 Global Information ------------------------------ Status : DONE ( ALL ROWS ) Instance ID : 1 Session : U1 (78:6405) SQL ID : 7djhpnfv7d4wu SQL Execution ID : 16777216 Execution Started : 04/10/2021 14:49:39 First Refresh Time : 04/10/2021 14:49:39 Last Refresh Time : 04/10/2021 14:49:45 Duration : 6s Module/ Action : SQL*Plus/- Service : SYS$USERS Program : sqlplus@hst05200.tst.com (TNS V1-V3) Fetch Calls : 2430 Global Stats =========================================================================== | Elapsed | Cpu | IO | Other | Fetch | Buffer | Read | Read | | Time (s) | Time (s) | Waits(s) | Waits(s) | Calls | Gets | Reqs | Bytes | =========================================================================== | 0.10 | 0.03 | 0.00 | 0.06 | 2430 | 3831 | 27 | 11MB | =========================================================================== SQL Plan Monitoring Details (Plan Hash Value=3707625324) ========================================================================================================================================== | Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Read | Read | Activity | Activity Detail | | | | | (Estim) | | Active(s) | Active | | (Actual) | Reqs | Bytes | (%) | (# samples) | ========================================================================================================================================== | 0 | SELECT STATEMENT | | | | 7 | +0 | 1 | 36430 | | | | | | 1 | TABLE ACCESS FULL | TAB001 | 730 | 397 | 7 | +0 | 1 | 36430 | 27 | 11MB | | | ========================================================================================================================================== SQL> |
返回 Oracle 索引页
标签:
sql monitor
, Oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下