【问题标题】:Terrible performance after SHRINK on static data对静态数据进行 SHRINK 后的糟糕表现
【发布时间】:2012-08-12 17:35:00
【问题描述】:

在我的测试环境中,在我的 4GB 生产数据库的副本上,我存档了大约 20% 的数据,然后从 SSMS 对其进行压缩,建议最大可用空间为 20%。

结果是一个 2.7GB 的数据库,性能非常糟糕。一个特定的查询在生产中大约是 0.5 秒,现在在测试中大约是 11 秒。如果我在测试中删除查询的全文部分,执行时间大约是 2 秒。

生产和测试的实际执行计划相同。

我重建了所有索引和全文索引。性能还是差不多的。自复制以来,测试数据库中的实际内容没有发生任何变化。

关于我在哪里寻找罪魁祸首的任何想法(除了键盘后面?:)

编辑:好的,重复该过程三次,每次结果相同...但是,在我运行收缩之前,性能会下降 - 一旦我归档非活动记录。存档前 0 秒,之后 18 秒。重建一些索引后返回 7 秒。归档过程:

  1. 创建一个新的“存档”数据库
  2. 标识要删除的 3 种类型的键,将它们存储在表变量中
  3. 为 20 个表中的这三个键选择“归档”数据库
  4. 从这三个键的 20 个“实时”表中删除了行。

就是这样。归档后,当我查看执行计划时,40% 的时间花在第一个操作上,即聚集索引扫描。

我将删除此内容,并在 SQL 网站上重新发布问题并重新表述。

搬迁问题:https://dba.stackexchange.com/questions/22337/option-force-order-improves-performance-until-rows-are-deleted

【问题讨论】:

  • 奇怪,我唯一能想到的就是参数嗅探。你应该在 DBA 网站上问这个问题。可能会在那里获得更高质量的答案。
  • 如果我们能看到有性能问题的查询可能会有所帮助
  • +1 谢谢,去那里试试。我应该跟踪所有各种 SO 站点。
  • 我想知道你的表在你运行收缩后有多碎片化。
  • 该脚本似乎重建了所有聚集索引。您能否发布实际的执行计划(不是某处的图片),因为我怀疑您的性能问题不是来自聚集索引。

标签: sql-server


【解决方案1】:

由于问题具有误导性,因此我将在几天后删除它,但以防万一有人对结果感到好奇,这里已解决:

https://dba.stackexchange.com/questions/22337/option-force-order-improves-performance-until-rows-are-deleted

收缩不是原因,我只是认为这是因为收缩可能会导致数据碎片化。真正的问题是删除行会导致对数据形状进行错误的统计样本。这反过来又导致查询分析器返回一个错误的计划。它认为它的计划会扫描大约 900 行,但实际上扫描了超过 52,000,000 行。

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2016-07-14
    • 2015-12-03
    • 2017-01-25
    相关资源
    最近更新 更多