我在 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_COMPLETION
的suspended
SPID 状态。我试图修复并重新启动系统,但没有成功。这种事情让我觉得它的根源在于身份验证问题,但我不知道该怎么做才能解决它。
添加:
我偶尔会收到一条Database 'MyDatabase' is being recovered. Waiting until recovery is finished
消息。我也使用 SQL Server 2012 安装工具执行了全面修复。有任何想法吗?