db2 MON_GET_PKG_CACHE_STMT 表函数 抓取分析SQL
MON_GET_PKG_CACHE_STMT 表函数
还可以使用 MON_GET_PKG_CACHE_STMT 表函数来查询当前 PACKAGE CACHE 中 SQL 语句(包括动态 SQL 和静态 SQL)的执行信息,这是一个非常强大的工具,能够返回非常多的信息包括各种时间信息,例如语句执行过程总的等待时间、等待锁的时间、等待排序的时间等等。当发现语句执行时间长时,可以用这个表函数来分析时间的分布情况,是消耗在等待上还是读数据上或者其他因素。查询语句如清单 2 所示,结果在图 4 中。清单 2 的语句并不是直接查询表函数来显示结果,而是计算了每个语句的平均执行时间,以及各项等待时间在总的执行时间的百分比,这样结果更直观一些,但需要注意的是示例查询中只选择了一部分字段,还可以根据情况增加更多的字段,例如增加 TOTAL_EXTENDED_LATCH_WAIT_TIME 来查看 LATCH 等待时间。
清单 2. 使用 MON_GET_PKG_CACHE_STMT 表函数
|
1
2
3
4
5
6
7
8
9
10
11
12
|
db2 +w "SELECT MEMBER,NUM_EXECUTIONS,STMT_EXEC_TIME,decimal((TOTAL_ACT_WAIT_TIME / double(STMT_EXEC_TIME)) * 100, 5, 2) as pct_wait,decimal((POOL_READ_TIME / double(STMT_EXEC_TIME)) * 100, 5, 2) as pct_read,decimal((LOCK_WAIT_TIME/double(STMT_EXEC_TIME)) * 100, 5, 2) as pct_lock,decimal((LOG_DISK_WAIT_TIME / double(STMT_EXEC_TIME)) * 100, 5, 2) as pct_log,decimal((TOTAL_SECTION_SORT_TIME / double(STMT_EXEC_TIME)) * 100, 5, 2) as pct_sort,CAST(FLOAT(STMT_EXEC_TIME)/FLOAT(NUM_EXECUTIONS) as decimal(10,3)) as AVG_EXEC_TIME,VARCHAR(STMT_TEXT,500) AS STMT_TEXTFROM TABLE(MON_GET_PKG_CACHE_STMT(NULL,NULL,NULL,-2))WHERE NUM_EXECUTIONS >1 and STMT_EXEC_TIME>0" |
图 4. MON_GET_PKG_CACHE_STMT 查询结果

在图 4 中可以看到,这些语句的 AVG_EXEC_TIME(平均执行时间)在 2~6 秒不等,其中有 5 条语句(with 开头的语句)的 PCT_WAIT 在 95%以上,也就是说这 5 条的执行时间花在了等待上,但是等待的不是 READ、Lock、写事务日志或者排序,而且别的原因。在清单 2 语句的基础上继续增加查询字段,会发现这些语句是在等待 LATCH 上。另外 5 条语句都是调用存储过程的,从这里看不出来时间分布。
结合多种方式获取的 SQL 语句来看,有多条 SQL 语句执行时间为 3~6 秒,对于 OLTP 系统这已经是非常慢了,在并发量稍大的情况就会出现 ACTIVE SESSION 数量高。这些慢的语句中有一部分是因为 LATCH 等待,还有一部分没有等待。这时候可以开始着手优化 SQL,作者也确实这样做了,先是快速的通过创建索引解决了几个有全表扫描的 SQL,然后又去梳理并且尝试优化那些很长且逻辑复杂的 SQL 语句。但是,那些逻辑复杂的长 SQL 并不是最近才上线的啊,会不会以前也是这么慢,最近没有应用程序变更啊(也没有数据库变更),现在努力的方向不对吧。。。及时的打住,进行思考。
快速排除法
可以快速的排除数据库服务器资源问题,CPU 利用率在正常范围内,操作系统内存使用量正常。根据 db2top 结果(如图 1)快速的判断数据库缓冲池命中率(HitRatio)正常,没有 LOCK WAIT,从右下角四个参数 AvgPRdTime(Average Physical Read time),AvgDRdTime(Average Direct Read Time),AvgPWrTime(Average Physical Write time)和 AvgDWrTime(Average Direct Write time)可以判断 I/O 正常。注意到 Deadlocks 为 218,但这是一个累计值而且不会影响性能,还注意到有 SortOvf(Sort Overflow)为 10,有点儿高但考虑到应用程序的 SQL 语句用了较多的排序,所以有一些排序溢出应该不是主要问题。
db2 MON_GET_PKG_CACHE_STMT 表函数 抓取分析SQL的更多相关文章
- SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享
SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] G ...
- SQL Server定时自动抓取耗时SQL并归档数据脚本分享
原文:SQL Server定时自动抓取耗时SQL并归档数据脚本分享 SQL Server定时自动抓取耗时SQL并归档数据脚本分享 第一步建库 USE [master] GO CREATE DATABA ...
- 数据抓取分析(python + mongodb)
分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...
- python数据抓取分析(python + mongodb)
分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...
- 组件 layui 表单抓取数据四步走
注意事项: layui 中提交按钮是基于"监听"机制实现的. form.on() 的调用需置于 layui.use 的回调函数中. 末尾的 'return false' 不可或缺, ...
- java爬虫--jsoup简单的表单抓取案例
分析需求: 某农产品网站的农产品价格抓取 网站链接:点击打开链接 页面展示如上: 标签展示如上: 分析发现每日价格行情包括了蔬菜,水果,肉等所有的信息,所以直接抓每日行情的内容就可以实现抓取全部数据. ...
- 【DB2】表函数监控数据库
1.快照表函数 在DB2 V9中能够使用SQL表函数捕获快照,以下是部分表函数列表: 快照表函数 返回的信息 SNAPSHOT_DBM ...
- php中封装的curl函数(抓取数据)
介绍一个封闭好的函数,封闭了curl函数的常用步骤,方便抓取数据. 代码如下: <?php /** * 封闭好的 curl函数 * 用途:抓取数据 * edit by www.jbxue.com ...
- 抓取分析网页批量下载评书(3)之批量下载mp3
本系列目录: <1.搜索有声小说> <2.分析详细页地址> <3.批量下载mp3> 本篇是大结局,看过前两篇的放心吧,不会有 ...
随机推荐
- redis 基本信息查询
在客户端可以用telnet命令 telnet ip port 再输入info 返回如下信息:
- 迷你音乐播放器v1.0正式上线!
迷你音乐播放器V1.0正式上线! 版本介绍: 1.随机播放切换开关(通过点击专辑图片) 2.通过拖动歌曲名及艺术家名调整歌曲播放进度 3.手机浏览访问支持熄屏播放 4.暂不支持在线搜索功能 快来一起分 ...
- mysql 物理数据存放
报错误:1030 - Got error 28 from storage engine 3.在系统中查看/tmp是否已经满了: [root@localhost /]# df /tmp/ Filesys ...
- SNF快速开发平台MVC-审核流,审核完成后会给下一个审核人发邮件,下一个审核人可以不登录系统,在邮件里进行审核处理
审核流设计和使用参考以下资料: 审核流设计 http://www.cnblogs.com/spring_wang/p/4874531.html 审核流实例 http://www.cnblogs.com ...
- 关于c语言的左移运算
对于任意w位的二进制,进行k位的移动时,真实的位移量为k mod w 32bit的例子 1 << 1 结果2 1 mod 32 => 11 << 32 结果1 32 mo ...
- JAVA(三)JAVA常用类库/JAVA IO
成鹏致远 | lcw.cnblog.com |2014-02-01 JAVA常用类库 1.StringBuffer StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不 ...
- packetfence 7.2网络准入部署(一)
packetfence 是一款内网准入软件,刚开始研究的时候也是一脸懵逼,资料少的可怜,前后玩了几个月,中途很多次都想放弃了,填完了很多坑,最后也算是成功了 好了,今天就讲一下packetfence所 ...
- java 的nio与io对比
转:本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档.这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性.Java.nio提 ...
- 施工测量中Cad一些非常有用的插件
经常会遇到坐标在cad中批量展点.从cad中批量保存坐标点.导入cad中的坐标怎么才能有点号,怎么快速标注cad里的坐标点··· ··· 这一切都是可以程序化的,cad是可以二次开发的,我经常用易语言 ...
- 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
实验原理: 按键的一端与STM32的GPIO(PB9)相连,且PB9外接一个1k大小的限流上接电阻. 初始化时把PB9设置成输入模式,当按键弹起时,PB9由于上拉电阻的作用呈高电平(3.3V): 当按 ...