暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Oracle中,如何监控数据库中的非常耗费性能SQL语句?

DB宝 2019-10-28
1006


题目部分

在Oracle中,如何监控数据库中的非常耗费性能SQL语句?


     

答案部分


在前边的触发器章节中介绍了如何利用系统触发器监控用户的登陆登出问题,并且可以记录所有的数据库DDL语句,这对数据库的安全审计是非常有帮助的。利用触发器还可以限制用户在某一段固定时间才能登陆数据库。接下来介绍一下如何利用SQL的实时监控特性来监控数据库中的非常耗费性能SQL语句。

由于V$SQL_MONITORV$SQL_PLAN_MONITOR收集的信息每秒刷新一次,接近实时。当SQL执行完毕,信息并不会立即从V$SQL_MONITOR中删除,至少会保留1分钟。所以,根据这两个视图的数据来源及保留策略,可以写一个轻量级的JOB来针对性的监控这两个视图。从而可以实现监控:执行时间超过N小时、笛卡尔积SQL监控、分区表全分区扫描、SQL执行次数、解析次数过大、占用CPU过大等类型的SQL监控。至于消耗小于5秒的CPUI/O时间的SQL语句一般都是非常高效的,所以不用监控。

考虑到定时任务对Oracle数据库性能的影响,所以,可以通过Oracle的轻量级JOB来实现的。OracleJOB分为一般性的JOB和轻量级的JOBLightweight Jobs)。使用轻量级的JOB可以提高JOB的性能。因为轻量级JOB适合于在短时间内执行非常频繁的JOB

整个监控脚本如下所示:

该脚本中有视图也有表。若想直接查询数据库耗费性能的SQL语句,可以直接使用视图VW_SQL_PP_LHR进行查询。若想查询历史记录,则可以通过表XB_SQL_MONITOR_PP_LHR来查询。另外,对于监控中使用的参数表为XB_SQL_PARAMETERS_LHRJOB每次都会从该表中读取到配置参数的值,该表的查询结果如下图所示:

下面简单测试一下上边的监控脚本的效果。首先构造一个笛卡尔积连接的SQL,并开启并行。再构造一个锁等待的SQL。如下所示的3SQL语句:

1① SELECT /*+ monitor parallel(20)*/ COUNT(*) 
2   FROM DBA_OBJECTS A,DBA_OBJECTS B,DBA_OBJECTS C,DBA_OBJECTS D;
3② UPDATE  /*+ MONITOR */ XB_SQL_MONITOR_LHR T SET T.SQL_TEXT='XXXXXXXXXXXX';
4③ UPDATE  /*+ MONITOR */ XB_SQL_MONITOR_LHR T SET T.SQL_TEXT='XXXXXXXXXXXX';

让以上3SQL在不同的会话运行,等待大约5分钟后然后查看监控效果。

首先查询视图VW_SQL_PP_LHR

从结果可以很明显的看出,会话(28583)在等待锁,而会话(133,437)阻塞了会话(28583)。对于会话(291207)可以看出,由于开了20个并行,所以导致系统CPU不足,所有的会话均在等待CPU资源,而且该会话的SQL语句产生了笛卡尔积、并行数过多、COST花费过大等问题。

对于该JOB的性能,由于作者从多个方面做了优化,所以基本不影响数据库的运行。下面是该JOB的运行日志:

 1SELECT JRD.LOG_ID,
2       JRD.JOB_NAME,
3       N.JOB_CLASS,
4      TO_CHAR(JRD.ACTUAL_START_DATE, 'YYYY-MM-DD HH24:MI:SS') ACTUAL_START_DATE,
5       TO_CHAR(JRD.LOG_DATE, 'YYYY-MM-DD HH24:MI:SS') LOG_DATE,
6       JRD.STATUS,
7       JRD.ERROR#,
8       JRD.RUN_DURATION 运行时长,
9       JRD.ADDITIONAL_INFO
10  FROM DBA_SCHEDULER_JOB_LOG N, DBA_SCHEDULER_JOB_RUN_DETAILS JRD
11 WHERE N.LOG_ID = JRD.LOG_ID 
12   AND N.JOB_NAME LIKE 'JOB_SQL_%' 
13 ORDER BY JRD.LOG_ID DESC;

JOB运行日志如下图所示:

查询监控表XB_SQL_MONITOR_PP_LHR也可获取相应的监控信息,这里不再演示。

& 说明:

有关SQL监控的更多内容可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-1262559/


本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗



---------------优质麦课------------

详细内容可以添加麦老师微信或QQ私聊。



About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。


最后修改时间:2020-01-10 17:43:45
文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论