Como simular deadlock com mais de 2 processos no ambiente de teste do SQL Server? Alguém pode me ajudar com o código? Só para esclarecer minha dúvida novamente, não quero simulação de deadlock com apenas 2 processos. Eu sei produzir deadlock com 2 processos, mas não consigo produzi-lo com mais de dois processos.
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Se você sabe simular com 2, sabe simular com 3, ou com N. Você tem que construir um grafo cíclico :
Para construir a primitiva P x ->P y (Processo X espera no Processo Y) use seu mecanismo de bloqueio favorito. Por exemplo, bloqueio de linha em uma chave específica P 1 ->P 2 ->P 3 ->P 1 :
1) P 1 , da sessão 1:
2) P 2 , da sessão 2:
3) Faça P 1 esperar em P 2 . Da sessão 1:
4) Continue com P 3 , sessão 3:
5) Adicione a espera P 2 ->P 3 , na sessão 2:
6) Para completar o ciclo, adicione a espera P 3 ->P 1 , na sessão 3:
Como o grafo de espera criou um ciclo, os 3 processos agora estão em impasse. Em pouco tempo, o mecanismo de detecção de deadlock do mecanismo (que percorre periodicamente os gráficos de espera procurando por ciclos) detecta esse ciclo e o interrompe, escolhendo uma vítima e abortando sua transação, gerando o erro 1205 na sessão da vítima.
Para estender para N nós, repita as etapas 4) e 5) conforme necessário.