A página Deadlock no ApsaraDB RDS for SQL Server exibe detalhes como horários de início das transações, IDs de sessão, recursos bloqueados e tipos de deadlock. Essas informações ajudam a localizar e resolver rapidamente as instruções SQL problemáticas que causam deadlocks. Este tópico descreve como visualizar deadlocks e seus detalhes para uma instância do ApsaraDB RDS for SQL Server no console do ApsaraDB RDS.
Informações básicas
Quando uma transação modifica um recurso, ela aplica um bloqueio para impedir que outras transações o alterem e garantir a consistência dos dados.
Um deadlock geralmente ocorre quando várias transações competem pelos mesmos recursos. Por exemplo, a Transação A bloqueia o Recurso A e tenta modificar o Recurso B, enquanto a Transação B bloqueia o Recurso B e tenta modificar o Recurso A. Essa dependência circular causa um deadlock, pois cada transação espera que a outra libere seu bloqueio. O sistema encerra automaticamente a sessão com o menor custo de reversão (a sessão vítima) e a tarefa correspondente falha. A figura a seguir ilustra esse cenário.

Tipos de deadlock
A página Deadlock exibe estatísticas dos seguintes cinco tipos de deadlock:
KeyDeadlock
ObjectDeadlock
RIDDeadlock
PageDeadlock
CompileDeadlock
Modos de bloqueio
Ao acessar um recurso, uma transação utiliza diferentes modos de bloqueio (LockMode) conforme o tipo de acesso. Os modos incluem:
Bloqueio compartilhado (S): Permite a leitura do recurso, mas impede sua modificação enquanto o bloqueio estiver ativo.
Bloqueio de atualização (U): Impede que outras transações adquiram um bloqueio exclusivo em um recurso e sinaliza a intenção de modificá-lo. Esse bloqueio é normalmente usado para evitar deadlocks que podem ocorrer quando várias sessões tentam ler, bloquear e depois atualizar um recurso.
Bloqueio exclusivo (X): Impede que outras transações acessem o recurso.
Pré-requisitos
Este recurso não está disponível para instâncias do ApsaraDB RDS for SQL Server 2008 R2 que utilizam discos em nuvem.
Esse recurso está disponível apenas para instâncias do ApsaraDB RDS for SQL Server nas seguintes regiões: China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Hohhot), China (Ulanqab), China (Shenzhen), China (Heyuan), China (Guangzhou), China (Chengdu), China (Hong Kong), Singapura ou Emirados Árabes Unidos (Dubai).
Detalhes do deadlock
Acesse a página Instances. Na barra de navegação superior, selecione a região onde a instância RDS está localizada. Em seguida, localize a instância RDS e clique em ID da instância.
No painel de navegação à esquerda, escolha .
Página de deadlock
-
Deadlock count
Esta seção mostra o número de deadlocks recentes e apresenta estatísticas para quatro intervalos de tempo: deadlocks nas últimas 24 horas, deadlocks nos últimos 7 dias, deadlocks nas últimas duas semanas e deadlocks no último mês.
-
Deadlock trend
Esta seção apresenta um gráfico com a tendência de deadlocks em um intervalo de tempo especificado. Execute as seguintes operações:
Selecione uma Start Date e uma End Date e clique em Search para visualizar as informações de deadlock do período especificado. O intervalo de tempo não pode exceder 30 dias.
Clique em Previous Day, Last 7 Days ou Last Month para visualizar rapidamente as informações de deadlock desse período.
Passe o mouse sobre um ponto específico no tempo para ver os tipos e a quantidade de deadlocks ocorridos naquele momento.
Clique em ícone
no canto superior direito do gráfico de tendências para alterar o estilo de exibição ou baixe o gráfico.

-
Deadlock Details
Clique em ícone
ao lado de um registro de deadlock para ver os detalhes das sessões envolvidas. Os detalhes incluem:LastTranStarted: Horário de início da transação.
SPID: ID da sessão que iniciou a transação.
-
IsVictim: Indica se a sessão foi encerrada para resolver o deadlock.
NotaO SQL Server resolve deadlocks usando uma thread interna que verifica periodicamente sua ocorrência. Ao detectar um deadlock, o SQL Server encerra a sessão com menor custo de reversão entre as envolvidas. Por exemplo, como uma instrução
SELECTgeralmente tem um custo menor que uma instruçãoUPDATE, o sistema prioriza o encerramento da sessão que executa a instruçãoSELECT. LogUsed: Tamanho do log gerado pela sessão. Unidade: bytes.
LockMode: O modo de bloqueio.
WaitResourceDesc: Descrição do recurso que a transação atual aguarda.
ObjectOwned: Objeto já bloqueado.
ObjectRequested: Objeto que a transação atual solicita para bloquear.
WaitResource: Recurso que a transação atual aguarda.
HostName: Nome do host da transação atual.
LoginName: Nome da conta da transação atual.
Status: Status da transação atual.
ClientApp: Nome do aplicativo cliente usado pela transação atual.
-
SQLText: Detalhes da instrução SQL.
NotaClique em Click to Copy para copiar a instrução SQL, facilitando a solução de problemas e a análise.
Clique em qualquer linha da lista de detalhes para exibir o diagrama de deadlock correspondente abaixo.
-
Deadlock diagram
Esta seção exibe as relações entre as sessões em deadlock e fornece detalhes sobre os recursos bloqueados. Clique em botão Download para baixe um arquivo XDL contendo os detalhes do deadlock atual. Abra e visualize esse arquivo com o SQL Server Management Studio (SSMS).

Soluções e otimização de deadlocks
Como resolver deadlocks em uma instância do ApsaraDB RDS for SQL Server