У меня есть таблица рекордов на 100 000 игроков, которая вставляется в 2 раза в день с одной записью на игрока. В конце дня фрагментация индекса для индексов в этой таблице составляет 99%. Есть ли способ предотвратить это, подправив настройки?
CREATE TABLE HighScore(
[id] [int] IDENTITY(1,1) NOT NULL,
[user] [int] NULL,
[player] [int] NULL,
[round] [tinyint] NULL,
[group] [int] NULL,
[rank] [int] NULL,
[delta] [int] NULL,
[roundpoints] [int] NULL,
[totalpoints] [int] NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [HighScore_RoundGroup_Nidx] ON .[HighScore]
(
[round] ASC,
[group] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
GO
FILLFACTOR = 80
. Это будет просто тратить пространство. Все столбцы имеют фиксированную длину, поэтому строка не может расширяться при обновлении, а вставки не могут происходить в середине таблицы. 99% кажется неожиданно высоким и для другого индекса. Сколько страниц в каждом индексе?sys.dm_db_index_physical_stats
результат?Ответы:
Я думаю, что вы должны попробовать более высокие
FILLFACTOR
настройкиHighScore_RoundGroup_Nidx
(например, 50 или 40). Вы можете установитьFILLFACTOR
значение 0 или 100,PRIMARY KEY
потому что он не должен фрагментироваться. Если это все еще происходит,FILLFACTOR
это не помогает, потому что причина в том, что вновь выделенные страницы чередуются с другими вновь выделенными страницами. Это хорошо известная проблема SQL Server. Вы можете переместить этот индекс в свою собственную файловую группу, которая остановит эту проблему.источник
Возможно, вы думаете, что перестраиваете, но индекс не перестраивается, потому что индекс недостаточно велик.
Посмотрите на этот вопрос. Почему индекс REBUILD не уменьшает фрагментацию индекса?
Вы проверяли фрагментацию после перестройки? Это на самом деле дефрагментировано.
источник