Cómo prevenir la fragmentación diaria del índice del 99%


11

Tengo una tabla de puntaje alto para 100,000 jugadores que se está insertando 2 veces al día con un registro por jugador. Al final del día, la fragmentación del índice para los índices en esa tabla es del 99%. ¿Hay alguna manera de evitar esto ajustando la configuración?

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
Pregunta tonta, pero para cubrir todas las bases: ¿está reconstruyendo / reorganizando todos los días?
JHFB

sin TABLE DDL, cualquiera que publique adivinará ¿Estás utilizando GUID como clave principal?
SQL Learner

Estoy reconstruyendo todos los días en este momento, pero me pregunto si puedo evitar que esto suceda todos los días, ya que puedo anticipar bastante bien cómo evolucionan los datos.
olle

1
¿Cómo se determina el nivel de fragmentación? No esperaría mucha fragmentación lógica para el índice agrupado. Sin embargo, hay algo de fragmentación interna que no necesita FILLFACTOR = 80. Simplemente desperdiciará espacio. Todas las columnas tienen una longitud fija, por lo que una fila no puede expandirse en la actualización y las inserciones no pueden suceder en el medio de la tabla. El 99% parece inesperadamente alto para el otro índice también. ¿Cuántas páginas hay en cada índice?
Martin Smith

99% después de reconstruir cada día realmente iría un poco, ¿puedes mostrar tu sys.dm_db_index_physical_statssalida?
Martin Smith

Respuestas:


3

Creo que deberías probar FILLFACTORconfiguraciones más altas HighScore_RoundGroup_Nidx(por ejemplo, 50 o 40). Puede establecer FILLFACTORen 0 o 100 para el PRIMARY KEYporque no debería fragmentarse. Si todavía lo hace, FILLFACTORno ayuda porque la razón es que las páginas recién asignadas se entrelazan con otras páginas recién asignadas. Este es un problema bien conocido de SQL Server. Puede mover este índice a su propio grupo de archivos que detendría este problema.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.