2

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

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

查询截图-1

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

查询截图 - 2

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

看起来像:

  • 来自稍后启动的第 3 方应用程序的多个连接正在 SPID 27 上等待 - 这是一个 AUTOSHIRNK 命令

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

问题:

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

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

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

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

缩小数据库

笔记:

  • 这当前在发生此问题的 SQL Server 2012 SP1 上运行。

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

4

1 回答 1

1

AUTO SHRINK 以循环方式工作,如果它看到任何 DB 上的可用空间,它就会释放它。

虽然没有像长时阻塞那样的效果,但是确实会占用大量的资源,无论是IO还是CPU。它还通过缓冲池移动大量数据,因此可能导致热页被推送到磁盘,从而进一步减慢速度。如果服务器已经在推动 IO 子系统的限制,运行收缩可能会超过它,导致磁盘队列长度过长,并可能导致 IO 超时。

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

于 2014-10-01T15:53:03.720 回答