У меня есть таблица в базе данных SQL Server 2005 с двумя сильно фрагментированными индексами (33,3% и 85,7%). Таблица выглядит следующим образом:
CREATE TABLE [dbo].[Seasons](
[SeasonID] [bigint] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[TeamID] [bigint] NOT NULL,
[Year] [smallint] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Seasons] PRIMARY KEY CLUSTERED
( [SeasonID] ASC )
Другой индекс находится в столбце TeamID. Когда я пытаюсь перестроить индексы в Management Studio, он говорит мне об «успехе» по каждому из них. Но когда я снова смотрю на фрагментацию, ничего не изменилось. В таблице всего 2300 строк. Не уверен, что это актуально, но я также заметил, что для получения информации о фрагментации требуется ДОЛГОЕ время (порядка 30 секунд), когда я щелкаю правой кнопкой мыши индекс, выбираю свойства, а затем выбираю страницу фрагментации.
Остальные индексы в БД восстанавливаются без проблем.
Любая идея, почему я не могу фактически восстановить эти индексы? Есть идеи, почему для получения информации о фрагментации требуется так много времени? Спасибо!
Джон,
2300 строк, и в зависимости от вашей схемы каждая строка занимает около 118 байт, а в общей сложности около 65 страниц. В SQL Server размер страницы составляет около 8 КБ, и вы, возможно, уже это знаете. В этих небольших таблицах фрагментация НЕ имеет большого значения, и вам не нужно о ней беспокоиться.
Первоначально пространство выделяется для таблиц как одностраничное, и как только оно будет иметь до 3-х экстентов, оно будет одинаковым. Первые несколько выделений одной страницы вызывают всплеск информации о фрагментации. Надеюсь это поможет.
Я заметил то же самое в параметре фрагментации: мне проще использовать DBCC SHOWCONTIG WITH ALL_INDEXES, TABLERESULTS, чтобы получить статистику для всех таблиц сразу, или просто сделать одну таблицу.
И я бы не стал беспокоиться об уровнях фрагментации на меньших таблицах, кажется, они иногда не дефрагментируют, не уверен, ошибка ли это в процессе дефрагментации или в вычислении уровня фрагментации, но с парой тысяч строк это не так. повлияет на производительность.