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_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的更多相关文章
- 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> 本篇是大结局,看过前两篇的放心吧,不会有 ...
随机推荐
- shell while内获取外部变量内容
一.问题 问题很简单,看下面一段tmp.sh代码: #!/bin/sh x="this is the initial value of x" cat /tmp/tmp | whil ...
- Spark机器学习(5):SVM算法
1. SVM基本知识 SVM(Support Vector Machine)是一个类分类器,能够将不同类的样本在样本空间中进行分隔,分隔使用的面叫做分隔超平面. 比如对于二维样本,分布在二维平面上,此 ...
- 基于Centos搭建Python Web 环境搭建教程
CentOS 7.2 64 位操作系统 安装 setuptools 工具 安装 因为之后我们需要安装 Django ,而 Django 需要用这个工具,所以我们需要先安装 setuptools 工具. ...
- 【Linux】ps命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- 谈谈MySQL的do语句
[select在某些场景下的不足] 比如说我们想让MySQL暂停5秒.那么可以这样写 ); +----------+ ) | +----------+ | +----------+ row in se ...
- Git教程学习(四)
12. 分支管理场景 多人协同工作时,你在优化代码X,需要较长时间才能完成,未完成之前会影响整体代码的使用.于是写完的代码不能提交到版本库,提交就会影响别人使用整体的代码.不提交你就失去了git的版本 ...
- (1) Mysql高性能优化规范建议
数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意 ...
- linux每日命令(8):mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 一.命令格式: mv [选项] 源文件或目 ...
- JVM:基础
参考 温绍景-Java虚拟机基础
- Go_14:GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...