首页 存档 技术 查看内容

SQL报告,简单一点

2018-3-30 13:00 |来自: 互联网 431 0

摘要: 版权声明本文转载自微信公众号:OCM之家 ID:OCMHome 二维码: 经常碰到一个性能不佳SQL,进程要执行很久才能出来,想优化但是又不知道时间被浪费在哪里了。好容易X度到一个叫10046的可以追踪SQL的过程发现这东西出 ...

版权声明

本文转载自微信公众号:OCM之家

ID:OCMHome

二维码:


经常碰到一个性能不佳SQL,进程要执行很久才能出来,想优化但是又不知道时间被浪费在哪里了。好容易X度到一个叫10046的可以追踪SQL的过程发现这东西出来根本看不懂。无奈之下使用怪怪的sqlplus里的set autotrace的stat看过程,无奈执行计划出来的都是不带时间和细节的。这可怎么办?看v$视图?不会用啊!!!!


有没有简单点的方式帮我们找到时间浪费在哪里了?有的。


v$视图中有个叫做V$SQL_MONITOR这个视图里记录了实际执行超过5秒钟的SQL内容。后面有很多列记录了很多有用的信息,例如SQL是否完成,执行时间,结束时间,执行时间等等。配合dbms_sqltune包。


笔者使用sh用户写了一个SQL

SELECT

prod_name, prod_desc ,count(*)

FROM

sh.costs a

JOIN sh.SALES b ON

a.PROD_ID = b.PROD_ID

JOIN sh.PRODUCTS c ON

a.PROD_ID = c.PROD_ID

WHERE to_char(a.TIME_ID,'yyyymmdd') LIKE '2016%'

or prod_name LIKE '%E%d'

OR prod_desc LIKE '%A%'

GROUP BY prod_name, prod_desc, a.TIME_ID

该SQL执行了1分53秒秒后才出结果。我们可以在v$sql_monitor中看到结果。(这里只是展示了部分信息)


|STATUS |PROGRAM |LAST_REFRESH_TIME | SQL_ID |IS_FULL_SQLTEXT|ELAPSED_TIME |


|DONE(FIRST N ROWS) |oracle@hp(M002) |2016-12-19 20:13:27| f6cz4n8y72xdc |Y |5534603 |

|DONE(ALL ROWS) |sqlplus@hp(TNS V1-V3) |2016-12-19 20:33:59| 1z0atyvua4xzv |Y |5474013 |

|DONE |sqlplus@hp(TNS V1-V3) |2016-12-19 20:40:54| 5s0s9ug4k3rcb |Y |5993330 |

|DONE |oracle@hp(J000) |2016-12-19 20:14:36| 6gvch1xu9ca3g |Y |9474032 |

|DONE |sqlplus@hp(TNS V1-V3) |2016-12-19 20:39:50| 90urupv3cmjmq |Y |68319089 |

|DONE(FIRST N ROWS) |DBeaver 3.7.8 |2016-12-19 21:42:26| 2rz47q4mqwtzj |Y |113424265 |

|DONE |sqlplus@hp(TNS V1-V3) |2016-12-19 20:38:19| 44pgaj5vdubxy |Y |316443454 |



我们可以看到很多内容,包括了很多物理读cpu时间等。但是这种可读性并不高。

我们可以使用包配合的分析sql问题。

笔者的sql_id是2rz47q4mqwtzj,而且我希望看到最全的信息。

所以我的可以这样写:

SELECT dbms_sqltune.REPORT_SQL_MONITOR(

sql_id=

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部