Ich kenne die Theorie, dass die Lese mit Bereichssperren & die Schreibsperren für die Dauer der Transaktion in einer serialisierbaren Isolationsstufe gehalten werden. Ich kann jemanden verstehen, der eine Erklärung abgibt. "Da alle Dinge gleich sind, kann die serielle Isolierung MAI, ABER NICHT NOTWENDIG, zu weniger Parallelität führen als auf jeder anderen Isolationsstufe." Aber wie alle Blogs/Dokumente es angeben, scheint eine geringere Nebenläufigkeit und ein höherer Stillstand eine Gewissheit zu sein. Ich versuche zu verstehen, warum es in meinem konkreten Fall praktisch so sein sollte. Hier sind Fragen, die ich habeWarum führt eine serialisierbare Isolationsstufe zu Deadlock- und Concurrency-Problemen?
Sollte eine serializable Isolationsstufe niedriger Parallelität führen, wenn die verschiedenen Verbindungen nicht den gleichen Satz von Aufzeichnungen zugreifen? Ich nehme ein "fein abgestimmtes" OLTP-System an, bei dem jede Abfrage eine "Punktabfrage" ist, die nur wenige Zeilen zurückgibt und der Optimierer große Pläne hat. Ich denke auch an Datenseiten und nicht an die Indexseiten.
Warum würden die Deadlocks zunehmen? Sind diese auf die Aktualisierungen der Indexseiten zurückzuführen? Aber diese können auf jeder Isolationsstufe auftreten, abgesehen von einer Snapshot-Isolation. Also warum sollte man die serialisierbare Isolationsebene aussortieren?
Ich werde natürlich die Antwort nehmen die sagt: ‚Sie nie wissen, wann Sie Ihre Ausführungspläne schlecht basierend auf Benutzereingaben gehen. Sie machen eine schlechte Situation schlimmer, indem Sie eine höhere als die erforderliche Isolationsstufe einstellen. Stellen Sie also die höchste Isolationsstufe ein, die am besten für Sie funktioniert.
Ich würde sicherlich mit Ihnen einverstanden sein, wenn die Verbindungen Abstand Sperren nehmen. Aber antwortest du immer noch gut, wenn es für 2 verschiedene Benutzerverbindungen selten wäre, auf den exakt gleichen Datensatz/Seite zuzugreifen? – QFirstLast
Mit Bereichssperren sperren Sie eine Metastruktur. Das heißt, die Daten müssen nicht einmal für eine Operation existieren, die versucht, sie zu ändern, um sie zu blockieren (siehe die obigen Aufzählungspunkte). Wenn Sie also wissen, dass Ihre zwei (oder mehr) Anwendungen disjunkte Bereiche ändern werden, dann sind Sie gut. Aber ich würde widersprechen mit: Warum würden Sie an diesem Punkt serialisierbare Isolierung benötigen? –
Danke Ben. In Bezug auf "warum würden Sie zu diesem Zeitpunkt eine serialisierbare Isolierung benötigen?" Haben wir noch keine Entscheidung getroffen.Wir sind dabei, die Eigenschaften, Vor- und Nachteile jeder Isolationsstufe zu verstehen und sie auf unsere Situation anzuwenden. Deine Antwort hat geholfen. Ich werde versuchen, Ihre Antwort als Antwort zu markieren. Das letzte Mal, als ich es versuchte, ließ mich die Seite nicht sagen "Ich brauchte einige x Punkte, bevor ich das tun konnte". – QFirstLast