Sup*_*oss 8 indexes indexing sql-server
我有一个大表,它有一个带有标识主键的聚集索引。我正在决定该表的填充因子的正确值以最小化页面拆分。我们使用每天运行的脚本来维护索引,该脚本测量碎片并采取适当的措施。该表包含可变长度列。
我的第一个想法是将它设置为 100(因为记录应该只写入表的末尾)但我认为对可变长度列的更改也可能导致页面拆分,所以我现在转向 90。
任何建议表示赞赏。
尼克说得非常正确。
如果您在打包页面上执行增加记录大小的更新,那么您将导致页面拆分,但除此之外,使用身份主键不会导致聚集索引中的页面拆分。
(尽管如此说,存储引擎可以执行 5 种类型的页面拆分,但并非所有类型都会导致碎片和数据移动 - 在插入单调递增的标识值时获得的一种是页尾拆分。但是我离题了……)
我已经在这方面帮助了许多客户,并且我围绕这一切编写了 BOL - 如果您只想选择一个价值作为地面权益,那么 70% 的成功率最高。正如尼克所说,根据需要进行监控和调整。
为任何索引选择填充因子是一种平衡行为,即发生了多少将页面填充度推向 100% 的活动,以及您可以采取纠正措施重置填充因子的频率。如果您将填充因子设置得非常低,例如 50%,您需要考虑最初会在页面上“浪费”多少空间,但我再次看到这在某些情况下是合适的。
您还应该考虑如何使用索引。如果它只是用于单例查找,您可能会以较低的填充因子和更多的重建/碎片整理之间的时间逃脱,因为您不会因为在内存中拥有大量稀疏填充的聚集索引而浪费太多 IO/内存。为了进行大范围扫描,您需要将填充因子提高一点,以提高 IO 和内存效率。
还有 OLTP 与 DW 的问题——通常 DW 是不变的,所以索引会有 100% 的填充因子。OLTP 是最难的部分。
整理好聚集索引后,请记住非聚集索引也需要注意,因为它们很可能会碎片化。
重置填充因子时,请记住您可以在重建和碎片整理之间进行选择。DBCC INDEXDEFRAG/ALTER INDEX ... REORGANIZE 可以在某些情况下为未严重碎片化的索引重置填充因子。
希望这可以帮助!
(对不起,'过度回答' - 我的热键之一,已经编写了代码:-)
这取决于
这是一种平衡行为。如果您的表是读取密集型的,更新或删除的次数不多,那么默认值(100)应该没问题。
如果您的表是非常密集的写入,有很多更新,那么低于 80 的值可能更合适。
这些东西没有神奇的公式。(AFAIK,如果有请让我知道)最好的办法是有一个测试环境,有一些工作量来测试。进行更改并查看您的数据库如何处理工作负载。
归档时间: |
|
查看次数: |
3314 次 |
最近记录: |