AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 182711
Accepted
Ramakant Dadhichi
Ramakant Dadhichi
Asked: 2017-08-05 07:34:15 +0800 CST2017-08-05 07:34:15 +0800 CST 2017-08-05 07:34:15 +0800 CST

我们应该多久使用一次更新统计。(更频繁或不)

  • 772

我们通常使用 Ola Hallengren 的解决方案来处理我们拥有的索引优化作业中的更新统计信息。作为标准做法,我们将它安排在所有服务器(1500+)的每个星期日午夜。

现在,有几台服务器在一周中出现很多性能问题,当因性能问题引发事件时,我们会为该特定数据库运行 sp_updatestats。我们有一个巨大的环境,所有版本都在使用,从 2000 到 2016。在 2012 和 2014 版本中,我们一直在周中手动运行特定数据库的更新统计信息。

最近,由于反复出现的问题,我们还不得不为一些非常活跃的数据库每天安排 sp_updatestats。

我的问题:

  1. 我们应该多久安排一次?
  2. 过于频繁地安排它有什么缺点?
  3. 有没有办法避免定期更新运行如此频繁的缺点,因为我听说编译需要更多时间并且可能会在一段时间内降低性能?

请帮助我了解您在这方面的经验。

sql-server ola-hallengren
  • 2 2 个回答
  • 2979 Views

2 个回答

  • Voted
  1. Best Answer
    SqlWorldWide
    2017-08-05T08:05:33+08:002017-08-05T08:05:33+08:00

    我们应该多久安排一次?

    您需要自己决定。

    • 这将取决于与相关统计信息相关的列的修改(插入更新删除)。您可以使用我的脚本TSQL 来查找 SQL Server 统计信息的状态,以查找自上次更新统计信息以来修改的行数。
    • 你的自动更新统计打开了吗?
    • 表的大小,因为触发自动更新统计信息时的阈值。 Erin Stellato 详细解释了统计数据何时会自动更新。
    • 如果您发现您的自动更新统计信息不够好,您应该考虑手动更新统计信息。
    • 如果您有 2014 之前版本的大型表,请考虑跟踪标志 2371。请注意,它是 SQL 2016 中的默认值。Erik Darling在 SQL Server 2016 中自动更新统计阈值的更改中谈到了它。

    过于频繁地安排它有什么缺点?

    Kendra Little 在UPDATE STATISTICS: The Secret IO Explosion中解释了如何更有效地执行相同操作的一些技巧。

    有没有办法避免定期更新并行运行的缺点?

    如果您的意思是并行运行更新统计信息,我建议您注意两件事。

    1. 不要并行运行同一张表的统计信息,这会导致阻塞。自 SQL 2014 以来,这方面已经有所改进。阅读更多详细信息,请参阅Jonathan Kehayias对并行统计重建的改进支持以及 Microsoft Tiger 团队的 Parikshit Savjani使用 SQL 2014 和 SQL 2016 提高更新统计性能。
    2. 更新统计的扫描阶段是并行的,并且在 SQL 2016 中得到了改进。注意并行运行的会话数,您可能会导致其他会话等待可用的调度程序。请参阅相关的问答并行统计更新。

    根据您对第 3 个问题的编辑,我建议您阅读Auto Update Stats Async Enabled。

    其他资源:

    • 何时更新统计数据?
    • SQL Server 统计问题我们太害羞了,Grant Fritchey
    • sp_updatestatsErin Stellato避免的另一个原因
    • 6
  2. john
    2017-08-05T08:22:28+08:002017-08-05T08:22:28+08:00

    索引重组 (ALTER INDEX REORG) 不会像索引重建那样更新统计信息,而单个索引重建 (ALTER INDEX myIndex REBUILD) 只会更新该索引的统计信息。

    如果您正在执行索引重组(基于碎片百分比等),您需要将其与更新统计信息过程结合起来,至少对于那些在索引重组中未更新统计信息的索引(检查 sys. dm_db_stats_properties):

    declare @tablename sysname = 'myTable';
    select t.object_id, t.name, s.stats_id, p.last_updated
    from sys.tables t
    join sys.stats s
      on t.object_id = s.object_id
    cross apply sys.dm_db_stats_properties(s.object_id, s.stats_id) p
    where t.name = @tablename;
    
    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve