SSRS блокирует таблицу при запросе?

9

Мой старший администратор БД сказал мне, что выполнение SQL-запроса по умолчанию не блокирует таблицу.

У меня возникли некоторые проблемы с отчетом служб отчетов SQL Server (SSRS), в котором, похоже, возникают проблемы с блокировкой и ошибками.

Я немного погуглил, но ничего не нашел.

Блокируют ли отчеты SSRS запрашиваемые таблицы?

Есть ли документация MSDN, которая конкретно описывает это поведение?

melaos
источник
У нас была такая же проблема. Хотя это технически не является ответом на ваши вопросы, мы быстро решили проблему, начав запросы к набору данных, SET TRANSACTION ISOLATION LEVELнапример, READ UNCOMMITTEDесли вы не против рискнуть сделать несколько грязных операций чтения.
Jeroen
В качестве заметки на будущее вы можете перенаправить загрузку отчетов на читаемые вторичные устройства с помощью группы доступности AlwaysOn в SQL 2012. msdn.microsoft.com/en-us/library/hh882437.aspx
wBob

Ответы:

7

Краткий ответ: нет

Longer ...

SQL Server не знает, что SSRS отправляет ему запрос. Таким образом, запрос из SSRS будет выполняться как любой другой запрос.

Скорее всего, оптимизатор запросов решит использовать блокировку таблицы для запроса SSRS. конечно, это может быть другая проблема, но это другой вопрос

ГБН
источник
мм так, тогда SRSS пытается заблокировать таблицу, когда он делает запрос тогда?
Мелаос
Оператор T-SQL приводит к тому или иному типу блокировки, в зависимости от оператора T-SQL. Это не зависит от того, откуда исходит этот оператор (SSRS, окно запроса, приложение и т. Д.)
Эрик Хиггинс,
4

мой старший сказал мне, что для выполнения SQL-запросов по умолчанию таблица не блокируется.

Это правда. Однако это не означает, что запрос не может заблокировать таблицу.

действительно ли SSRS-отчет блокирует все запрашиваемые таблицы?

SSRS получает данные, используемые для визуализации отчета, выполняя запрос или хранимую процедуру к базе данных.

Этот запрос определяется разработчиком, и он может в конечном итоге заблокировать таблицу (или таблицы) в зависимости от уровня изоляции и количества задействованных строк. (На самом деле, могут быть случаи, когда вы захотите сделать это нарочно .) Суть в том, что разработчик должен решить, как работает блокировка для запроса. SSRS не может решить эту проблему для вас. Вот почему нет никакой документации.

Рассмотрим (например):

  • Использование, READ UNCOMMITTEDесли грязное чтение в порядке
  • Включение и использование уровня изоляции снимка
  • Доставка журналов в режиме ожидания и выполнение запросов к копии только для чтения
Джон Сайгель
источник
2

Откуда вы знаете, что при выполнении отчета есть какие-либо блокировки? Я бы посоветовал вам проверить запрос / сохраненный процесс, являющийся источником отчета, и убедиться, что он работает нормально сам по себе.

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

Небо
источник
потому что я запустил отчет в нескольких браузерах, и в отчете постоянно появляются сообщения об ошибках, которые заблокированы.
Мелаос
В этом случае, скорее всего, ваш отчет пытается прочитать данные, заблокированные другим пользователем (например, кто-то обновляет ту же запись). Вы можете добавить «без блокировки» ко всем операторам «Выбрать», если чтение незафиксированных данных в порядке.
Небо