SQL Server查询超时

时间:2014-10-01 12:49:31

标签: sql sql-server sql-server-2008 sql-server-2012 spid

访问SQL Server 2012数据库的第三方应用程序在执行约20分钟后出现[Microsoft][ODBC SQL Server Driver]Query timeout expired错误。

这是我在应用程序开始收到错误后在数据库中看到的内容:

Query Screenshot -1

上面的查询中未显示SPID 102。它是同一应用程序对同一进程的另一种连接。我能够在下面的截图中捕捉到这方面的一些细节。它是此屏幕截图中最顶行的一个。道歉,在截取屏幕截图时,滚动条已向右移动。

Query Screenshot - 2

发生这种情况时,

AutoShrink在此数据库上设置为TRUE

看起来像:

  • 稍后开始的第三方应用程序的几个连接正在等待SPID 27 - 这是一个AUTOSHIRNK命令

  • SPID 27正在等待SPID 102,这是来自同一第三方应用程序的另一个连接

问题:

  • 有没有办法判断自AutoShirnk以来创建的SPID 27与数据库上TRUE的连接是否已设置为{{1}}?

  • 如果是这样,为什么它等待SPID 102,为什么其他连接(83,85,86,88和90)等待27?

根据以下链接中的TechNet文章,AutoShrink不应对数据库上的任何活动产生影响

  

如果数据库的AUTO_SHRINK选项设置为ON,则为数据库   引擎减少了数据库中文件的大小。这项活动   发生在后台,不会影响其中的任何用户活动   数据库。

Shrinking a Database

注意:

  • 目前正在SQL Server 2012 SP1上运行此问题。

  • 当应用程序在SQL Server 2008 SP3上运行数据库时,应用程序中的此过程正常工作。

1 个答案:

答案 0 :(得分:1)

AUTO SHRINK以循环方式工作,如果它在任何数据库上看到可用空间,它会解除分配。

  

虽然它没有像长期阻塞这样的任何影响,但它确实占用了很多资源,包括IO和CPU。它还会通过缓冲池移动大量数据,因此可能会导致热页被推送到磁盘,从而进一步降低速度。如果服务器已经在推动IO子系统的限制,那么运行shrink可能会将其推迟,从而导致磁盘队列长度过长,并可能导致IO超时。

您将在此处获得大量答案和说明 - http://www.sqlskills.com/blogs/paul/auto-shrink-turn-it-off/