SQL Server 2000 执行:缺少统计信息

Posted

技术标签:

【中文标题】SQL Server 2000 执行:缺少统计信息【英文标题】:SQl Server 2000 Execution: Statistics Missing 【发布时间】:2011-07-27 05:00:31 【问题描述】:

我在生产中遇到一个情况,当我尝试运行执行计划时,一个过程在两个不同的环境中花费不同的时间,一些统计数据丢失了。当我点击那些图标时(为了引起注意,它是红色的)。两台服务器都缺少 Stsstics。但是看到消息后我想知道。有一个称为执行次数的字段,在慢速服务器中为 23,在快速服务器中为 1。谁能告诉我这个的重要性。

编辑碎片不是问题,因为当我检查时我发现重组只会重新定位 2% 的页面,新服务器是通过合并复制创建的。请就执行局域网中的“执行次数”以及我们如何减少这种情况提出建议。

编辑:将重建索引以提高性能

【问题讨论】:

您能保证数据、索引、结果、硬件、@@version 和设置全部完全相同吗? 数据、indexex、结果和版本是相同的(SQL 2000)。但是速度慢的新服务器是安装在 SQl server 2003 上的命名实例。但旧服务器 SQl 服务器安装在 Windows 2000 操作系统上。 【参考方案1】:

SQL 2000 过去在统计信息和一些执行计划方面存在问题,您必须添加查询提示以确保执行按您希望的方式进行。对于初学者,请确保您使用的是 SP4,然后应用以下补丁:

http://support.microsoft.com/kb/936232

这个补丁虽然说明了一个非法操作的问题(它解决了 64 位机器和 SQL2000 的崩溃问题),但它还解决了一些其他执行计划问题。虽然我最终会建议升级到 SQL 2008,它似乎解决了我们过去遇到的一些统计问题。

这是一个更详细地解释了执行次数的链接:

http://www.qdpma.com/CBO/ExecutionPlanCostModel.html

【讨论】:

好的,但我无法对生产环境进行重大更改,我们将很快迁移到 SQL Server 2008。但我有疑问,如果两个存储过程具有相同的索引和表中的相同数据,那么执行计划应该几乎相同。为什么要出现 1 和 23 的差异。存储过程在快速服务器中执行 fasexecution 需要 4 秒,在慢速服务器中需要 23 秒。慢速服务器是我没有执行 = 23 的服务器。知道应该交叉检查什么。 确保在慢速服务器上更新统计信息。在 sql 分析器中,运行“sp_updatestats”。这有什么改变吗?您还可以运行“dbcc dbreindex(tablename)”对索引进行碎片整理。只是好奇你是如何在第二台服务器上获得数据库的?备份/恢复还是 dts? @@Brain:请参阅问题的编辑部分。我已经完成了所有这些东西,我只担心执行计划中的“执行次数”。 啊。复制。我相信在已发布的表上创建了触发器,这可能是您看到的额外处理。 @@Brain:一旦复制结束,触发器将如何影响存储过程的执行。仅当我在存储过程中使用的表上有触发器时才会产生影响。此外,我在存储过程中只使用了一个大的 seletc 查询,只指向 2 个表。有一些商业逻辑。所以我认为触发器应该不是问题。如果您认为还有其他需要检查的地方,请提出建议。

以上是关于SQL Server 2000 执行:缺少统计信息的主要内容,如果未能解决你的问题,请参考以下文章

sql server 统计信息

如何在 SQL Server 2005/2008 中清除查询执行统计信息

SQL Server 查找统计信息的采样时间与采样比例

SQL Server统计信息偏差影响表联结方式案例浅析

通过 JDBC 检索 SQL Server 查询统计信息

SQL Server 2000 系统存储过程