Фрагментация индекса SQL Server 2005

Несколько ключей в базе данных SQL Server 2005, которую я унаследовал, имеют очень высокий процент фрагментации. При использовании следующего 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. Все эти таблицы имеют более 100 000 строк, некоторые с 2 000 000+. Я считаю, что это вызывает значительные проблемы с производительностью для нашего приложения, поэтому я попытался перестроить некоторые из этих индексов с помощью следующего sql:

ALTER INDEX ALL ON [dbo].[FragmentedTable] 
REBUILD WITH ( FILLFACTOR = 90, ONLINE = ON )

Однако после того, как я перестроил индекс и снова посмотрел на% фрагментации, все они остались без изменений. Есть что-то, чего мне не хватает? Я сделал несколько поисков по этой теме, но до сих пор пустовал.

Спасибо!

5 ответов

Вы используете "Подробно" с dm_db_index_physical_stats. Это покажет не листовые уровни, а также листовые уровни индексов.

Является ли фрагментация для уровней листьев (leaf_level = 0), для уровней не листьев (leaf_level > 0) или для обоих?

Если фрагментация находится на уровне, не являющемся листом, это меньше проблем или проблем нет.

Если вы все еще хотите избавиться от всей фрагментации, попробуйте добавить PAD_INDEX.

Несколько вещей приходят на ум - во-первых, если вы используете несколько файлов для поддержки индексов в таблице, затем будет параллелизм, который вы наблюдаете при перестройке индекса. Далее, вы упоминаете, что считаете, что это вызывает проблемы с производительностью, вы убедились, что это так? то есть, за некоторыми исключениями, фрагментация обычно является более серьезной проблемой для сканирования и поиска. Для полного подробного обзора фрагментации, как решить, где сосредоточиться, и различия, которые вы видите с различными методами исправления, см. В этой серии сообщений в блоге.

Мысли..

  • Это разделено? REBUILD PARTITION = partition_number
  • Необходимость LOB_COMPACTION = ON?
  • У вас есть кластерный индекс?

Было два метода для устранения фрагментации. Эти два метода необходимы, потому что они имеют совершенно разные характеристики.

Описывает различия между тремя методами в SQL Server 2005 и более поздних версиях:

ALTER INDEX… REORGANIZE (новый DBCC INDEXDEFRAG)

ALTER INDEX… REBUILD (новый DBCC DBREINDEX)

ALTER INDEX… REBUILD

Для получения дополнительной информации
http://sqlnetcode.blogspot.com/2011/11/sql-server-methods-for-removing.html

Другие вопросы по тегам