SQL Server会话进入挂起状态

时间:2018-03-29 22:21:25

标签: sql-server

环境是SQL Server 2014,64gb RAM,6个处理器。 2TB磁盘,具有近400GB的可用空间。

我有一个由job调用的过程。它创建临时表,然后将多个维表连接到该表并插入到事实表中。它运作干净,直到星期一运行2到10分钟。星期一,它持续了近5个小时,没有做任何事情。空闲进程为98%,无读取无写入,状态暂停。没有锁,没有阻塞会话,几乎没有任何我可以说是罪魁祸首。

一旦被调用,它立即进入暂停状态,我无法找到原因。它本来应该等待什么,但我无法找到它正在等待的东西。它阻止了整个过程,并且没有加载任何数据。

我真的很感激帮助。

3 个答案:

答案 0 :(得分:1)

进程进入挂起模式,因为它等待系统资源可用。具体到那个资源在你的情况下,我不确定。如果你重新运行它并且它继续发生,我会在程序上运行一个探查器跟踪,看看它在被暂停时正在做什么。

答案 1 :(得分:1)

@XObi Mark, 简而言之,您需要查看等待类型和查询计划。这是一个捕获查询计划详细信息的查询:

var fullprice = parseInt(price) + 150;

要分析等待类型,请按照Marcello Miorelli和steoleary的链接建议。

How to find out why the status of a spid is suspended? What resources the spid is waiting for?

答案 2 :(得分:0)

Tnx全部用于您的输入,我尝试了上述查询并检查了您提供的有用链接。它确实给了我很多信息。 我终于找到了原因。似乎有问题的程序从日期表中获取日期的效率非常低。它用了 SELECT max(date)FROM d_date WHERE date_id = @myDateFrom 在表中,date_id是整数,而日期是,日期。 这个最大值使查询瘫痪。我意识到通常它用于确保只从表返回一行,但在这种情况下,即使没有max,也只能从d_date表中检索一行。从查询中删除max会将执行时间返回到大致先前的值。

谢谢大家的努力。

奥比马克