2014-10-01 103 views
2

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

这是我的数据库上看到的应用程序开始接收错误后:

Query Screenshot -1

SPID 102没有在上面的查询所示。这是同一过程的另一个来自同一应用程序的连接。我能够在下面的屏幕截图中捕捉到这些细节。它是此截图中最上面一行的一个。道歉,截图时滚动条被移动到右侧。

Query Screenshot - 2

AutoShrink设置为TRUE此数据库上时发生这种情况。

它看起来像:

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

  • SPID 27正在等待SPID 102是从同一个第三方应用程序

问题的另一个方面:

  • 是否有任何方法可以判断数据库上自AutoShirnk设置为TRUE以来是否创建了与SPID 27的连接?

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

根据下面的链接TechNet文章,自动收缩应该没有数据库

上的任何活动的影响,如果数据库的AUTO_SHRINK选项设置为ON,数据库 引擎减小数据库中文件的大小。此活动 发生在后台,并且不影响数据库中的任何用户活动 。

Shrinking a Database

注:

  • 这是目前SQL Server上运行,此问题将发生2012 SP1。

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

+2

你真的不应该使用自动收缩反正。 – DavidG 2014-10-01 13:03:17

+0

他们应该将AutoShrink重命名为AutoCrippleDatabase。关掉这场灾难,这个问题就会消失。 – 2014-10-01 13:32:10

+0

使用DMV来查看查询文本并在运行时进行计划..'sys.dm_exec_query_stats'交叉应用'sys.dm_exec_query_plan'交叉应用'sys.dm_exec_sql_text' – Tak 2014-10-01 14:39:03

回答

1

AUTO SHRINK以循环方式工作,如果它看到任何DB上的可用空间,它将取消分配它。

虽然它没有像长期阻断任何影响,但它占用了大量的资源,无论是IO和CPU。它还会通过缓冲池移动大量数据,因此可能会导致热页面被推出到磁盘,进一步放慢速度。如果服务器已经在推动IO子系统的限制,那么运行缩减可能会推动它,导致长的磁盘队列长度和可能的IO超时。

你会得到很多答案,并澄清在这里 - http://www.sqlskills.com/blogs/paul/auto-shrink-turn-it-off/