我正在select * from table
对 Microsoft SQL Server 2005 运行一个简单的查询。该表有大约 41000 条带有 PK 聚集索引的记录,并且我正在使用 Windows 集成身份验证。
当我使用 Microsoft SQL Server Management Studio 在我的机器上运行它时,查询在大约 1 小时 45 分钟内完成。我试过从网格切换到文本输出,从命令行运行它,
SQLCMD
也试过 ececutingDBCC USEROPTIONS
,DBCC DROPCLEANBUFFERS
,DBCC FREEPROCCACHE
在查询之前......没有任何改变查询的速度。当我使用我的凭据从同事的工作站运行它时,查询很快就会正常完成。如果同事使用他们的凭据在我的工作站上运行查询,则查询会非常慢,如上所述。
我已经没有办法解决这个问题了。不知何故,这个问题似乎与我的机器有关,但我无法理解它。还请考虑以下事项:
- 我检查并确保我的机器(Win7-64 位)上未启用 ODBC 跟踪。我已经使用 Microsoft Management Studio 2008 R2 安装了 SQL Server 客户端工具,这就是我用来查询数据库的工具。
- 我也用VS2010运行了同样的sql查询,结果是一样的。
- 我针对同一个表/数据库的副本但在不同的服务器上运行查询,问题仍然存在。
- 当我运行时
select count(*) from table
- 查询正常完成,没有延迟。 - 当我使用 SQL Server Profiler 运行跟踪时,查询只是一个长时间运行的查询 - 我看不到任何异常。
- 当我在 MS SQL Server Management Studio 中使用文本输出运行查询时,我可以看到在大约 85 条记录的初始缓冲区之后,后续记录一次大量到达大约 400 条记录。例如 85 -> 407 -> 804 -> 1210 -> 1605 -> 1897 -> 2161 -> 2753 -> 3051 -> 3342 -> 3676 -> 4002 等。与同事工作站相比,您可以在其中查看记录数据到达时被绘制为连续流!???
- 我还比较了我机器上的实际查询执行计划和查询正常运行的另一台机器上的实际查询执行计划——它们看起来是相同的。
谁能理解这里可能出了什么问题?为什么从我的机器上运行它很慢,但它从另一个工作站正常执行?...任何建议的操作步骤来解决这个问题?
提前感谢大家!