Eu tenho uma tabela de recordes para 100.000 jogadores que está sendo inserida duas vezes ao dia com um registro por jogador. No final do dia, a fragmentação do índice para os índices nessa tabela é de 99%. Existe uma maneira de evitar isso ajustando as configurações?
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
lá. Vai apenas desperdiçar espaço. Todas as colunas têm comprimento fixo, portanto, uma linha não pode expandir a atualização e as inserções não podem acontecer no meio da tabela. 99% parece inesperadamente alto para o outro índice também. Quantas páginas existem em cada índice?sys.dm_db_index_physical_stats
saída?Respostas:
Eu acho que você deve tentar
FILLFACTOR
configurações mais altasHighScore_RoundGroup_Nidx
(por exemplo, 50 ou 40). Você pode definirFILLFACTOR
0 ou 100 para oPRIMARY KEY
arquivo porque ele não deve fragmentar. Se isso ocorrer,FILLFACTOR
não ajuda porque o motivo é que as páginas recém-alocadas se intercalam com outras páginas alocadas recentemente. Esse é um problema conhecido do SQL Server. Você pode mover esse índice para seu próprio grupo de arquivos, o que interromperia esse problema.fonte
Talvez você pense que está reconstruindo, mas o índice não é reconstruído porque o índice não é grande o suficiente.
Dê uma olhada nesta pergunta Por que o índice REBUILD não reduz a fragmentação do índice?
Você verificou a fragmentação após a reconstrução? É realmente desfragmentado.
fonte