【问题标题】:How do I monitor the cost of updating statistics on a table?如何监控更新表的统计信息的成本?
【发布时间】:2013-09-13 18:02:55
【问题描述】:

我有一个表,它有 20 亿多行和跨 8 个分区的 7 个索引,只有标准 SQL Server AUTOUPDATE 来维护统计信息,它只很少更新统计信息。每晚大约有 130 万条记录添加到此表中。显然,这不是有意义的行为,但由于这是一个生产服务器,我非常警惕在不知道性能成本的情况下点击更新。我在任何测试环境中都没有完整的表格。 (这张桌子是最糟糕的,还有其他的几乎一样糟糕。)

在确定与定期更新统计信息相关的性能成本时,我应该关注哪些方面/什么?

应该多久更新一次统计信息?应该使用FULLSCAN 吗?

编辑

我认为 traceflag 2371 对我来说是一个危险的工具,因为它可以在我需要一切启动和运行的白天触发自己的更新,而不是我控制的窗口。

在做了相当多的研究之后,我认为这个问题已经发展到包括是否使用sp_updatestats(这似乎是一个大锤,因为如果>1 行已更新Erin Stellato,它会更新统计信息)或UPDATE STATISTICS如果UPDATE STATISTICS 那么那么大的桌子上的百分比是多少。 10 亿行的 10% 样本大约需要 2 小时才能完成。

如果 PK 的相关部分是一个升序的日期时间列。

结束编辑

【问题讨论】:

    标签: sql-server tsql sql-server-2012


    【解决方案1】:

    如果您使用的是 SQL Server 2008 R2 SP1 或更新版本,请尝试使用跟踪标志 2371。它会降低更新阈值。 http://blogs.msdn.com/b/saponsqlserver/archive/2011/09/13/10207658.aspx

    【讨论】:

    • 这是很好的信息,但它并没有告诉我定期更新这些表的统计信息的成本是多少,我想我最好每天更新,但我运行了一个在我的开发环境中使用FULLSCAN 在这个巨大表的一半(10 亿行)上进行测试,在一台什么都不做的机器上完成需要 7 个小时,我没有那么多小时可用作任何统计更新窗口给定日期。
    • 1.在常规情况下,您永远不需要 FULLSCAN。
    • 2.我不明白你为什么不想使用T2371。它不会导致使用全扫描更新统计信息。
    • 我不想在我的维护窗口之外触发更新,我想更新会在我的夜间上传过程中启动,并导致我试图避免的资源瓶颈。我每天处理多个上传。
    • 什么是“常规情况”?
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多