Die Ausführung der Abfrage "" ist mit folgendem Fehler fehlgeschlagen: "Der Index" "(Partition 1) für Tabelle" "kann nicht reorganisiert werden, da die Sperre auf Seitenebene deaktiviert ist."
Der Wartungsplan muss versuchen, eine ALTER INDEX REORGANIZE durchzuführen, bei der es sich um eine Online-Operation handelt. Um die Fragmentierung zu entfernen (Seiten nicht in der richtigen Reihenfolge), müssen Seiten gesperrt und verschoben werden. Dies ist nicht möglich, wenn die Seitensperren deaktiviert wurden. Die einzige Möglichkeit zum Defragmentieren ohne Seitensperren besteht darin, die gesamte Partition zu sperren, was für REORGANIZE nicht nur online möglich ist.
Was ist der Unterschied zwischen den beiden Verriegelungsschemata und was sind ihre realen (in der Produktion) Konsequenzen?
Sie müssen verstehen, was ein Datensatz und eine Seite sind, um die Auswirkungen der Nichtzulassung eines bestimmten Sperrtyps zu bewerten. Wenn Sie mit SQL Server-Speicherinternalen nicht vertraut sind, beginnen Sie mit Anatomie eines Datensatzes und Anatomie einer Seite . Ganz einfach gesagt:
- Zeilen = Datensätze
- Zeilen werden in Seiten von 8 KB gespeichert
Wenn Sie die zulässigen Sperrtypen ändern:
- Seitensperren deaktivieren = Nur Zeilen- und Tabellensperren
- Zeilensperren deaktivieren = Nur Seiten- und Tabellensperren
- Deaktivieren Sie beide = Nur Tabellensperren
Mir sind zwei Szenarien bekannt, in denen es vorteilhaft sein kann, einen Sperrtyp nicht zuzulassen. Das bedeutet nicht, dass es keine anderen gibt, hoffentlich wird jemand anderes mit Beispielen einspringen.
Eine Nachschlagetabelle, auf die häufig zugegriffen wird und die sich nur selten ändert. Durch Deaktivieren der Sperren auf Seiten- und Zeilenebene erhalten alle Leser eine gemeinsame Tabellensperre. Dies ist schneller / billiger als die übliche Absicht, die in der Tabelle geteilt wird, gefolgt von Absicht, die auf einer Seite geteilt wird, und schließlich eine gemeinsame Sperre für eine bestimmte Zeile oder Zeilen.
Verhindern eines bestimmten Deadlock-Szenarios - Wenn Sie auf Deadlocks stoßen, die durch gleichzeitige Prozesse verursacht werden, die Sperren erwerben, die sich häufig auf derselben Seite befinden. Wenn Sie Zeilensperren nicht zulassen, werden stattdessen Seitensperren verwendet. Es kann jeweils nur ein Prozess auf die Seite zugreifen, der andere muss warten.
Das erste Beispiel ist die Mikrooptimierung und es ist unwahrscheinlich, dass ein typisches System einen messbaren Nutzen bringt. Das zweite Problem löst dieses spezielle Deadlock-Szenario, kann jedoch unerwartete Nebenwirkungen hervorrufen, z. B. das Beenden der Parallelität in einem anderen Codeabschnitt. Es ist schwierig, die Auswirkungen vollständig zu bewerten. Gehen Sie vorsichtig vor!
Die Standardeinstellung ist, dass beide aktiviert sind und dies nicht ohne wichtigen Grund geändert werden sollte.