2010-12-22 12 views
2

Bei der Arbeit erstellen Benutzer sehr gerne eigene Berichte mit dem Report Builder von Reporting Services.Gibt es eine Möglichkeit, Report Builder zu erzwingen, "WITH (NOLOCK)" in den Abfragen zu verwenden, die es generiert?

Aber leider sind die Abfragen, die es generiert sehr ineffizient, und sie verwenden nicht "MIT (NOLOCK)" - die Dinge für alle verlangsamen.

Diese Berichte müssen wirklich mit den neuesten Daten ausgeführt werden - sie können nicht auf den Berichtsserver ausgelagert werden. Und da sie sehr spezifische, detaillierte Daten abfragen, sind Hypercubes hier nutzlos.

Die Frage ist also:

Gibt es eine Möglichkeit Berichts-Generator die Datenmodelle so die Abfragen zu konfigurieren „WITH (NOLOCK)“ verwenden, erzeugt immer dann, wenn eine Tabelle abfragt?

Antwort

3

Erstellen Sie Ansichten als Datenquelle für den Bericht und fügen Sie allen Tabellen in der SELECT-Anweisung der Ansicht with (nolock) hinzu.

+1

Ich wünschte, es gäbe eine SSRS-Konfiguration Option für diese, da es nicht (oder ich kann es nicht finden) dies scheint die sinnvollere Lösung. –

5

NOLOCK ist keine Lösung. Dirty liest sind inconsistent reads. Ihre Gesamtbeträge werden nicht angezeigt, Ihre Berichte werden nicht ausgeglichen, und Sie werden im Allgemeinen Daten zur Datenmüllsammlung erstellen. Verwenden Sie die Snapshot-Isolation zu verhindern, dass Berichte blockiert Updates und zu verhindern, dass Updates von blockierenden Berichten:

ALTER DATABASE ... SET READ_COMITTED_SNAPSHOT ON; 

Siehe Row Versioning-based Isolation Levels in the Database Engine für weitere Details.

+0

Da dies ein SQL 2000-Server ist, sind Isolationsstufen für mich nutzlos. Und ja, ich weiß im Voraus von Phantomlesungen und anderen Gefahren - sie sind besser als das, was wir haben. –