Como evitar a fragmentação diária do índice de 99%


11

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

1
Pergunta boba, mas para cobrir todas as bases - você está reconstruindo / reorganizando todos os dias?
— JHFB

sem TABLE DDL, qualquer pessoa que postar vai adivinhar. Você está usando o GUID como chave primária?
— SQL Learner

Estou reconstruindo todos os dias agora, mas me pergunto se posso impedir que isso aconteça todos os dias, pois posso antecipar muito bem como os dados evoluem.
— Olle

1
Como você está determinando o nível de fragmentação? Eu não esperaria muita fragmentação lógica para o índice clusterizado. Alguma fragmentação interna, porém, você não precisa de FILLFACTOR = 80lá. 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?
— Martin Smith

99% após a reconstrução a cada dia seria realmente um pouco, você pode mostrar sua sys.dm_db_index_physical_statssaída?
— Martin Smith

Respostas:


3

Eu acho que você deve tentar FILLFACTORconfigurações mais altas HighScore_RoundGroup_Nidx(por exemplo, 50 ou 40). Você pode definir FILLFACTOR0 ou 100 para o PRIMARY KEYarquivo porque ele não deve fragmentar. Se isso ocorrer, FILLFACTORnã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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.