数据库调优在我心中是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 条评论
2013-03-03 09:23
2013-02-26 15:54
2013-02-05 21:37
2013-02-04 15:10
2013-01-29 10:42
2013-01-28 17:59