Mon*_*ong 6 sql-server statistics
我刚刚解决了客户站点上的一个问题,结果证明这是由于统计错误导致优化器超时。运行exec sp_updatestats
解决了这个问题,现在一切都很好。
我现在有点困惑的是,统计数据最初是如何脱节的?
数据库同时打开了 auto_create_stats 和 auto_update_stats。所以 SQL Server 应该在没有任何干预的情况下保持最新的统计信息。
那么为什么它在这种情况下失败了呢?
该客户最近升级了他们的数据库服务器。他们自己处理,所以我不确定他们经历了什么程序,但我无法想象这比在旧服务器上备份数据库并在新服务器上恢复数据库更复杂。这可能以某种方式导致故障吗?
我将引导您回答一个较旧的问题。也请阅读评论,它们非常有价值。
简而言之,MSDN 说:
“插入操作发生在升序或降序键列上升序或降序键列的统计信息(例如 IDENTITY 或实时时间戳列)可能需要比查询优化器执行更频繁的统计更新。插入操作将新值附加到升序或降序列。添加的行数可能太小而无法触发统计信息更新。如果统计信息不是最新的并且查询从最近添加的行中选择,则当前统计信息将不会对这些新值进行基数估计。这可以导致基数估计不准确和查询性能降低。
例如,如果未更新统计信息以包括最近销售订单日期的基数估计,则从最近销售订单日期进行选择的查询将具有不准确的基数估计。
维护操作之后 考虑在执行更改数据分布的维护过程(例如截断表或执行大部分行的批量插入)后更新统计信息。这可以避免查询等待自动统计更新时查询处理的延迟。”
因此,您将从搜索最近未更新的统计数据中受益。
归档时间: |
|
查看次数: |
1437 次 |
最近记录: |