is包作业总是超时,有啥好的解决办法吗

0
QQ图片20131206111201.jpg QQ图片20131206111237.jpg QQ图片20131206135457.jpg
已邀请:
0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2013-12-06 回答

  1. 首先就是检查一下这个DeadLock的日志。可以用DBCC命令。
  2. 根据Log提示的信息进行Job,procedure 等的查找 顺藤摸瓜。
  3. 看看是哪个job内的TSQL导致了你DeadLock

具体如何查找DeadLock 以及如何判断,可以去网上找找 或者 参考梁总的文档。

最后说一下,查找DeadLock已经要有耐心。
2种办法
  1. 利用 DBCC进行log收集,在你无法判断DeadLock几时会发生的情况下。
  2. 如果可以直接重现Deadlock, 那么可以用SQLProfile 或者 SP_LOCK 之类的命令帮助你。具体的命令的信息,可以去网上百度一下,篇幅有限这里就不多说了。
0

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-06 回答

能不能把上下文环境也说一下,比如是用 Loop Container ,还是几个 Task 在并行运行等等描述一下。

第二个是发生死锁了,两个事务都在同时抢一个资源,因此有一个事务自动的被系统断掉了,就可能引起发生上面的这种错误。

具体发生死锁的原因你可以通过 SQL Profiler 跟踪一下,看看到底是哪些 SQL 语句引起死锁的。
0

Pearl 2013-12-06 回答

同时有几个作业在跑,其他的作业没有超时。
0

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-12-06 回答

对,那这就是死锁造成的原因。几个作业同时在跑,其中肯定有两个作业同时去访问了某个资源,比如说表数据。一个可能在修改,另外一个可能也需要做某种操作,于是就有可能造成死锁。死锁的时候,系统为了避免这种资源互相锁住的情况,在两者之中主动的断掉其中的一个请求,另外一个继续正常运行。因此,其中有一个作业肯定是断掉链接或者请求失败的。

你可以使用 SQL Profiler 跟踪一下,只开启 Deadlock 下的几个Event -
Deadlock Graph
Lock:Deadlock
Lock:Deadlock Chain
然后下次作业同时在跑的时候如果再发生死锁就能看到是哪些 SQL 语句引起的了,相应的你要处理这些 SQL 语句,避免死锁。

还有一种解决方法就是,如果这个作业执行失败了,那么可以在计划中安排它重新执行。或者干脆把几个作业的执行计划分开安排,如果没有这种时效性特别强的要求可以完全依次执行或者时间错开。
0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2013-12-10 回答

同楼上,使用 SQLProfile 并且只看 DeadLock Event.
不过 如果你这个问题,不能立刻重现的话,最好不要使用SQLProfile来看(当然一直开着SQLProfile也可以,不过不推荐)。

还是我之前说的 你可以先使用
DUMP TRANSACTION 库名 WITH NO_LOG
命令 清除当前所有log, 然后使用 dbcc traceon (1222, -1) 收集 Deadlock Event
就是 撒网,然后收网的过程。

另外下面这个链接也许对你有帮助(对于deacklock的分析非常详细),之前梁总提供的文档里也有很详细的记载:
http://blogs.msdn.com/b/apgcds ... .aspx

要回复问题请先登录注册