Sessão suspensa com TM REQUEST e manipulador de plano 0x0000

12

Temos um evento periódico no qual muitas conexões ficam suspensas no TM REQUEST (de sys.dm_os_waiting_tasks) e não avançam. KILLno afetado session_idnão faz nada

O servidor executa o espelhamento de banco de dados (2008R2). Pausar e retomar o espelhamento corrige o problema quando isso acontece.

A sessão travada neste estado é inábil. A carga no espelho é o habitual, não estourada. Quando um alto número de conexões fica bloqueado nesse estado, o sistema congela e o espelho para de replicar (todas as consultas são bloqueadas).

Alguém já viu isso antes e sabe o que está causando isso? Não há nada nos logs de erro.

Thomas Kejser
fonte
Em que modo o espelhamento está configurado? Quais são os tipos de espera quando esse problema ocorre? Alguma chance de o SQL Server estar configurado fiber mode?
Kin Shah
O espelhamento está no modo de sincronização. Sem fibras. Nenhuma outra espera
Thomas Kejser
Como foi o resource_descriptionset?
Thomas Stringer
Percebi isso há pouco tempo (executamos assíncrono, mas o alteramos para sincronizar quando fazemos failover ou aplicação de patches etc.). O spid permanece após os DBs estarem totalmente sincronizados?
Subhash Pant
O SPID desaparece após a pausa. Mas eles são unkillable enquanto o problema está acontecendo
Thomas Kejser

Respostas:

9

TM significa Transaction Manager. O comando atual que está sendo definido como Solicitação de TM significa que o encadeamento está atendendo atualmente a uma solicitação do DTC (Distributed Transaction Coordinator), para se inscrever em uma transação do DTC, com defeito ou defeito, confirmação ou assim por diante. As transações distribuídas não são suportadas para o espelhamento de banco de dados porque ele não pode garantir a integridade da transação. Suprima suas transações DTC e isso deve desaparecer.

stacylaray
fonte
Crédito S. Ashwin, colega, Suporte Microsoft SQL
stacylaray
Como eu diagnosticaria de onde isso vem? Os logs do MSDTC no servidor estão vazios
Thomas Kejser
O DTC pode se envolver se eu tiver uma transação entre bancos de dados na mesma instância?
Thomas Kejser
@ThomasKejser - está ativado sp_configure 'Ad Hoc Distributed Queries'? - Talvez algum sistema esteja emitindo transações entre bancos de dados usando OPENQUERYinstruções ad-hoc ou algo assim?
Max Vernon
1
As transações entre bancos de dados usam o mesmo código fundamental que as transações DTC. A principal diferença é a falta do gerente de coordenação do DTC. Em vez disso, o SQL Server elege o DBID mais baixo da transação para ser o coordenador da transação.
Stacylaray
0

O Service Broker usa o gerenciador de transações do SQL Servers em vez do MS DTC (Microsoft Distributed Transaction Coordinator). A transação não é entre instâncias, mas dentro de uma instância. Você está usando o Service Broker?

stacylaray
fonte