Czy SSRS blokuje tabelę podczas zapytania?

9

Mój starszy DBA powiedział mi, że domyślnie wykonanie zapytania SQL nie blokuje tabeli.

Miałem problemy z raportem SQL Server Reporting Services (SSRS), który wydaje się mieć problemy z blokowaniem i błędami.

Zrobiłem trochę Googlinga, ale niczego nie znalazłem.

Czy raporty SSRS blokują tabele, których dotyczy zapytanie?

Czy istnieje dokumentacja MSDN, która dokumentuje to zachowanie?

Melaos
źródło
Mieliśmy ten sam problem. Chociaż technicznie nie jest to odpowiedź na twoje pytania, zrobiliśmy szybką poprawkę, uruchamiając zapytania do zestawu danych, SET TRANSACTION ISOLATION LEVELna przykład READ UNCOMMITTEDjeśli nie masz nic przeciwko ryzykowaniu kilku nieprzyzwoitych odczytów.
Jeroen,
Tak jak uwaga na przyszłość, możesz przekierować raportowanie obciążenia do czytelnych
plików

Odpowiedzi:

7

Krótka odpowiedź: nie

Dłużej...

SQL Server nie wie, że to SSRS wysyła do niego zapytanie. Tak więc zapytanie z SSRS będzie działać jak każde inne zapytanie.

Bardziej prawdopodobne jest, że optymalizator zapytań zdecyduje się użyć blokady tabeli dla zapytania SSRS. Oczywiście może to być inny problem, ale to inne pytanie

gbn
źródło
mm, a więc czy SRSS próbuje zablokować tabelę, kiedy wysyła zapytanie?
melaos,
Instrukcja T-SQL powoduje pewien rodzaj blokady lub inny, w zależności od instrukcji T-SQL. Nie zależy od tego, skąd pochodzi ta instrukcja (SSRS, okno zapytań, aplikacja itp.)
Eric Higgins
4

mój starszy powiedział mi, że dla wykonania zapytania SQL domyślnie nie blokuje tabeli.

To prawda. Nie oznacza to jednak, że zapytanie nie może zablokować tabeli.

czy raport SSRS faktycznie zablokuje tabele, których dotyczy zapytanie?

SSRS pobiera dane używane do renderowania raportu, uruchamiając zapytanie lub procedurę składowaną względem bazy danych.

To zapytanie jest definiowane przez programistę i może spowodować zablokowanie tabeli (lub tabel), w zależności od poziomu izolacji i liczby zaangażowanych wierszy. (W rzeczywistości mogą wystąpić przypadki, w których chcesz to zrobić celowo ). Najważniejsze jest to, że od programisty zależy, jak działa blokowanie dla zapytania. SSRS nie może rozwiązać tego problemu. Dlatego nie ma żadnej dokumentacji.

Rozważ (na przykład):

  • Używanie, READ UNCOMMITTEDjeśli brudne odczyty są w porządku
  • Włączanie i używanie poziomu izolacji migawki
  • Rejestruj wysyłkę w trybie gotowości i uruchamiaj zapytania względem kopii tylko do odczytu
Jon Seigel
źródło
2

Skąd wiesz, że podczas działania raportu istnieje blokada? Sugeruję, abyś sprawdził zapytanie / przechowywane proc, które jest źródłem raportu i upewniło się, że samo działa dobrze.

Jeśli masz pewność, że zapytanie źródłowe działa poprawnie, spróbuj wskazać problem za pomocą narzędzia do profilowania serwera SQL. Poniższy link może pomóc:
/programming/9107383/sql-server-profiler-capture-calls-to-your-databases-stored-procs-during-ssrs

Niebo
źródło
ponieważ uruchamiałem raport w kilku przeglądarkach, a raport wciąż zawiera błędy, że proces jest zablokowany przy zablokowanym zablokowaniu.
melaos,
W takim przypadku najprawdopodobniej Twój raport próbuje odczytać dane zablokowane przez innego użytkownika (np. Ktoś aktualizuje ten sam rekord). Możesz dodać „bez blokady” do wszystkich instrukcji „Wybierz”, jeśli odczyt nieprzypisanych danych jest w porządku.
Niebo