1

在我的测试环境中,在我的 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

4

1 回答 1

0

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

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

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

感谢所有的帮助!

于 2012-08-13T21:01:43.860 回答