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?
sql-server-2008
locking
Melaos
źródło
źródło
SET TRANSACTION ISOLATION LEVEL
na przykładREAD UNCOMMITTED
jeśli nie masz nic przeciwko ryzykowaniu kilku nieprzyzwoitych odczytów.Odpowiedzi:
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
źródło
To prawda. Nie oznacza to jednak, że zapytanie nie może zablokować tabeli.
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):
READ UNCOMMITTED
jeśli brudne odczyty są w porządkuźródło
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
źródło