Algum contexto:
no início, escrevemos relatórios apenas "diretamente", sem nenhuma dica de bloqueio nas consultas. Com os relatórios maiores, isso às vezes causava problemas de bloqueio. No primeiro nós remediado isso usando a WITH (NOLOCK)
dica para tabelas na consulta.
Como (a) é bastante invasivo e (b) é fácil esquecer a dica para uma das tabelas, passamos para uma segunda configuração de abordagem TRANSACTION ISOLATION LEVEL
para READ UNCOMMITTED
(o que é bom) na parte superior da consulta de cada conjunto de dados.
Como você pode imaginar, ainda é fácil esquecer a dica para um dos conjuntos de dados. Portanto, isso leva à pergunta:
Pergunta: Quais são as opções para enviar NOLOCK
dicas junto com consultas de relatório?
PS. Sei que isso é, de certa forma, um problema XY (com muitas das minhas outras opções para X, como otimizar a consulta, não gerar relatórios no banco de dados operacional, etc.), mas tentei fazer disso uma pergunta válida em si mesma. .
Opções:
Aqui estão as opções mencionadas acima, com opções adicionais sobre as quais tenho curiosidade de saber se elas funcionariam:
- Definir
WITH (NOLOCK)
dica para cada tabela. (intrusivo, muito fácil de esquecer) - Defina o nível de isolamento
READ UNCOMMITTED
para a consulta inteira. (ainda fácil de esquecer) - É possível especificar isso no nível do relatório ? Por exemplo, verifique se todas as consultas do conjunto de dados de um relatório serão executadas sem bloqueio.
- É possível especificar isso em algum outro nível do SSRS ? Por exemplo, talvez defina isso para uma determinada pasta de relatório ou utilizando uma extensão?
- É possível especificar isso no nível da fonte de dados / cadeia de conexão ? Por exemplo, todos os relatórios relevantes usam uma certa "fonte de dados sem bloqueio"?
- Relacionado à opção anterior: talvez seja possível especificar uma dica de bloqueio padrão para um "usuário no-lock-sql-user" específico (aquele que é usado na conexão)?
- ???
Quais opções são viáveis? Há opções que eu perdi?