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


    今天产品线的一个同事过来,说在某台数据库服务器上有两个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进程内存不足,所以就莫名死掉了。

    当然,最后的结论比较牵强,也纯属推测,需要我们更改数据库服务器的最大内存使用量,然后再看看以后还会不会出现类似的错误...

  • 相关阅读:
    求取32位无符号整数中最低位位值为1的位置 && 求取32位无符号整数中最高位位值为1的位置
    交换寄存器中的相应字段
    NDK与JNI
    plt_0
    32位无符号整数平方根
    提取 主 设备号
    爱江山更爱美人
    mysql oracle sqlserver 数据库分页
    详解JDBC驱动的四种类型
    oracle sqlplus 中的清屏命令
  • 原文地址:https://www.cnblogs.com/xingyukun/p/1124740.html
Copyright © 2020-2023  润新知