您的位置:首页 > 其它

一个job运行问题的排查过程

2008-03-27 10:20 330 查看
今天产品线的一个同事过来,说在某台数据库服务器上有两个job似乎是死在那里了,几个小时了,看状态一直是Executing。这种Debug的事情肯定轮不到我这样的新手,但我站在manager的身后,大概学习了一下他的排查过程。

1.运行 sp_who2, 看看有没有什么其他的进程阻塞了这个job

结果:没有发现,甚至也没发现这个job和数据库服务器间的连接。(job本身是一个SSIS的应用,用来把数据从文件加载入数据库)

2.运行 dbcc opentran

可能是怕有事务的死锁之类的东西吧,反正也没有看出结果

3.dbcc imputbuffer(spid)

查了一下文档,才知道这是用来返回一个客户进程发送给一个sql server实例的最后一个语句

4.远程登录到数据库服务器上,查看 DTExec.exe 进程的资源占用情况

我们的数据库服务器是64位的,而这个命令是在64位机上部署或者运行SSIS包的工具,这里有一个简单的调用示例:

EXEC xp_cmdshell 'dtexec /f "C:\UpsertData.dtsx"'

结果:也没有太多发现

5.接下来就是仔细分析msdb里面的记录job执行情况的表

select * from sysjobhistory

select * from sysjobs

最后的结论是,发现这两个job在启动的时候,另外还有一个job也在启动。如上面所说,这些job都要运行ssis的包,需要适量内存;而在我们的数据库服务器上,我们给sql server所能使用的内存设置了一个最大值。这就可能出现一个情况,就是sql server把所有内存都吃掉了,导致ssis进程内存不足,所以就莫名死掉了。

当然,最后的结论比较牵强,也纯属推测,需要我们更改数据库服务器的最大内存使用量,然后再看看以后还会不会出现类似的错误...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: