操作系统 windows2008 R2
cpu intel至强 2.0G,16核,双cpu
内存 64G
数据库db2 9.7 64位
故障现象:业务运行隔上一会就要卡一下,间隔的时间不定,从服务器上运行20条VALUES CURRENT TIMESTAMP;正常情况下这20条命令总的执行时间在0.8秒以下,一旦卡的时候就需要运行接近3秒,从操作系统任务管理器上看cpu使用率有个峰值,但是不超过30%,这个服务器上只运行了db2业务,
我使用perfmon性能监视器查看数据库所在的磁盘分区D盘和processor的idle_time计数器,通常情况下,这两个值都在90-100之间波动,cpu的idle_time就时不时的(大约2分钟左右就会出现1-3次)会降低到50,最多的时候降低到10左右,这时候执行VALUES CURRENT TIMESTAMP;就比较慢,有时候d盘的idle_time也会跟cpu的idle_time同时降低,不过出现的频率要低些,而且这种情况在业务繁忙的时候出现的频率要高些,但是在业务完全不忙的时候也会出现,这个问题困扰很久了,还有其他方法可以定位问题吗
请问有没有办法能够在出问题的时候跟踪到是哪个站点的什么语句或操作导致的?
我前段时间已经用下面这个语句把一些效率比较低的sql语句找出来修改或者建了索引了,但是问题依旧
SELECT如果是数据库问题的话,还是比较容易定位的。
问题发生时,抓一下数据:
db2 reset monitor all
db2 get snapshot for dynamic sql on
db2 get snapshot for tables on
db2 get snapshot for db on
db2pd -latches
db2pd -stack all
收起call monreport.DBSUMMARY()收集到的数据都是0 呢,监视器开关都打开并重启了db2了的
For activities 0 0/0
-- Time waiting for next client request --
CLIENT_IDLE_WAIT_TIME = 0
CLIENT_IDLE_WAIT_TIME per second = 0
-- Detailed breakdown of TOTAL_WAIT_TIME --
% Total
--- ---------------------------------------------
TOTAL_WAIT_TIME 100 0
I/O wait time
POOL_READ_TIME 0 0
POOL_WRITE_TIME 0 0
DIRECT_READ_TIME 0 0
DIRECT_WRITE_TIME 0 0
LOG_DISK_WAIT_TIME 0 0
LOCK_WAIT_TIME 0 0
AGENT_WAIT_TIME 0 0
Network and FCM
TCPIP_SEND_WAIT_TIME 0 0
TCPIP_RECV_WAIT_TIME 0 0
IPC_SEND_WAIT_TIME 0 0
IPC_RECV_WAIT_TIME 0 0
FCM_SEND_WAIT_TIME 0 0
FCM_RECV_WAIT_TIME 0 0
WLM_QUEUE_TIME_TOTAL 0 0
Component times
--------------------------------------------------------------------------------
-- Detailed breakdown of processing time --
% Total
---------------- --------------------------
Total processing 100 0
Section execution
TOTAL_SECTION_PROC_TIME 0 0
TOTAL_SECTION_SORT_PROC_TIME 0 0
Compile
TOTAL_COMPILE_PROC_TIME 0 0
TOTAL_IMPLICIT_COMPILE_PROC_TIME 0 0
Transaction end processing
TOTAL_COMMIT_PROC_TIME 0 0
TOTAL_ROLLBACK_PROC_TIME 0 0
Utilities
TOTAL_RUNSTATS_PROC_TIME 0 0
TOTAL_REORGS_PROC_TIME 0 0
TOTAL_LOAD_PROC_TIME 0 0
收起
数据库快照
数据库名称 = EHIS
数据库路径 = D:\DB2\NODE0000\SQL00001\
输入数据库别名 = EHIS
数据库状态 = 活动
目录数据库分区号 = 0
目录网络节点名 =
运行在数据库服务器上的操作系统 = NT 64 位
数据库位置 = 本地
第一个数据库连接时间戳记 = 2015-10-15 18:35:51.791488
上次复位时间戳记 =
上次备份时间戳记 = 2015-01-02 23:00:03.000000
快照时间戳记 = 2015-11-24 09:27:47.730665
自动存储路径数 = 0
用于连接的高水位标记 = 2224
应用程序连接 = 6101450
辅助连接总计 = 54
当前连接的应用程序 = 1965
数据库管理器当前执行的应用程序 = 0
与应用程序相关的代理程序数 = 2001
与应用程序相关的最大代理程序数 = 2224
最大协调代理程序数 = 2224
发生阈值违例的数目 = 0
当前挂起的锁定 = 383
锁定等待 = 3162
数据库等待锁定时间(毫秒) = 未收集
在使用的锁定列表内存(以字节计)= 19440640
检测到死锁 = 0
锁定升级 = 0
互斥锁定升级 = 0
当前正等待锁定的代理程序数 = 0
锁定超时 = 35
不确定事务数 = 0
已分配的专用排序堆总数 = 55
已分配的共享排序堆总数 = 0
共享排序堆高水位标记 = 0
后阈值排序(共享内存) = 未收集
总计排序 = 1006151204
总计排序时间(毫秒) = 未收集
排序溢出 = 4830724
活动排序数 = 2
缓冲池数据逻辑读取 = 69748958975
缓冲池数据物理读取 = 64742870
缓冲池临时数据逻辑读取 = 1100728910
缓冲池临时数据物理读取 = 75688
异步池数据页读取 = 44922273
缓冲池数据写入 = 16021427
异步池数据页写入 = 14999800
缓冲池索引逻辑读取 = 21507312631
缓冲池索引物理读取 = 19213265
缓冲池临时索引逻辑读取 = 0
缓冲池临时索引物理读取 = 0
异步池索引页读取 = 9942806
缓冲池索引写入 = 31369970
异步池索引页写入 = 30354771
缓冲池 xda 逻辑读取 = 15
缓冲池 xda 物理读取 = 2
缓冲池临时 xda 逻辑读取 = 964196
缓冲池临时 xda 物理读取 = 0
缓冲池 xda 写入 = 465
异步池 xda 页读取 = 0
异步池 xda 页写入 = 465
缓冲池总计读取时间(毫秒) = 17635150
缓冲池总计写入时间(毫秒) = 102125877
异步读取总计耗用时间 = 5990106
异步写入总计耗用时间 = 91691546
异步数据读取请求 = 4126961
异步索引读取请求 = 506499
异步 xda 读取请求 = 0
无干扰缓冲区可用 = 30961781
LSN 间隔清除程序触发器 = 5302503
脏页面偷取清除程序触发器 = 1887
脏页面阈值清除程序触发器 = 1666
等待预取的时间(毫秒) = 1254351
未读预取页 = 29244709
直接读取 = 291158390
直接写入 = 59376364
直接读取请求 = 34815692
直接写入请求 = 6689023
直接读取耗用时间(毫秒) = 7521288
直接写入耗用时间(毫秒) = 4994882
关闭的数据库文件数 = 0
主机执行耗用时间 = 未收集
已尝试的落实语句数 = 108860191
已尝试的回滚语句数 = 5994207
已尝试的动态语句数 = 361866322
已尝试的静态语句数 = 128226146
已失败的语句操作 = 478547
选择已执行的 SQL 语句 = 114548919
已执行的 Xquery 语句 = 9
已执行的更新/插入/删除语句 = 23874658
已执行的 DDL 语句 = 45322
不活动语句的历史记录内存使用量(以字节计)= 10180
内部自动重新绑定 = 8
已删除的内部行 = 1219
已插入的内部行 = 278692
已更新的内部行 = 419030
内部落实 = 6625147
内部回滚 = 383
死锁导致的内部回滚 = 0
MDC 表锁定暂挂清除数 = 0
已删除的行 = 9987832
已插入的行 = 16042187
已更新的行 = 17713932
已选择的行 = 13286032965
已读取的行 = 535422620252
已尝试的绑定/预编译 = 30
可用于数据库的日志空间(以字节计) = 1343060826
数据库使用的日志空间(以字节计) = 34301094
已用的最大辅助日志空间(以字节计) = 1238369473
已用的最大总计日志空间(以字节计) = 1363584193
当前已分配的辅助日志 = 0
已读取的日志页 = 459528
日志读取时间(秒.纳秒) = 34.079635521
已写入的日志页 = 48170915
日志写入时间(秒.纳秒) = 47939.042018611
写日志 IO 的数目 = 16445985
读取日志 IO 的数目 = 57476
部分页面日志 IO 的数目 = 8457991
日志缓冲区已满的数目 = 16
缓冲区中找到的日志数据 = 1474047
为了恢复而要重做的日志(以字节计) = 47963380
由脏页产生的日志(以字节计) = 42117445
节点号 = 0
第一个活动日志的文件号 = 2
最后一个活动日志的文件号 = 1
当前活动日志的文件号 = 0
正被归档的日志的文件号 = 不适用
程序包高速缓存查询 = 137478230
程序包高速缓存插入 = 6504799
程序包高速缓存溢出 = 4
程序包高速缓存高水位标记(以字节计) = 2084612394
应用程序节查找 = 375177229
应用程序节插入 = 54814860
目录高速缓存查询 = 112880326
目录高速缓存插入 = 1442
目录高速缓存溢出 = 0
目录高速缓存高水位标记 = 14592021
目录高速缓存统计信息大小 = 0
工作空间信息
散列连接数 = 15300998
散列循环数 = 2967
散列连接溢出数 = 2913
小散列连接溢出数 = 1097
后阈值散列连接(共享内存) = 0
活动散列连接 = 0
OLAP 函数的数目 = 0
发生溢出的 OLAP 函数的数目 = 0
处于活动状态的 OLAP 函数的数目 = 0
统计信息生成 = 未收集
同步 runstats = 未收集
异步 runstats = 未收集
生成统计信息耗用的总时间(毫秒) = 未收集
同步 runstats 耗用的总时间(毫秒) = 未收集
收起我执行db2 reset monitor all命令后执行下面这个命令,发现计数器没有重置呢
SELECT VARCHAR (tabschema, 20) AS tabschema
, VARCHAR (tabname, 20) AS tabname
, sum(table_scans) table_scans
, sum (rows_read) AS total_rows_read
, sum (rows_inserted) AS total_rows_inserted
, sum (rows_updated) AS total_rows_updated
, sum (rows_deleted) AS total_rows_deleted
FROM TABLE (MON_GET_TABLE (\'\', \'\', -2)) AS t
WHERE tabschema=\'ECO\'
GROUP BY tabschema, tabname
ORDER BY total_rows_read DESC
收起