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_TEXT
FROM 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的更多相关文章

  1. SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享

    SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] G ...

  2. SQL Server定时自动抓取耗时SQL并归档数据脚本分享

    原文:SQL Server定时自动抓取耗时SQL并归档数据脚本分享 SQL Server定时自动抓取耗时SQL并归档数据脚本分享 第一步建库 USE [master] GO CREATE DATABA ...

  3. 数据抓取分析(python + mongodb)

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...

  4. python数据抓取分析(python + mongodb)

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...

  5. 组件 layui 表单抓取数据四步走

    注意事项: layui 中提交按钮是基于"监听"机制实现的. form.on() 的调用需置于 layui.use 的回调函数中. 末尾的 'return false' 不可或缺, ...

  6. java爬虫--jsoup简单的表单抓取案例

    分析需求: 某农产品网站的农产品价格抓取 网站链接:点击打开链接 页面展示如上: 标签展示如上: 分析发现每日价格行情包括了蔬菜,水果,肉等所有的信息,所以直接抓每日行情的内容就可以实现抓取全部数据. ...

  7. 【DB2】表函数监控数据库

    1.快照表函数 在DB2 V9中能够使用SQL表函数捕获快照,以下是部分表函数列表: 快照表函数                           返回的信息 SNAPSHOT_DBM        ...

  8. php中封装的curl函数(抓取数据)

    介绍一个封闭好的函数,封闭了curl函数的常用步骤,方便抓取数据. 代码如下: <?php /** * 封闭好的 curl函数 * 用途:抓取数据 * edit by www.jbxue.com ...

  9. 抓取分析网页批量下载评书(3)之批量下载mp3

         本系列目录:    <1.搜索有声小说>    <2.分析详细页地址>     <3.批量下载mp3>      本篇是大结局,看过前两篇的放心吧,不会有 ...

随机推荐

  1. 微软BI 之SSIS 系列 - 理解Data Flow Task 中的同步与异步, 阻塞,半阻塞和全阻塞以及Buffer 缓存概念

    开篇介绍 在 SSIS Dataflow 数据流中的组件可以分为 Synchronous 同步和 Asynchronous 异步这两种类型. 同步与异步 Synchronous and Asynchr ...

  2. NuGet Package Explorer

    https://www.microsoft.com/zh-cn/store/p/nuget-package-explorer/9wzdncrdmdm3?ocid=badge&rtc=1

  3. 用 CPI 火焰图分析 Linux 性能问题

    https://yq.aliyun.com/articles/465499 用 CPI 火焰图分析 Linux 性能问题   yangoliver 2018-02-11 16:05:53 浏览1076 ...

  4. 单片机成长之路(51基础篇) - 017 C51中data,idata,xdata,pdata的区别(转)

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

  5. 11G新特性 -- RMAN Multisection Backups

    Oracle 11g支持以sections的方式来备份和还原数据文件.在section级别进行备份,被称作multisection backup(多段备份).section是一个数据文件中连续的块.m ...

  6. selenium是如何启动浏览器的

    前几天有同学问到selenium是怎么样启动浏览器的(selenium启动浏览器的原理),当时稍微讲解了一下,不过自我感觉不够具体,现在特地把启动原理通过代码和一系列操作给串联起来,希望可以帮助大家更 ...

  7. Atitit  技术经理职责与流程表总结

    Atitit  技术经理职责与流程表总结 1. (最重要) 理念 价值观建设  ***团队文化建设2 1.1. 加强跨项目组员沟通 ,防止重复劳动2 1.2. 活动聚餐2 2. (重要)方向建设 技术 ...

  8. 每日英语:How To Survive The Windows XPiration Date

    The default background for Microsoft's Windows XP operating system -- a perfect blue sky full of cot ...

  9. Xbox One手柄 + Xbox Wireless Adapter PC无线适配器驱动安装、配对全流程

    以下步骤在Windows 7系统中操作.XBox One手柄+无线适配器并非仅只能在Windows 10中使用. 一点感想:微软的XBoxOne手柄实在是好东西,但产品使用说明与文档实在太垃圾,翻遍官 ...

  10. golang:吐槽multipart的设计

    最近在做邮件解析的工作,因此接触到multipart库,用了之后才发现golang的multipart有一点设计很诡异. 红线标出来的话意思是:当Content-Transfer-Encoding的值 ...