O SSRS bloqueia a tabela ao consultar?

9

Meu DBA sênior me disse que a execução da Consulta SQL por padrão não bloqueia a tabela.

Eu estava tendo alguns problemas com o relatório do SQL Server Reporting Services (SSRS), que parece estar tendo alguns problemas com o bloqueio e com alguns erros.

Eu pesquisei no Google, mas não consegui encontrar nada.

Os relatórios do SSRS bloqueiam as tabelas que estão sendo consultadas?

Existe alguma documentação do MSDN que documenta esse comportamento especificamente?

Melaos
fonte
Nós tivemos o mesmo problema. Embora tecnicamente não seja uma resposta para suas perguntas, fizemos uma solução rápida iniciando consultas de conjuntos de dados com, SET TRANSACTION ISOLATION LEVELpor exemplo, READ UNCOMMITTEDse você não se importa em arriscar algumas leituras sujas.
Jeroen
Assim como uma nota para o futuro, você pode redirecionar a carga reportando-se secundárias legíveis com um Grupo de Disponibilidade AlwaysOn no SQL 2012. msdn.microsoft.com/en-us/library/hh882437.aspx
wBob

Respostas:

7

Resposta curta: Não

Mais longo...

O SQL Server não sabe que é o SSRS enviando uma consulta. Portanto, a consulta do SSRS será executada como qualquer outra consulta.

É mais provável que o otimizador de consulta decida usar um bloqueio de tabela para a consulta SSRS. claro, poderia ser um problema diferente, mas essa é uma pergunta diferente

gbn
fonte
mm, então o SRSS tenta bloquear a tabela quando faz a consulta?
Melaos 11/09/12
A instrução T-SQL resulta em algum tipo de bloqueio ou outro, dependendo da instrução T-SQL. Não é dependente de onde que se origina de instrução (SSRS, janela de consulta, app, etc)
Eric Higgins
4

meu senior me disse que, para a execução da consulta SQL, por padrão, não bloqueia a tabela.

Isso é verdade. No entanto, isso não significa que uma consulta não possa bloquear uma tabela.

o relatório do SSRS realmente bloqueará as tabelas que estão sendo consultadas?

O SSRS obtém os dados usados ​​para renderizar o relatório executando uma consulta ou procedimento armazenado no banco de dados.

Essa consulta é definida pelo desenvolvedor e pode acabar bloqueando uma tabela (ou tabelas), dependendo do nível de isolamento e quantas linhas estão envolvidas. (De fato, pode haver casos em que você queira fazer isso de propósito .) A conclusão é que cabe ao desenvolvedor como o bloqueio funciona para a consulta. O SSRS não pode resolver esse problema para você. É por isso que não há documentação.

Considere (por exemplo):

  • Usando READ UNCOMMITTEDse leituras sujas estão bem
  • Ativando e Utilizando um Nível de Isolamento de Instantâneo
  • Envio de log no modo de espera e execução de consultas na cópia somente leitura
Jon Seigel
fonte
2

Como você sabe que existe algum bloqueio quando o relatório está sendo executado? Eu sugiro que você verifique a consulta / processo armazenado que é a fonte do relatório e verifique se está funcionando bem por si só.

Se você tiver certeza de que a consulta de origem está funcionando bem, tente identificar o problema usando o SQL Server Profiler. O link abaixo pode ajudar:
/programming/9107383/sql-server-profiler-capture-calls-to-your-databases-stored-procs-during-ssrs

Céu
fonte
porque eu estava executando o relatório em alguns navegadores e o relatório continua recebendo erros de que há um processo bloqueado com um bloqueio morto.
Melaos 11/09/12
Nesse caso, provavelmente o seu relatório está tentando ler dados bloqueados por outro usuário (por exemplo, alguém está atualizando o mesmo registro). Você pode adicionar "sem bloqueio" a todas as instruções "Selecionar", se a leitura de dados não confirmados estiver correta.
Sky