Ich habe einen Webdienst erstellt, der neue Daten mit einem Iterator (Bigint) aus einer großen Tabelle (100 Millionen Zeilen) in einem Buchhaltungssystem (SQL Server 2008 R2 Standard Edition) abfragt.SQL Server Sperren auf SELECT
Der Anbieter der Datenbank hat uns gezwungen, nicht aufgegebene Transaktionen zu lesen, um sicherzustellen, dass wir die Tabelle für Einfügungen nicht sperren (Aktualisierungen werden nie vorgenommen).
In letzter Zeit hat uns das aufgrund von Rollbacks Probleme bereitet. Das Buchhaltungssystem weist Rollback-Zeilen auf, die aufgrund von Fehlern und Zeitüberschreitungen bereits vom Web-Service gelesen wurden, wodurch mein System Daten speichert, die niemals existieren sollten.
Ich denke gelesenen commited Daten würde dies lösen, aber der Accounting-System-Anbieter wird uns nicht lassen, da sie besorgt sind, dass es Einsätze in die Tabelle sperren wird.
Kann die Auswahl tatsächlich Blöcke blockieren und wie würden wir sie am besten lösen?
Wie wäre es mit 'mit Nolock' – ChrisBint
Das ist im Grunde, was ich tue (lesen Sie nicht committed) und das verursacht das Problem. Was ich tun möchte, ist verpflichtet zu lesen, ohne Einfügesperren zu verursachen. – FredrikR
Ihr Provider muss die Datenbank so einstellen, dass sie die festgeschriebene Snapshot-Isolation liest: https://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-committed-snapshot-isolation-in-sql-server- ein Ratgeber/. Dadurch können Sie die Datensätze vor dem Beginn einer Transaktion lesen, ohne dass eine Transaktion blockiert wird. –