Ich habe eine Highscore-Tabelle für 100.000 Spieler, die zweimal am Tag mit einem Datensatz pro Spieler eingefügt wird. Am Ende des Tages beträgt die Indexfragmentierung für die Indizes in dieser Tabelle 99%. Gibt es eine Möglichkeit, dies zu verhindern, indem Sie die Einstellungen anpassen?
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
. Es wird nur Platz verschwenden. Alle Spalten haben eine feste Länge, sodass eine Zeile beim Aktualisieren nicht erweitert werden kann und keine Einfügungen in der Mitte der Tabelle erfolgen können. 99% scheinen auch für den anderen Index unerwartet hoch zu sein. Wie viele Seiten enthält jeder Index?sys.dm_db_index_physical_stats
Ausgabe zeigen ?Antworten:
Ich denke, Sie sollten höhere
FILLFACTOR
Einstellungen ausprobierenHighScore_RoundGroup_Nidx
(z. B. 50 oder 40). Sie könnenFILLFACTOR
0 oder 100 für festlegen ,PRIMARY KEY
da es nicht fragmentiert werden soll. Wenn dies immer noch der Fall ist,FILLFACTOR
hilft dies nicht, da der Grund dafür ist, dass neu zugewiesene Seiten mit anderen neu zugewiesenen Seiten verschachtelt sind. Dies ist ein bekanntes SQL Server-Problem. Sie können diesen Index in eine eigene Dateigruppe verschieben, um dieses Problem zu beheben.quelle
Vielleicht denken Sie, Sie werden neu erstellt, aber der Index wird nicht neu erstellt, weil der Index nicht groß genug ist.
Schauen Sie sich diese Frage an. Warum reduziert Index REBUILD die Indexfragmentierung nicht?
Haben Sie die Fragmentierung nach dem Wiederaufbau überprüft? Ist es tatsächlich defragmentiert.
quelle