admin

SQL Server查询超时

sql

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

在上面的查询中未显示SPID
102。这是来自同一应用程序的同一过程的另一个连接。我能够在下面的屏幕截图中捕获一些细节。这是此屏幕快照中最上面一行的内容。抱歉,截屏时滚动条已移到右侧。

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

看起来像:

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

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

问题:

  • 是否有任何方法可以判断自数据库创建以来与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上的数据库运行时,该应用程序中的此过程正常运行。


阅读 188

收藏
2021-07-01

共1个答案

admin

AUTO SHRINK以循环方式工作,并且如果看到任何数据库上都有可用空间,则会对其进行分配。

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

2021-07-01