衡量SQLServer数据库碎片/性能滚出和确定何时整理SQLServer数据库表的最佳实践是什么?
我最感兴趣的是了解什么是有用的指标,以及什么级别的性能下降应该触发碎片整理。
发布于 2009-05-14 16:32:10
我相信这方面肯定会有一些有趣的答案,因为人们对应该看什么度量标准有很多不同意见。我编写了designed、SHOWCONTIG,并为2005年设计了它们的替代品,并编写了联机丛书内容,因此我将给出我的看法,并解释我所选择的2005年联机丛书和维护计划向导中的数字。
用于索引碎片的两个最佳指标是: 1) (2005)按百分比计算的平均碎片/ (2000)逻辑扫描碎片2) (2005)每页平均页密度/ (2000)平均字节
这些方法同样适用于聚集索引和非聚集索引。
1是测量有多大的逻辑分裂。这是指索引的叶级页的逻辑顺序与物理顺序不匹配时。这将防止存储引擎在范围扫描期间执行有效的readahead操作。因此#1影响范围扫描性能,而不是单点查找性能。
2是测量每页在索引的叶级上浪费了多少空间。浪费空间意味着要使用更多的页面来存储记录,这意味着存储索引的磁盘空间更多,读取索引的IOs更多,在缓冲池中存储内存的内存更多。
阈值?我的经验法则是不超过10%的碎裂,什么也不做。10%-30%,做一个改变指数.重组(2005年)/ DBCC INDEXDEFRAG (2000年)。超过30%,做一个改变指数..。重建(2005年)/ DBCC DBREINDEX (2000年)。这些都是完全的概括,您的阈值也会有所不同。
若要找到阈值,请针对碎片级别跟踪工作负载性能,并确定性能下降过大的时间。在这一点上,您需要解决碎片问题。有一个平衡的行动,在生活与分裂和承受资源打击,以消除它。
在这里,我没有提到移除碎片的两种方法之间的权衡,比如FILLFACTOR/PADINDEX试图减轻碎片,减少碎片整理,改变模式/访问模式以减轻碎片,或者不同类型的维护计划。
哦,顺便说一句,我总是建议不要在不足1000页的索引中烦扰碎片问题。这是因为索引可能大部分是内存常驻的(因为人们要求一个数字,而我不得不想出一个数字)。
您可以在我的TechNet杂志关于http://technet.microsoft.com/en-us/magazine/cc671165.aspx数据库维护的文章、我在http://technet.microsoft.com/en-us/library/cc966523.aspx帮助编写的基于2000年的索引碎片整理最佳实践白皮书中以及在http://www.sqlskills.com/BLOGS/PAUL/category/Fragmentation.aspx分片类别下的博客中阅读更多有关这方面的内容。
我想我回答得有点过头了,但这是我的热门话题之一。希望这会有所帮助:)
https://serverfault.com/questions/8234
复制相似问题