sqlserver sp_updatestats 的应用

现象

System.Data.SqlClient.SqlException (0x80131904): 执行超时已过期。完成操作之前已超时或服务器未响应。

解决方案 

执行系统存储过程:

exec sp_updatestats;

MSDN 对 sp_updatestats 的解释

sp_updatestats UPDATE STATISTICS 通过 ALL 在数据库中的所有用户定义表和内部表中指定关键字,sp_updatestats 执行。 sp_updatestats 显示指示其进度的消息。 完成更新之后,此存储过程将报告已为所有的表更新了统计信息。

sp_updatestats 更新已禁用的非聚集索引的统计信息,并且不更新已禁用聚集索引的统计信息。

对于基于磁盘的表, sp_updatestats根据dm_db_stats_properties sys.databases目录视图中的modification_counter信息更新统计信息,并更新至少包含一行的统计信息。 Sp_updatestats执行时,将始终更新内存优化表的统计信息。 因此, sp_updatestats 不需要执行更多的操作。

sp_updatestats 可以触发存储过程或其他已编译代码的重新编译。 但是,如果在引用的表和索引上只有一个查询计划,则 sp_updatestats 可能不会导致重新编译。 在这些情况下,即便更新了统计信息也不必进行重新编译。

这里面又涉及一个 统计信息 的概念

查询优化的统计信息是二进制大型对象 (BLOB),这些对象包含与值在表或索引视图的一列或多列中的分布有关的统计信息。 查询优化器使用这些统计信息来估计查询结果中的基数或行数。 通过这些基数估计,查询优化器可以创建高质量的查询计划。 例如,查询优化器可以根据谓词使用基数估计选择索引查找运算符而不是更耗资源的索引扫描运算符,假如这样做能提高查询性能。

每个统计信息对象都在包含一个或对个表列的列表上创建,并且包括将值的分布显示在第一列的直方图。 在多列上的统计信息对象也存储与各列中的值的相关性有关的统计信息。 这些相关性统计信息(或 密度)根据列值的不同行的数目派生。

使用场景:

         如果你的查询执行得很慢,那么是时候更新统计信息了。并且建议当你插入大量数据到升序或者降序的列时,更新统计信息,因为在这种情况下,统计信息直方图将不包含新插入的值,同时,强烈建议在除索引维护(当你重建、整理碎片或者重组索引时,数据分布不会改变)外的维护工作之后更新统计信息。

         如果数据库的数据更改频繁,建议最低限度每天更新一次统计信息。一般来说,在数据仓库中,可以降低更新统计信息的频率,当更新时,通常建议执行sp_updatestats存储过程来实现。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值