SQL Server:12%的索引扫描密度和50%的碎片。 “坏”有多糟糕?

时间:2011-10-05 19:30:20

标签: sql-server sql-server-2000 indexing fragmentation sql-server-performance

碎片坏了多少?扫描密度有多低太低? 扫描密度有多低

我有一个包含以下索引密度和碎片级别的表:

Name                           Scan Density  Logical Fragmentation
=============================  ============  =====================
IX_TransactionEntries_Tran...  12.834        48.392
IX_TransactionEntries_Curr...  15.419        41.239
IX_TransactionEntries_Tran...  12.875        48.372
TransactionEntries17           98.081         0.0049325
TransactionEntries5            12.960        48.180
PK_TransactionEntries          12.869        48.376
TransactionEntries18           12.886        48.480
IX_TranasctionEntries_CDR...   12.799        49.157
IX_TransactionEntries_CDR...   12.969        48.103
IX_TransactionEntries_Tra...   13.181        47.127

您可以看到我进行了碎片整理TransactionEntries17,这就是为什么扫描密度如此之高,并且碎片太低了。

但12%的扫描密度可怕低? 48%的碎片可怕高吗?

我得到performance issues when deleting rows(需要索引扫描)。索引碎片在70000页索引上是 GIANT FLASHING RED ALARM ,还是可能但不太可能?


从SQL Server BOL:

  

扫描密度[最佳计数:实际计数]

     

是百分比。它是最佳计数实际计数的比率。如果一切都是连续的,则该值为100;如果此值小于100,则存在一些碎片。

     如果所有内容都是连续链接的,那么

最佳计数是范围更改的理想数量。 实际计数是范围更改的实际数量。

     

LogicalFragmentation

     

扫描索引的叶子页返回的无序页面的百分比。这个数字与堆数无关。无序页面是分配给索引的下一个物理页面不是当前叶页中下一页指针所指向的页面的页面。

但是没有关于什么级别的碎片太高,并且应该减少的指导。关于什么扫描密度太低也没有任何指导,应该增加。

1 个答案:

答案 0 :(得分:3)

与SQL中的任何其他内容一样,取决于

这将取决于竞争之类的东西(由于有更多数据页面需要“竞争”,因此增加了等待时间),索引的宽度等等等。

根据我的个人经验,我对一些构建和负载的碎片影响进行了一些测试。

对于聚合密集型过程,我针对40%碎片的表运行了一次运行,而另一次针对“0”碎片的“同一”表运行。

40%零碎的表格 1,200%更长来运行相同的基本操作。

您的里程可能会有所不同,但这会产生很大的不同。

Paul Randal, arguably responsible for most of DBCC in SQL Server 2005+, thinks its a pretty huge deal too.

简而言之,唯一可以确定的方法是进行测试。 BOL没有给出密度和碎片范围的指导原则,因为有太多变量无法进行“一般”评估。

这就像问“我的车太受损了吗?”答案取决于“太多损坏了什么?”,你驾驶的距离,速度,道路,天气,一年中的什么时间以及其他一百万件事。