【发布时间】:2012-10-25 15:29:06
【问题描述】:
我正在对 Microsoft SQL Server 2005 运行一个简单的 select * from table 查询。该表有大约 41000 条带有 PK 聚集索引的记录,并且我正在使用 Windows 集成身份验证。
当我使用 Microsoft SQL Server Management Studio 在我的机器上运行它时,查询在大约 1 小时 45 分钟内完成。我尝试从网格切换到文本输出,使用
SQLCMD从命令行运行它还尝试在查询之前执行DBCC USEROPTIONS、DBCC DROPCLEANBUFFERS、DBCC FREEPROCCACHE... 没有任何改变查询的速度。当我使用我的凭据从同事的工作站运行它时,查询很快就会正常完成。如果同事使用他们的凭据在我的工作站上运行查询,则查询会非常慢,如上所述。
我想不出如何解决这个问题。不知何故,这个问题似乎与我的机器有关,但我无法理解它。还请考虑以下几点:
- 我检查并确保未在我的机器上启用 ODBC 跟踪(Win7-64 位)。我已经使用 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 等。与同事工作站相比,您可以在其中查看记录数据到达时被绘制为连续流!???
- 我还比较了我的机器上的实际查询执行计划和查询正常运行的另一台机器 - 它们看起来是相同的。
谁能理解这里可能出了什么问题?为什么从我的机器上运行它很慢,但它从另一个工作站正常执行?... 有任何建议的操作步骤来解决此问题吗?
提前感谢大家!
【问题讨论】:
-
那些执行计划正在运行不同的查询。
-
您发布的两个执行计划似乎在查询两个不同的表。第一个是 tblQuoteSummary,第二个是 tblQuoteLayer。
-
是的,我确实为我的遗漏道歉 - 我确实发布了错误的屏幕截图。我删除了屏幕截图,因为它们是相同的,不会增加价值或任何其他信息。同时我发现了问题 - 请参阅下面的答案:)
标签: sql-server sql-server-2005 sql-server-2008-r2