Есть ли способ заставить построитель отчетов использовать «WITH (NOLOCK)» в запросах, которые он генерирует? - PullRequest
2 голосов
/ 22 декабря 2010

На работе пользователи очень рады создавать свои собственные отчеты с помощью построителя отчетов служб Reporting Services.

Но, увы, генерируемые им запросы очень неэффективны , и они неt использовать «WITH (NOLOCK)» - замедление работы для всех.

Это отчеты, которые действительно нужно запускать с использованием последних данных - их нельзя выгружать на сервер отчетов.И поскольку они запрашивают очень конкретные подробные данные, гиперкубы здесь бесполезны.

Итак, вопрос в следующем:

Есть ли способ настроить модели данных построителя отчетов, чтобы запросы, которые он генерирует всегдаиспользовать "WITH (NOLOCK)" при запросе таблицы?

Ответы [ 2 ]

5 голосов
/ 22 декабря 2010

NOLOCK не является решением.Грязные чтения несовместимые чтения .Ваши итоги будут отключены, ваши отчеты не будут сбалансированы, и вы, как правило, будете получать совокупные данные мусора.Используйте изоляцию моментальных снимков, чтобы предотвратить блокировку обновлений в отчетах и ​​запретить обновлениям:

ALTER DATABASE ... SET READ_COMITTED_SNAPSHOT ON;

Подробнее см. Уровни изоляции на основе управления версиями строк в компоненте Database Engine .

4 голосов
/ 22 декабря 2010

Создание представлений в качестве источника данных для отчета и добавление with (nolock) ко всем таблицам в операторе выбора представления.

...