Чи блокує SSRS таблицю під час запитів?


9

Мій старший DBA сказав мені, що виконання SQL Query за замовчуванням не блокує таблицю.

У мене виникли деякі проблеми з моїм звітом служби звітування SQL Server (SSRS), який, здається, виникає з проблемою блокування та помилок.

Я зробив деякий Googling, але мені не вистачало нічого.

Чи блокують звіти SSRS таблиці, які запитуються?

Чи є документація MSDN, яка конкретно документує цю поведінку?


У нас була така ж проблема. Хоча технічно це не відповідь на ваші запитання, ми швидко вирішили, запустивши запити набору даних, SET TRANSACTION ISOLATION LEVELнаприклад, READ UNCOMMITTEDякщо ви не заперечуєте, ризикуючи прочитати кілька брудних читань.
Єроен

Як і примітка до майбутнього, ви можете перенаправити завантаження звітів на читабельні вторинники за допомогою групи AlwaysOn Availability Group у SQL 2012. msdn.microsoft.com/en-us/library/hh882437.aspx
wBob

Відповіді:


7

Коротка відповідь: Ні

Довше ...

SQL Server не знає, що SSRS надсилає йому запит. Таким чином, запит із SSRS буде виконуватись як і будь-який інший запит.

Більш імовірно, що оптимізатор запитів вирішить використовувати блокування таблиці для запиту SSRS. Звичайно, це може бути інша проблема, але це інше питання


мм, тож SRSS намагається заблокувати таблицю, коли вона робить запит?
melaos

Оператор T-SQL призводить до певного блокування або іншого типу, залежно від оператора T-SQL. Це не залежить від того, звідки походить цей вислів (SSRS, вікно запитів, додаток тощо)
Eric Higgins

4

мій старший сказав мені, що для виконання SQL Query за замовчуванням не блокується таблиця.

Це правда. Однак це не означає, що запит не може заблокувати таблицю.

чи звіт SSRS насправді блокує будь-які таблиці, які запитуються?

SSRS отримує дані, які використовуються для візуалізації звіту, шляхом запуску запиту або збереженої процедури проти бази даних.

Цей запит визначає розробник, і він може закінчитися блокуванням таблиці (або таблиць), залежно від рівня ізоляції та кількості рядків. (Насправді, можуть бути випадки, коли ви хочете це зробити спеціально .) Суть полягає в тому, що розробник залежить від того, як працює запит на запит. SSRS не може вирішити цю проблему для вас. Тому немає жодної документації.

Розглянемо (наприклад):

  • Використовуйте, READ UNCOMMITTEDякщо брудні читання в порядку
  • Увімкнення та використання рівня ізоляції знімків
  • Увімкніть доставку журналу в режимі очікування та запустіть запити проти копії, яка лише для читання

2

Звідки ви знаєте, що під час запуску звіту є якесь блокування? Я б запропонував вам перевірити запит / збережений протокол, що є джерелом звіту, і переконатися, що він працює нормально сам по собі.

Якщо ви впевнені, що вихідний запит працює нормально, спробуйте точно визначити проблему за допомогою профіля сервера SQL. Посилання нижче може допомогти:
/programming/9107383/sql-server-profiler-capture-calls-to-your-databases-stored-procs-during-ssrs


тому що я працював у звіті на декількох веб-переглядачах, і звіт постійно отримував помилки, що там процес заблокований із мертвим блокуванням.
melaos

У цьому випадку, швидше за все, ваш звіт намагається прочитати дані, які заблоковано іншим користувачем (наприклад, хтось оновлює той самий запис). Ви можете додати "без блокування" до всіх заяв "Вибрати", якщо читання непосланих даних нормально.
Небо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.