2017-10-18 90 views
0

我在SQL Server 2008 R2中有一个非常复杂的存储过程,它将大量数据插入到数据库的多个表中。SQL Server存储过程一直在等待“等待命令”

此过程的副本在其他几台服务器上运行良好。我通常在服务器代理中使用一个作业来运行该过程,但是当我在我的开发服务器上执行此操作时,作业失败,在日志中显示代码片段,但其他内容很少。

当我在作业之外执行存储过程时,活动监视器显示处理为任务状态:“暂停”,命令:“等待命令”和waittype在“IO_Completion”,“PAGEIOLatch_SH”和空白之间交替。

This page表明可能有内存分配的问题,但磁盘上仍有9gb写入数据和日志(数量不多,但应该足够了)。

有没有人知道等待类型IO_Completion在执行存储过程的上下文中意味着什么?

+0

您已询问X,Y问题。如果你发布了proc和错误,你将有更好的机会得到你的* actual *问题的答案。 – scsimon

+1

[PAGEIOLATCH_SH](https://www.sqlskills.com/help/waits/pageiolatch_sh/)通常是等待数据页从磁盘或内存中读取的系统。 [IO_COMPLETION](https://www.sqlskills.com/help/waits/io_completion/)通常是等待从磁盘或内存中读取非数据页面的系统。这不一定表明问题是IO,但是,因为*大部分* SQL Server操作都是IO绑定的。如果你真的想挖掘它,你可以从这里开始(https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/),但它可能是一只红鲱鱼。 –

+1

不知道你的开发系统的配置,真的很难说这个问题是什么。这听起来像是你已经将日志和数据文件都放在同一个磁盘上了,如果你还没有预先生成文件,这不会对大插入有帮助。如果你的开发系统没有太多的内存,这可能是内存耗尽的问题。它也可能是tempdb争用,因为这是SQL Server在需要临时空间时使用的。 –

回答

0

当我取消正在运行的存储过程时,它确实打印了一个容易解决的错误。看起来,内存不足导致服务器无法正确返回错误,导致它陷入“等待命令”等待状态。