Фрагментация индекса 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