2015-12-17 25 views
5

Ich versuche, einen Bericht zu optimieren, der mehrere gespeicherte Prozeduren in derselben Tabelle verwendet. Leider liest jedes Verfahren Millionen von Datensätzen und aggregiert die Ergebnisse. Es ist ein sehr intensiver Lesevorgang für einen Bericht, aber jede gespeicherte Prozedur ist so optimiert, dass sie innerhalb von SSMS ziemlich schnell abläuft.Führt SSRS mehrere Abfragen gleichzeitig aus?

Ich kann jede gespeicherte Prozedur ausführen und ein Ergebnis innerhalb von 10 bis 20 Sekunden erhalten. Wenn ich sie alle in einen Bericht innerhalb von SSRS eintrage, läuft der Bericht ab.

Es gibt insgesamt 4 Parameter pro gespeicherter Prozedur. Alle zielen auf dieselbe Tabelle ab und aggregieren die Daten auf unterschiedliche Weise. Indizes für diese Tabellen sind mit der Abfrage verknüpft. Es basiert auf Zeit, Benutzer und der einen Dimension, die ich zu COUNT() verwende, sowohl DISTINCT als auch NONDISTINCT.

Ich denke, das Problem ist die Tatsache, dass SSRS 4 Verfahren zur gleichen Zeit auf der gleichen Tabelle im Gegensatz zu einer nach dem anderen läuft. Ist das wahr? Wenn ja, gibt es trotzdem, dass SSRS sie nicht parallel laufen lässt?

Meine einzige Option ist Sichtstabelle zu erstellen, die bereits preaggregated ist. Dann führe einfach den Bericht von dieser Tabelle aus. Ansonsten ist param Schnüffeln auch möglich.

+0

Können Sie die Aktivität in einer Nicht-Prod-Umgebung nachahmen und eine Profilprotokollierung ausführen? Das würde Ihnen sagen, was gleichzeitig läuft. Eine andere Möglichkeit besteht darin, sie regelmäßig aktualisieren zu lassen, damit der Bericht bereit ist. –

+1

Ich habe Situationen gesehen, in denen der Rendering-Schritt das Stück der Pipeline ist, das so lange dauert und für die Zeitüberschreitung verantwortlich ist. Ich sage nicht, dass das definitiv in Ihrem Fall vorkommt, ich sage nur, dass es eine mögliche Erklärung für die schnelle Ausführung in SSMS und sehr langsam in SSRS ist. –

+0

Wie wäre es mit zunehmendem Timeout http://geekswithblogs.net/ssrs/archive/2009/10/30/steps-to-resolve-ssrs-timeout-issues.aspx – niketshah90

Antwort

6

Standardmäßig werden Datensätze in SSRS parallel ausgeführt.

Wenn alle Ihre Datensätze auf den gleichen Datenquelle beziehen, dann können Sie für serialisierten Ausführung der Datensätze auf einer einzelnen Verbindung konfigurieren, dass diese Art und Weise:

  • die Datenquelle Dialog in Report Designer öffnen
  • gewährleisten dass die benutzen Transaktion Checkbox
  • geprüft

Sobald das Kontrollkästchen aktiviert ist, Datensätze, die die gleiche Datenquelle verwenden, werden nicht mehr parallel ausgeführt werden.

Ich hoffe, dass das Ihr Problem löst.

+1

Danke. Das habe ich nicht gesehen. Leider ist es dadurch langsamer geworden. Ich habe gerade alle 4 Prozeduren in SSMS für einen Tag für einen der Params ausgeführt und es kam in 7 Sekunden zurück. Es sollte nur 4 Zeilen an SSRS zurückgeben. Wenn ich diese Änderung verwende, läuft die Zeit ab. Ich habe keine Ahnung warum ... SSMS ist 7 Sekunden. Aber das ist eine richtige Antwort, unabhängig von meinem Leistungsproblem, was wahrscheinlich nicht an dieser Option liegt. – Fastidious

+0

Die Tatsache, dass nur 4 Zeilen zurückgegeben werden, negiert den Vorschlag, den ich in einem früheren Kommentar bezüglich der Renderzeit gemacht habe. Ich wäre dankbar für die Annahme, aber wenn ich nicht verstehe. –

+0

Ja, keine Probleme. – Fastidious

Verwandte Themen