2016-08-07 14 views
1

Ich habe eine Funktion, mit der ein Benutzer alle hochgeladenen Dateien anzeigen kann. Um dies zu erreichen, füge ich einen Datensatz in die Datenbank ein und lade dann eine Datei in AWS S3 hoch. Ich verwende die ID aus dem Datensatz für den Dateinamen. Wenn die ID beispielsweise 53 lautet, lautet der Dateiname 53.pdf. Sowohl das Einfügen des Datensatzes als auch das Hochladen der Datei erfolgt in einem TransactionScope. Ich bin besorgt, dass die Datenbank während dieser langen Operation gesperrt wird. Gibt es eine Möglichkeit zu verhindern, dass die Datenbank gesperrt wird?Datenbanksperren beim Hochladen einer Datei in einer Transaktion verhindern

+0

Standardmäßig verwendet SQL Server ** Sperren auf Zeilenebene ** - keine Sperren für Tabellen oder Datenbanken. –

Antwort

1

Ich bin besorgt, dass die Datenbank während dieser langen Operation gesperrt wird. Gibt es eine Möglichkeit zu verhindern, dass die Datenbank gesperrt wird?

Sie brauchen sich nicht um Datenbank Sorge blockiert werden, die nur Transaktionen, die eine exklusive Sperren auf Datenbank benötigen, sind Alter Datenbankanweisungen, diese exklusive Sperren erfordern und möglicherweise die gesamte Datenbank sperren können.

Sie müssen sich keine Sorgen über Objektebene Transaktionen Datenbank blockiert

unten Probe Sperren Screenshot genommen, wenn ich zwei Einsätze liefen Aussagen in parallel..As können Sie für Insert sehen, SQLServer erwirbt (IX-Sperre) auf Objekt, das besagt "ich werde etwas exklusiv auf Ebene unter Tabelle sperren ..."

Also in diesem Fall, wenn Sie eine andere Transaktion ausführen möchten, die ID aus der gleichen Tabelle auswählen und einfügen muss In derselben Tabelle wird Select gesperrt (auf normalem SQL Server, auf dem Standard Isolation lev ausgeführt wird) el) .. Aber nicht einfügen ...

enter image description here

Aber zu, wird standardmäßig auf RCSI die in einfachen Worten bedeutet `Lese Sitzungen werden nicht 'blockiert werden ..

ich bin nicht sicher, ob dies der Fall mit SQLServer in AWS als auch ?? ist .. Sie diese unten Abfrage, indem Sie überprüfen (überprüfen Sie die Isolationsstufe ab Spalte)

select * from sys.databases 
+0

Blockiert es die Tabelle für die Dauer der Transaktion? – Luke101

+0

Nein, die Tabelle wurde für die Dauer einer Transaktion gesperrt, wie die, die Sie haben – TheGameiswar

+0

Großartig, danke Mann – Luke101

Verwandte Themen