As consultas remotas podem causar bloqueios?

1

Temos um servidor SQL Server 2005 (SERVER-A) que mantém o banco de dados de um aplicativo que tem bloqueado muito ultimamente. Suspeitamos que o problema são os bloqueios de transação, então decidimos capturar alguns rastreamentos nesse servidor usando o SQL Server Profiler, começamos a capturar o relatório de processo bloqueado e obtivemos isso:

<blocked-process-report monitorLoop="3501256">
 <blocked-process>
  <process id="processffffffff83047a68" taskpriority="0" 
    logused="0" waitresource="OBJECT: 18:85575343:0 " waittime="27656" 
    ownerId="1540544048" transactionname="InsertCall" 
    lasttranstarted="2013-11-25T14:40:43.083" XDES="0x3790fad8" 
    lockMode="IX" schedulerid="2" kpid="6852" status="suspended" 
    spid="78" sbid="0" ecid="0" priority="0" transcount="2" 
    lastbatchstarted="2013-11-25T14:40:43.083" lastbatchcompleted="2013-11-25T14:40:43.073" 
    clientapp="" hostname="" hostpid="3256" loginname="" 
    isolationlevel="read committed (2)" xactid="1540544048" currentdb="18" 
    lockTimeout="4294967295" clientoption1="673185824" clientoption2="128056">
   <executionStack>
    <frame line="201" stmtstart="10790" stmtend="11790" sqlhandle=""/>
    <frame line="1" sqlhandle=""/>
   </executionStack>
   <inputbuf>EXEC SomeProcedure</inputbuf>
  </process>
 </blocked-process>
 <blocking-process>
  <process status="suspended" waittime="15" spid="51" sbid="2" ecid="0" priority="0" 
  transcount="1" lastbatchstarted="2013-11-25T14:40:20.900" 
  lastbatchcompleted="2013-11-25T14:40:20.900" lastattention="2013-11-25T14:39:18.530" 
  clientapp="Microsoft SQL Server" hostname="SERVER-B" hostpid="1340" loginname="" 
  isolationlevel="read committed (2)" xactid="1540536548" currentdb="7" 
  lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
   <executionStack>
    <frame line="1" sqlhandle=""/>
    <frame line="1" sqlhandle=""/>
   </executionStack>
   <inputbuf>INCOMING SELECT FROM SERVER-B</inputbuf>
  </process>
 </blocking-process>
</blocked-process-report>

No SERVER-B existe outro SQL Server 2008 que tem o SERVER-A como servidor vinculado e só executa SELECTs remotos. Então eu não entendo a captura anterior, pode uma causa remota selecionar bloqueios? E se sim, como podemos evitar isso?

    
por jesusbolivar 26.11.2013 / 17:29

2 respostas

3

Se SERVER-A tiver sido especificado como "servidor vinculado", as consultas às tabelas referentes aos dados vinculados serão transmitidas para SERVER-A , como se tivessem sido executadas diretamente com SERVER-A . Como tal, eles obviamente poderiam causar bloqueios.

No seu caso, com um nível de isolamento de transação READ COMMITTED, a consulta SELECT manterá os bloqueios de leitura das linhas afetadas (que podem ser a tabela inteira) durante toda a execução da consulta, impedindo efetivamente a execução de atualizações nessas linhas bem como instruções que requerem um bloqueio para a tabela inteira (como instruções DML).

Note que a afirmação parece estar em andamento por um tempo (pelo menos um minuto). Se você tiver essas seleções de longa duração bloqueando suas atualizações, considere executá-las usando um nível de isolamento de transação de SNAPSHOT ou READ UNCOMMITTED , dependendo de seus requisitos de desempenho e consistência de dados. Consulte os documentos sobre níveis de isolamento de transação para obter detalhes.

    
por 28.11.2013 / 21:49
1

Do meu entendimento limitado deste tópico, com um nível de isolamento "read committed" (como visto em seu relatório de bloco), uma instrução SELECT adquirirá um bloqueio compartilhado na linha atual para evitar atualizações nos dados durante a leitura .

Isso impede efetivamente que a transação INSERT obtenha um bloqueio exclusivo na linha mencionada, portanto, sim, dependendo de suas estruturas de dados e opções de nível de bloqueio de índice , uma cláusula SELECT pode certamente causar um bloqueio.

Não sou super DBA SQL, mas muitas pessoas mais sensatas do que eu escreveram sobre o bloqueio de bloqueios usando cobertura de índice não agrupada. Eu encontrei este artigo em particular educando

    
por 28.11.2013 / 21:46