跨数据库SQL Server查询的漫长等待时间

时间:2013-06-14 20:15:27

标签: sql-server wait cross-database

我在SQL Server 2012 Express Edition下的生产中遇到了一个跨数据库查询的奇怪问题。我无法在我的开发环境中创建它,所以我认为它与服务器的配置有关,它是使用默认设置作为命名实例安装的。

这不是查询执行性能问题;这是一个数据库连接问题。

采取以下查询(MyTable中有大约100行):

SELECT COUNT(*) FROM MyDatabase..MyTable

执行时间大约为4秒。根据客户端统计信息,客户端处理时间为0,“服务器回复等待时间”构成执行时间的其他四秒。

如果我先执行USE MyDatabase然后执行我的查询,它就是即时的。如果我按顺序执行它们:

USE MyDatabase
GO
SELECT COUNT(*) FROM MyDatabase..MyTable

由于USE MyDatabase语句需要很长时间才能执行,因此仍需要延长的时间。表名是否与数据库名完全限定并不重要,也不使用同义词更改内容。在过去我遇到了类似的东西,DBCC CHECKDB(<dbname>)似乎修复它,但这次我无法让它表现得恰当。 wait_type中用于连接的sys.dm_exec_requestsIO_COMPLETION SPID状态的典型suspended。我试图修复并重新启动系统,没有运气。这种事情让我觉得它源于身份验证问题,但我不知道如何解决这个问题。

添加了:

我偶尔会收到Database 'MyDatabase' is being recovered. Waiting until recovery is finished条消息。我也使用SQL Server 2012安装工具执行了完整修复。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

看起来原因是数据库的AUTO_CLOSE属性。关闭此ALTER DATABASE MyDatabase SET AUTO_CLOSE OFF WITH NO_WAIT似乎解决了这个问题。