J'ai un tableau des meilleurs scores pour 100.000 joueurs qui est inséré 2 fois par jour avec un record par joueur. À la fin de la journée, la fragmentation des index pour les index de ce tableau est de 99%. Existe-t-il un moyen d'empêcher cela en modifiant les paramètres?
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
. Cela ne fera que perdre de l'espace. Toutes les colonnes sont de longueur fixe, donc une ligne ne peut pas se développer lors de la mise à jour et les insertions ne peuvent pas se produire au milieu du tableau. 99% semble également inattendu pour l'autre indice. Combien de pages y a-t-il dans chaque index?sys.dm_db_index_physical_stats
sortie?Réponses:
Je pense que vous devriez essayer des
FILLFACTOR
réglages plus élevésHighScore_RoundGroup_Nidx
(par exemple 50 ou 40). Vous pouvez définirFILLFACTOR
0 ou 100 pour lePRIMARY KEY
car il ne devrait pas se fragmenter. Si c'est toujours le cas, celaFILLFACTOR
n'aide pas car la raison est que les pages nouvellement allouées s'entrelacent avec d'autres pages nouvellement allouées. Il s'agit d'un problème SQL Server bien connu. Vous pouvez déplacer cet index dans son propre groupe de fichiers, ce qui arrêterait ce problème.la source
Vous pensez peut-être que vous reconstruisez, mais l'index n'est pas reconstruit car l'index n'est pas assez grand.
Jetez un œil à cette question Pourquoi l'indice REBUILD ne réduit pas la fragmentation de l'indice?
Avez-vous vérifié la fragmentation après la reconstruction? Est-il réellement défragmenté?
la source