Sperrt SSRS die Tabelle bei der Abfrage?

9

Mein leitender DBA hat mir mitgeteilt, dass die Ausführung von SQL Query die Tabelle standardmäßig nicht sperrt.

Ich hatte einige Probleme mit meinem SSRS-Bericht (SQL Server Reporting Services), bei denen anscheinend Probleme beim Sperren und bei Fehlern aufgetreten sind.

Ich habe ein bisschen gegoogelt, aber nichts gefunden.

Sperren SSRS-Berichte die Tabellen, die abgefragt werden?

Gibt es eine MSDN-Dokumentation, die dieses Verhalten speziell dokumentiert?

melaos
quelle
Wir hatten das gleiche Problem. Obwohl dies technisch gesehen keine Antwort auf Ihre Fragen ist, haben wir eine schnelle Lösung gefunden, indem wir SET TRANSACTION ISOLATION LEVELbeispielsweise Datensatzabfragen gestartet haben, um beispielsweise READ UNCOMMITTEDein paar schmutzige Lesevorgänge zu riskieren.
Jeroen
Nur als Hinweis für die Zukunft können Sie die Berichtslast mit einer AlwaysOn-Verfügbarkeitsgruppe in SQL 2012 auf lesbare Secondaries umleiten. Msdn.microsoft.com/en-us/library/hh882437.aspx
wBob

Antworten:

7

Kurze Antwort: Nein

Länger...

SQL Server weiß nicht, dass SSRS ihm eine Abfrage sendet. Die Abfrage von SSRS wird also wie jede andere Abfrage ausgeführt.

Es ist wahrscheinlicher, dass der Abfrageoptimierer eine Tabellensperre für die SSRS-Abfrage verwendet. Natürlich könnte es ein anderes Problem sein, aber das ist eine andere Frage

gbn
quelle
mm also versucht SRSS dann, die Tabelle zu sperren, wenn es dann abfragt?
Melaos
Die T-SQL-Anweisung führt je nach T-SQL-Anweisung zu einer oder einer anderen Art von Sperre. Es ist nicht abhängig davon, woher diese Anweisung stammt (SSRS, Abfragefenster, App usw.)
Eric Higgins
4

Mein Senior sagte mir, dass die Ausführung von SQL Query die Tabelle standardmäßig nicht sperrt.

Das ist wahr. Dies bedeutet jedoch nicht, dass eine Abfrage eine Tabelle nicht sperren kann .

Sperrt der SSRS-Bericht tatsächlich alle Tabellen, die abgefragt werden?

SSRS ruft die zum Rendern des Berichts verwendeten Daten ab, indem eine Abfrage oder eine gespeicherte Prozedur für die Datenbank ausgeführt wird.

Diese Abfrage wird vom Entwickler definiert und kann dazu führen , dass eine Tabelle (oder Tabellen) gesperrt wird, abhängig von der Isolationsstufe und der Anzahl der beteiligten Zeilen. (In der Tat kann es Fälle geben, in denen Sie dies absichtlich tun möchten .) Unter dem Strich ist es Sache des Entwicklers, wie das Sperren für die Abfrage funktioniert. SSRS kann dieses Problem nicht für Sie lösen. Deshalb gibt es keine Dokumentation.

Betrachten Sie (zum Beispiel):

  • Verwenden, READ UNCOMMITTEDwenn Dirty Reads in Ordnung sind
  • Aktivieren und Verwenden einer Snapshot-Isolationsstufe
  • Protokollieren Sie den Versand im Standby-Modus und führen Sie Abfragen für die schreibgeschützte Kopie aus
Jon Seigel
quelle
2

Woher wissen Sie, dass es eine Sperre gibt, wenn der Bericht ausgeführt wird? Ich würde Ihnen empfehlen, die Abfrage / den gespeicherten Prozess zu überprüfen, der die Quelle des Berichts ist, und sicherzustellen, dass er von selbst einwandfrei funktioniert.

Wenn Sie sicher sind, dass die Quellabfrage ordnungsgemäß funktioniert, versuchen Sie, das Problem mithilfe des SQL Server-Profilers zu ermitteln. Der folgende Link könnte hilfreich sein:
/programming/9107383/sql-server-profiler-capture-calls-to-your-databases-stored-procs-during-ssrs

Himmel
quelle
weil ich den Bericht in einigen Browsern ausgeführt habe und der Bericht immer wieder Fehler enthält, dass der Prozess mit Dead Lock gesperrt ist.
Melaos
In diesem Fall versucht Ihr Bericht höchstwahrscheinlich, Daten zu lesen, die von einem anderen Benutzer gesperrt wurden (z. B. aktualisiert jemand denselben Datensatz). Sie können allen "Select" -Anweisungen "ohne Sperre" hinzufügen, wenn das Lesen nicht festgeschriebener Daten in Ordnung ist.
Sky