paulxie
作者paulxie·2013-01-08 10:34
数据库管理员·CMBC

数据库监控手段(原)

字数 1335阅读 2855评论 6赞 0

数据库调优在我心中是DBA的最强杀手锏了,然而要进行数据库调优要首先定位数据库性能瓶颈,所以数据库监控就是我们首当其冲要解决的问题了。本文记录了我监控数据库使用到的方法,做一个备忘同时也希望和关注我博客的朋友一起经验分享,真心希望朋友们能留下你监控数据库的方法。

1.监控应用程序

db2 list applications

此工具经常使用,不过今天仔细研究了一下Application Id字段,发现一些曾经忽略的信息。按照infocenter中appl_id的介绍,盖子段分三部分:ip+port+timestamp。只是这么简单,没细说,今天使用netstat -an跟踪了一下,原来ip是客户端的ip地址(不稀奇),port是客户端的端口(刚醒悟),timestamp是连接时间(标准时间),需要加8小时才是当前系统时间(新大陆)。由netstat命令看到客户端的不同的ip和port连接的都是数据库服务器的50000端口(有可能是其它的,不过应该是dbm配置的数据库监听端口)。最重要的来了:web应用服务器使用连接池连接数据库服务器,每打开一个前台页面,这里ip地址显示的不是打开页面的客户端的ip地址,而应该是应用服务器的ip地址,如果很多连接进入应该能看到多个来自web应用服务器ip的连接(猜测),不是很清楚连接池的机制,需要进一步探索。如果需要知道客户端进程id(即pid),可以使用db2 "select agent_id,client_pid from sysibmadm.applications",或者使用db2pd -agent 其中Client PID即是。

2.查找正在执行的SQL

找到application_handle(agent_id的别名)正在执行的sql,或是找到UNIX中的某PID正在执行的sql。

方法一:

通过db2pd -edus interval=10 top=10来找到10秒内耗用cpu时间最多的edus;使用db2pd db=sample -agent AgentId(注:这里的AgentID即edus输出中的EDU ID,也是agent输出中的AgentEDUID)找到对应的AppHandle;使用db2pd -db sample 

-applications (注:这里参数可以是第二步得到的apphandle或是第一步的agentid)得到AnchID;最后使用db2pd -db sample

-dynamic anch=AnchID得到所需的SQL语句。

方法二:

使用db2top -d sample

查看Bottle子窗口(B)或session子窗口(l)找到目标Agent id,然后输入“a”选项输入agent id即可找到对应的sql。

方法三:

V9.7中可以使用视图:select * from sysibmadm.mon_current_sql;

方法四:

如果已知的是unix中的pid,那么可以使用db2pd -agents,此pid对应的是ClientPid列,然后通过AppHandle继续查找SQL;db2top工具中的session子窗口中也有该列(需要使用“左右”键显示隐藏列)

つづく

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论6 条评论

donggua36donggua36数据库管理员lz
2013-03-03 09:23
如果能知道客户端进程ID,就非常好了
oasis_moasis_m软件开发工程师mxm
2013-02-26 15:54
mark
uuuyanguuuyang数据库管理员中国移动
2013-02-05 21:37
一起学习!贵在分享
zj306261655zj306261655数据库管理员adm
2013-02-04 15:10
ip确实是应用服务器连接的ip地址,端口也是应用的端口,如果想看数据库的端口,倒是可以使用netstat -an|grep ...查看
topicisdb2topicisdb2软件开发工程师topicis
2013-01-29 10:42
长见识了,mark下
詹氏归来詹氏归来数据库管理员IT公司
2013-01-28 17:59
不错
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

X社区推广