SQL Server 2005索引碎片

SQL Server 2005索引碎片,sql,sql-server,sql-server-2005,performance,fragmentation,Sql,Sql Server,Sql Server 2005,Performance,Fragmentation,我继承的SQLServer2005数据库中的几个键具有非常高的碎片百分比。使用以下SQL时: select OBJECT_NAME(object_id), avg_fragmentation_in_percent, record_count, * from sys.dm_db_index_physical_stats (DB_ID(N'FragmentedDB'), NULL, NULL, NULL, 'Detailed') s 我看到有几个表的碎片百分比在50到99之间。这些表都有超

我继承的SQLServer2005数据库中的几个键具有非常高的碎片百分比。使用以下SQL时:

select  OBJECT_NAME(object_id), avg_fragmentation_in_percent, record_count, *
from    sys.dm_db_index_physical_stats (DB_ID(N'FragmentedDB'), NULL, NULL, NULL, 'Detailed') s
我看到有几个表的碎片百分比在50到99之间。这些表都有超过100000行,其中一些有2000000+行。我认为这会给我们的应用程序带来严重的性能问题,因此我尝试使用以下sql重建其中一些索引:

ALTER INDEX ALL ON [dbo].[FragmentedTable] 
REBUILD WITH ( FILLFACTOR = 90, ONLINE = ON )
但是,在我重建索引并再次查看碎片%之后,它们都没有改变。我有什么遗漏吗?我在这个主题上做了一些搜索,但到目前为止都是空的


谢谢

首先,如果您使用多个文件来备份表中的索引,接下来是重建索引时看到的并行性。接下来,您提到您认为这会导致性能问题,您是否验证了这一点?i、 e.除了一些例外,碎片通常是扫描与搜索的更大问题。有关碎片、如何解决、集中在何处以及不同修复方法之间的差异的完整详细回顾,请参见。

首先要想到的是,如果您使用多个文件来备份表中的索引,接下来是重建索引时看到的并行性。接下来,您提到您认为这会导致性能问题,您是否验证了这一点?i、 e.除了一些例外,碎片通常是扫描与搜索的更大问题。有关碎片、如何解决、集中在何处以及不同修复方法的差异的完整详细回顾,请参阅。

想法

  • 是分区的吗<代码>重建分区=分区编号
  • 需要
    LOB\u compression=ON
  • 你有聚集索引吗
    • 思想

      • 是分区的吗<代码>重建分区=分区编号
      • 需要
        LOB\u compression=ON
      • 你有聚集索引吗

      您将“详细”与dm\u db\u index\u physical\u stats一起使用。这将显示索引的非叶级和叶级

      是叶级(叶级=0)、非叶级(叶级>0)或两者的碎片

      如果碎片是在非叶级别,那么问题就不那么严重,或者说没有问题


      如果您仍然想消除所有碎片,请尝试添加PAD_索引。

      您正在使用dm_db_INDEX_physical_stats的“Detailed”。这将显示索引的非叶级和叶级

      是叶级(叶级=0)、非叶级(叶级>0)或两者的碎片

      如果碎片是在非叶级别,那么问题就不那么严重,或者说没有问题


      如果您仍然想删除所有碎片,请尝试添加PAD_索引。

      有两种方法可以删除碎片。这两种方法是必要的,因为它们具有完全不同的特点

      描述SQL Server 2005及以后版本中三种方法之间的差异:

      ALTER INDEX…重新组织(新的DBCC INDEXDEFRAG)

      ALTER INDEX…重建(新的DBCC DBREINDEX)

      改变索引…重建

      有关更多信息

      有两种方法可以消除碎片。这两种方法是必要的,因为它们具有完全不同的特点

      描述SQL Server 2005及以后版本中三种方法之间的差异:

      ALTER INDEX…重新组织(新的DBCC INDEXDEFRAG)

      ALTER INDEX…重建(新的DBCC DBREINDEX)

      改变索引…重建

      有关更多信息

      此时它不是分区。我在LOB_compression=ON的情况下重新运行查询,没有任何更改。我有集群索引和非集群索引,它们都受到我描述的碎片问题的影响。谢谢你的回复!此时它不是分区。我在LOB_compression=ON的情况下重新运行查询,没有任何更改。我有集群索引和非集群索引,它们都受到我描述的碎片问题的影响。谢谢你的回复!你重新组织索引了吗?是的,我也运行过:alterindex ALL-ON[dbo].[FragmentedTable]resorganization就寻址碎片而言,重建将包含所有的内容a-resorganize-address等等。我也遇到了同样的情况。但是当我使用SQLManagementStudio检查碎片时(使用索引属性),它显示了0.24%碎片的正确值。当我使用像上面这样的方法时,它告诉我它是100%碎片化的。你重组过索引吗?是的,我也运行过:ALTER index ALL ON[dbo]。[FragmentedTable]REORGANING就寻址碎片而言,重建将包含所有的内容a reorganize ADDRESS等等。我也遇到了同样的情况。但是当我使用SQLManagementStudio检查碎片时(使用索引属性),它显示了0.24%碎片的正确值。当我使用上述方法时,它告诉我它是100%零碎的。