Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Deadlock de bloqueios de intervalo no índice de chave primária


É um impasse clássico quando um processo (vítima) lê em serializable level e outro atualiza a mesma tabela clusterizada.

Você está confuso com o que é convertido em quê.

O primeiro processo ("process5e13b88") adquiriu RangeS-S lock e espera por outro RangS-S lock (onde existe X bloqueio do processo de atualização), não converte nada.

O segundo "process5e45b88" adquiriu X bloqueie em uma chave e U em outra chave e deseja convertê-la para X mas não pode porque existe RangeS-S trancar.

Anexei a imagem onde você pode ver que um processo quer e adquire apenas RangeS-S fechaduras e outro apenas X fechaduras.

Quando você vê RangeS-U lock isso significa que existe RangeS-S trava no intervalo, mas a própria chave tem U trancar