Estamos vendo muitos desses deadlocks de threads paralelos intra-consulta em nosso ambiente de produção (SQL Server 2012 SP2 - sim... eu sei...), no entanto, ao analisar o XML de deadlock que foi capturado por meio de eventos estendidos, a lista de vítimas está vazia.
<victim-list />
O deadlock parece estar entre 4 threads, dois com o WaitType="e_waitPipeNewRow"
e dois com o WaitType="e_waitPipeGetRow"
.
<resource-list>
<exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19">
<owner-list>
<owner id="process4649868" />
</owner-list>
<waiter-list>
<waiter id="process40eb498" />
</waiter-list>
</exchangeEvent>
<exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21">
<owner-list>
<owner id="process368ecf8" />
</owner-list>
<waiter-list>
<waiter id="process46a0cf8" />
</waiter-list>
</exchangeEvent>
<exchangeEvent id="Pipe13904cb4e0" WaitType="e_waitPipeGetRow" nodeId="19">
<owner-list>
<owner id="process40eb498" />
</owner-list>
<waiter-list>
<waiter id="process368ecf8" />
</waiter-list>
</exchangeEvent>
<exchangeEvent id="Pipe4a106e060" WaitType="e_waitPipeGetRow" nodeId="21">
<owner-list>
<owner id="process46a0cf8" />
</owner-list>
<waiter-list>
<waiter id="process4649868" />
</waiter-list>
</exchangeEvent>
</resource-list>
Então:
- A Lista de Vítimas está vazia
- O aplicativo que executa a consulta não apresenta erro e conclui a consulta
- Até onde podemos ver, não há nenhum problema óbvio, exceto que o gráfico é capturado
Portanto, isso é algo para se preocupar além do ruído?
Editar: Graças à resposta de Paul, posso ver onde o problema provavelmente ocorre e parece se resolver com o vazamento de tempdb.