1

我在 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_requests是典型IO_COMPLETIONsuspendedSPID 状态。我试图修复并重新启动系统,但没有成功。这种事情让我觉得它的根源在于身份验证问题,但我不知道该怎么做才能解决它。

添加:

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

4

1 回答 1

2

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

于 2014-01-14T21:00:18.683 回答