DB2中在诊断日志db2diag.log中出现某些字符串时,自动抓取您想要的数据
来源:互联网 发布:马克斯cms标签 编辑:程序博客网 时间:2024/06/03 22:50
DB2可以设置,在诊断日志db2diag.log中出现某些字符串时,自动抓取您想要的数据。
比如,您想要在db2diag.log中出现'lock escalation'时,自动收集所有应用的snapshot和db2pd -locks的数据:
发生锁升级时,db2diag.log示例如下:
2017-07-11-00.03.05.697614-420 E98324E966 LEVEL: Info
PID : 23570 TID : 140136465557248 PROC : db2sysc 0
INSTANCE: inst105 NODE : 000 DB : SAMPLE
APPHDL : 0-9 APPID: *LOCAL.inst105.170711070207
AUTHID : INST105 HOSTNAME: db2a
EDUID : 18 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, data management, sqldEscalateLocks, probe:1
MESSAGE : ADM5501I DB2 is performing lock escalation. The affected application
is named "db2bp", and is associated with the workload name
"SYSDEFAULTUSERWORKLOAD" and application ID
"*LOCAL.inst105.170711070207" at member "0". The total number of
locks currently held is "104", and the target number of locks to hold
is "52". The current statement being executed is "select * from t1
with RS". Reason code: "1"
DATA #1 : Hex integer, 8 bytes
0x830000000004003A
抓取的办法如下,
1.)将db2cos文件从sqllib/bin目录拷贝到sqllib/adm目录,并确保所有人都有执行权限,
2.)修改db2cos的"DIAGSTRING"部分,这里主要是修改为抓取数据的命令:
3). 使用db2pdcfg命令,开启监控,diagstr设置为"lock escalation", count=1表示只在第一次出现lock escalation时收集数据
db2diag -A
db2pdcfg -catch diagstr="lock escalation" count=1
4) 等出现lock escalation之后,并闭db2cos
db2pdcfg -catch clear
5) 收集的数据可以在db2dump目录下找到,其中snapshot的数据放在*.cos.txt中,db2pd-locks的数据放在了db2pd.locks中
*.cos.txt
db2diag.log
db2pd.locks
其实,db2cos不止可以根据db2diag.log中的字符串搜索来触发数据自动收集,还可以根据其中的报错码,以上面的db2diag.log为例子,报错码为ADM5501I 。具体使用可以参考下面的链接
https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0023252.html
http://www-01.ibm.com/support/docview.wss?uid=swg21684132
附:如何快速模拟一个锁升级
inst105@db2a:~$ cat lockEscltn.sh
#!/bin/bash
db2 "update db cfg for sample using LOCKLIST 4"
db2 "connect to sample"
db2 "drop table t1"
db2 "create table t1(id int)"
db2 "insert into t1 values(1),(2)"
for i in {1..10}
do
db2 "insert into t1 select * from t1"
done
db2 "select * from t1 with RS"
比如,您想要在db2diag.log中出现'lock escalation'时,自动收集所有应用的snapshot和db2pd -locks的数据:
发生锁升级时,db2diag.log示例如下:
2017-07-11-00.03.05.697614-420 E98324E966 LEVEL: Info
PID : 23570 TID : 140136465557248 PROC : db2sysc 0
INSTANCE: inst105 NODE : 000 DB : SAMPLE
APPHDL : 0-9 APPID: *LOCAL.inst105.170711070207
AUTHID : INST105 HOSTNAME: db2a
EDUID : 18 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, data management, sqldEscalateLocks, probe:1
MESSAGE : ADM5501I DB2 is performing lock escalation. The affected application
is named "db2bp", and is associated with the workload name
"SYSDEFAULTUSERWORKLOAD" and application ID
"*LOCAL.inst105.170711070207" at member "0". The total number of
locks currently held is "104", and the target number of locks to hold
is "52". The current statement being executed is "select * from t1
with RS". Reason code: "1"
DATA #1 : Hex integer, 8 bytes
0x830000000004003A
抓取的办法如下,
1.)将db2cos文件从sqllib/bin目录拷贝到sqllib/adm目录,并确保所有人都有执行权限,
2.)修改db2cos的"DIAGSTRING"部分,这里主要是修改为抓取数据的命令:
"DIAGSTRING") echo "Diag String Caught" >> $logfile cd $diagpath if [ ! -n "$database" ] then db2 get snapshot for all applications >> $logfiledb2pd -db $database -locks >> db2pd.locks else db2 get snapshot for all applications >> $logfiledb2pd -db $database -locks >> db2pd.locks fi ;;
3). 使用db2pdcfg命令,开启监控,diagstr设置为"lock escalation", count=1表示只在第一次出现lock escalation时收集数据
db2diag -A
db2pdcfg -catch diagstr="lock escalation" count=1
4) 等出现lock escalation之后,并闭db2cos
db2pdcfg -catch clear
5) 收集的数据可以在db2dump目录下找到,其中snapshot的数据放在*.cos.txt中,db2pd-locks的数据放在了db2pd.locks中
*.cos.txt
db2diag.log
db2pd.locks
其实,db2cos不止可以根据db2diag.log中的字符串搜索来触发数据自动收集,还可以根据其中的报错码,以上面的db2diag.log为例子,报错码为ADM5501I 。具体使用可以参考下面的链接
https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0023252.html
http://www-01.ibm.com/support/docview.wss?uid=swg21684132
附:如何快速模拟一个锁升级
inst105@db2a:~$ cat lockEscltn.sh
#!/bin/bash
db2 "update db cfg for sample using LOCKLIST 4"
db2 "connect to sample"
db2 "drop table t1"
db2 "create table t1(id int)"
db2 "insert into t1 values(1),(2)"
for i in {1..10}
do
db2 "insert into t1 select * from t1"
done
db2 "select * from t1 with RS"
阅读全文
0 0
- DB2中在诊断日志db2diag.log中出现某些字符串时,自动抓取您想要的数据
- 在windows系统中,DB2 日志db2diag.log 在什么地方?
- DB2 db2diag.log 日志分析
- DB2 db2diag.log 日志分析
- 使用db2diag过滤DB2诊断日志
- db2diag.log的资料收集(DB2日志文件)
- db2diag.log的资料收集(DB2日志文件)
- JavaScript: 在 /* */ 中输出想要的字符串
- DB2在导入数据时,如果数据量过大,出现事务日志满的错误(Database transaction log is full)该如何解决,commitcount使用
- DB2diag日志的路径
- LOG日志的抓取
- 在CString中如何获取自己想要的字符串
- 在字符串中抓取数字
- 抓取页面想要的数据
- db2diag.log
- DB2/Oracle/SQL server判断某个字符串或单个字符在源字符串中出现的位置
- ANR log 日志的抓取
- python中 sgmllib 解析html时的问题(不能区分在javascript 的某些字符串)
- 用Java从MySQL查询数据存到CSV文件
- Python基础之2
- 算法系列——Binary Tree Preorder Traversal
- 利用安卓SQLite修改QQ运动步数方法分享 简单粗暴
- Android开发神器总结
- DB2中在诊断日志db2diag.log中出现某些字符串时,自动抓取您想要的数据
- 常见排序算法整理(一)----冒泡排序、直接插入排序
- 合并有序链表,实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- 镜头畸变现象及其校正方法
- html总结
- 自定义Toast工具类
- DataGridView列自适应宽度
- python06字典
- hive基本操作