SQL Server: 12% index scan-Dichte und 50% Fragmentierung. Wie schlecht ist "schlecht"?
Wie viel Fragmentierung ist schlecht? Wie tief der scan-Dichte zu niedrig ist?
Wie tief scannt die Dichte bad?
ich habe eine Tabelle mit den folgenden index Dichte und Fragmentierung:
Name Scan Density Logical Fragmentation
============================= ============ =====================
IX_TransactionEntries_Tran... 12.834 48.392
IX_TransactionEntries_Curr... 15.419 41.239
IX_TransactionEntries_Tran... 12.875 48.372
TransactionEntries17 98.081 0.0049325
TransactionEntries5 12.960 48.180
PK_TransactionEntries 12.869 48.376
TransactionEntries18 12.886 48.480
IX_TranasctionEntries_CDR... 12.799 49.157
IX_TransactionEntries_CDR... 12.969 48.103
IX_TransactionEntries_Tra... 13.181 47.127
Können Sie sehen, dass ich nur defragmentiert TransactionEntries17
, das ist, warum die Scan-Dichte ist so hoch, und es ist Fragmentierung so niedrig ist.
Aber 12% scan-Dichte schrecklich niedrig? 48% Fragmentierung schrecklich hoch?
ich bin immer performance-Probleme beim löschen von Zeilen (erfordert index-scan). Ist der index-Fragmentierung ein RIESIGE BLINKENDE ROTE ALARM auf einem 70000 Seite index, oder ist es ein möglich aber unwahrscheinlich Ursache?
Vom SQL Server-BOL:
Scan-Dichte [Bester Wert: Tatsächlicher Wert]
Ist ein Prozentsatz. Es ist das Verhältnis Besten Zählen zu Tatsächliche Anzahl. Dieser Wert ist 100, wenn alles zusammenhängend ist; wenn dieser Wert kleiner als 100, einige Fragmentierung vorhanden ist.
Besten Zählen ist die ideale Anzahl von blockwechseln, wenn alle Daten zusammenhängend verknüpft sind. Tatsächliche Anzahl ist die tatsächliche Anzahl von blockwechseln.
LogicalFragmentation
Prozentsatz der out-of-order-Seiten zurückgegeben, die beim Scannen der Blattseiten eines Indexes. Diese Zahl ist für heaps nicht relevant. Eine out-of-order-Seite ist eine Seite, für die die nächste physische Seite, die dem index zugeordnet ist, nicht die Seite gezeigt, durch den nächste-Seite-Zeiger in der aktuellen Blattseite.
Aber es gibt keine Hinweise darüber, was Fragmentierung ist zu hoch und muss verringert werden. Noch gibt es keine Anleitung über das, was scan-Dichte ist zu gering und sollte erhöht werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie alles, was in SQL, es hängt davon ab,.
Es wird davon abhängen, Sachen wie Streit (erhöht mal warten, da es mehr Daten, Seiten zu "kämpfen" hat), wie weit die Indizes sind, etc etc etc etc.
Aus meiner persönlichen Erfahrung, ich habe einige Tests der Auswirkungen der Fragmentierung auf einige builds und Belastungen, die ich laufen.
Für eine Aggregat-intensive Prozedur, lief ich einen Lauf gegen einen Tisch, der war 40% fragmentiert, und ein weiteres gegen die "gleichen" Tisch mit 0% Fragmentierung.
40% fragmentiert Tisch nahm 1,200% mehr, um führen Sie die gleichen grundlegenden Vorgänge.
Kann Ihre Laufleistung variieren, aber es macht einen großen Unterschied.
Paul Randal, der wohl verantwortlich ist für die meisten von DBCC in SQL Server 2005+, hält das für eine ziemlich große Sache auch.
Kurz gesagt, der einzige Weg, um sicher wissen, ist die testen wollen. BOL nicht geben Leitlinien auf Bereiche, für die Dichte und Fragmentierung, weil es zu viele Variablen, um eine "Allgemeine" Bewertung.
Es ist wie die Frage: "Ist mein Auto zu stark beschädigt?" Die Antwort hängt davon ab, "zu beschädigt, für was?", wie weit Sie fahren, wie schnell, auf welche Art von Straßen, was für ein Wetter, was Zeit des Jahres, und eine million andere Dinge.