专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

ORACLE DBA TOP SQL查询 oracle查询dba用户

ins518 2024-10-24 13:49:25 技术文章 7 ℃ 0 评论

应用系统的很多性能问题,都是SQL执行效率低下引起的。作为一名合格的DBA,需要能在系统出问题前发现系统中存在的性能问题和隐患,提醒开发人员及早分析解决问题。

为了实现这个目标,一个简单有效的办法,就是针对所有的数据库进行TOP SQL的监控:每隔半小时检查下数据库,查询数据库中是否存在执行时间超过30秒的SQL,如果有,发邮件通知相关的系统负责人。以上过程可以通过简单的程序来实现,在这里我主要介绍下TOP SQL的查询语句的写法:

select to_char(a.start_time, 'yyyy-mm-dd hh24:mi:ss') as 开始执行时间,

a.username as 用户名,

a.sql_id,

a.elapsed_seconds as "用时(秒)",

b.module as 调用客户端, --为空或者JDBC Thin Client,PL/SQL Developer,TOAD 12.1.0.22等,表示调用的客户端

b.sql_text as SQL内容

from v$session_longops a, v$sqlarea b

where a.start_time > sysdate - 0.5 / 24 --半小时之内的数据

and a.username not in ('SYS') --排除系统用户

and a.elapsed_seconds >= 30 --执行时间超过指定值

and a.sql_id = b.sql_id

order by 1 desc;

由于系统没有执行时间超过30秒的数据,我把上面SQL条件中的时间由30秒改成6秒,检查下来结果如下图:

结果中之所以查出“调用客户端”,主要是用来确认SQL是应用程序执行的,还是有人通过客户端执行的。

对于查出的TOP SQL的内容,如果系统负责人熟悉系统,应该能直接知道代码在哪里,如果不太熟悉,就需要在代码里进行搜索了。另外如果是在存储过程里出现的SQL,可以通过下面的SQL进行查询:

select * from user_source

where type IN ('PACKAGE BODY','PROCEDURE')

--AND text like'%&SQL_PART%'

AND lower(text) like'%'||lower('&SQL_PART')||'%';

从结果里能看出TOP SQL在哪个存储过程的第几行。

看完文章的介绍,请大家到各自负责的系统里去手工执行下上面的TOP SQL查询语句,当回DBA发现下系统中潜在的问题吧。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表