Este tópico descreve como utilizar o recurso de análise de locks do Database Autonomy Service (DAS) para realizar análises de deadlocks em seus bancos de dados. O conteúdo abrange dois modos: análise de deadlocks recentes e análise completa de deadlocks.
Os dados apresentados nas figuras deste tópico, incluindo IDs de threads e instruções SQL, servem apenas para fins de demonstração. Ao executar as operações, utilize seus próprios dados e parâmetros reais.
Pré-requisitos
-
A instância de destino deve utilizar um dos seguintes mecanismos:
-
Análise de deadlocks recentes:
RDS MySQL
MySQL autogerenciado
PolarDB for MySQL
PolarDB-X 2.0
-
Análise completa de deadlocks:
RDS MySQL
PolarDB for MySQL
-
A instância de destino deve estar conectada ao DAS com status de conexão Normal Access. Para mais informações, consulte Conectar uma instância de banco de dados ao DAS.
-
O Alibaba Cloud Managed Services (anteriormente DAS Economy Edition) deve estar ativado.
ImportanteO Alibaba Cloud Managed Services está disponível apenas em regiões específicas. Para mais informações, consulte Bancos de dados e regiões suportados por edição.
Para ativar este serviço, consulte Gerencie o Alibaba Cloud Managed Services.
Análise de deadlocks recentes
-
Configuração de parâmetros: A instância deve ter o parâmetro
innodb_deadlock_detectativado.NotaGeralmente, esse parâmetro vem ativado por padrão. Para confirmar, execute
SHOW VARIABLES LIKE 'innodb_deadlock_detect'. Observe que não é possível alterar o valor desse parâmetro em alguns tipos de instância.-
Para modifique os parâmetros da instância:
No RDS MySQL, consulte Defina parâmetros da instância.
No PolarDB for MySQL, consulte Defina parâmetros de cluster e nó.
-
Análise de dados: Analise o log de deadlock mais recente retornado pelo comando
SHOW ENGINE INNODB STATUS.Faça login no console do DAS.
No painel de navegação à esquerda, clique em .
Localize a instância de destino e clique em ID da instância para abrir a página de detalhes.
No painel de navegação à esquerda, clique em Lock Analysis. Na página Lock Analysis, selecione a aba Recent Deadlock Analysis.
-
Clique em Create Analysis para iniciar uma análise de deadlocks recentes.
Após a conclusão da análise, a tabela de resultados na aba Recent Deadlock Analysis exibe o horário de geração, o horário de ocorrência e se foi encontrado algum deadlock. Clique em View Details para visualize informações detalhadas sobre o deadlock.
Selecione um período de tempo para visualizar os resultados das tarefas de análise acionadas nesse intervalo.
Na lista de tarefas de análise de deadlocks recentes, clique em View Details na coluna Details.
-
Um painel será exibido, mostrando os detalhes do deadlock em três abas:
View: Exibe um gráfico visual da relação de deadlock, incluindo nós para as transações e locks de registro envolvidos. Setas indicando lock granted e waiting mostram as relações de posse e espera de locks, formando um ciclo de deadlock. Transações revertidas são marcadas como "Rolled back". Clique em um nó de transação para expandir seus detalhes, como Session ID, thread ID, tipo de solicitação, transaction ID, tabela envolvida, informações do lock em espera e nome do índice associado ao lock pendente.
List: Esta aba apresenta uma comparação lado a lado das duas transações em deadlock, com as transações revertidas devidamente marcadas. As linhas da tabela incluem Session ID, thread ID, tipo de solicitação, transaction ID, tabela envolvida, lock em espera (nome do índice e tipo de lock, como X locks rec but not gap waiting), lock mantido (nome do índice e tipo de lock) e SQL da transação. Na parte inferior, é possível usar o thread ID ou transaction ID para pesquisar detalhes relacionados à transação no SQL Explorer and Audit.
Log: Mostra os detalhes brutos do log de deadlock provenientes da seção
LATEST DETECTED DEADLOCKda saída do comandoSHOW ENGINE INNODB STATUS. Isso inclui o horário em que o deadlock ocorreu, as instruções SQL das transações envolvidas, informações sobre locks mantidos (HOLDS THE LOCK) e informações sobre locks em espera (WAITING FOR THIS LOCK TO BE GRANTED).
No painel de navegação à esquerda da instância de destino, clique em SQL Explorer and Audit. Na página Audit, clique em Ative Advanced Query.
-
Selecione um intervalo de tempo que inclua o momento da ocorrência do deadlock e insira o thread ID obtido na análise de deadlocks recentes para consultar as instruções SQL executadas por essa transação.
Para a Transação 1 do exemplo, os resultados da consulta mostram que a thread executou três instruções SQL:
update students set name=UUID() where id = 2(tempo de execução: 2.938,377 ms, tempo de espera de lock: 1 ms),update students set name=UUID() where id = 3(tempo de execução: 0,002 ms) ebegin. O tempo de execução excepcionalmente longo da primeira instrução update indica uma espera de lock.Para a Transação 2 (revertida): Na página Audit, defina o Time range, configure o Thread ID como
195662e clique em Query. A lista de logs exibe o registro de execução SQL da Transação 2:update students set name=UUID() where id = 3falhou com o código de erro 1213 (deadlock) e levou 1,40 ms, com tempo de espera de lock de 1,152 ms.update students set name=UUID() where id = 2teve êxito e levou 0,20 ms.beginteve êxito e levou 0,18 ms.
-
É necessário ativar os parâmetros
innodb_deadlock_detecteinnodb_print_all_deadlocks. Para uma instância RDS MySQL, também é preciso defina o parâmetrolog_error_verbositycomo 3.NotaO parâmetro
innodb_deadlock_detectgeralmente vem ativado por padrão. ExecuteSHOW VARIABLES LIKE 'innodb_deadlock_detect'para confirme. Lembre-se de que não é possível alterar o valor desse parâmetro em certos tipos de instância.-
Para modifique os parâmetros da instância:
No RDS MySQL, consulte Defina parâmetros da instância.
No PolarDB for MySQL, consulte Defina parâmetros de cluster e nó.
-
Fonte de dados: Este recurso analisa as informações de deadlock impressas no log de erros da instância a cada hora, gerando tendências de contagem de deadlocks e compilando os detalhes de cada ocorrência.
-
Período de resfriamento: Se o Alibaba Cloud Managed Services estiver ativado e o DAS detectar que os parâmetros necessários não estão habilitados, o sistema entra em um período de resfriamento de 12 horas, sem executar tarefas de análise. Caso você ative os parâmetros exigidos durante esse intervalo, o DAS aguardará o término do período antes de reprogramar a análise. Por exemplo:
Uma tarefa de análise às 11:12 detecta que um parâmetro obrigatório não está ativado e inicia um resfriamento de 12 horas. Após as 23:12, a análise completa de deadlocks reagenda a tarefa. Se o parâmetro ainda não estiver ativado, outro período de 12 horas tem início. Se você ativar o parâmetro antes das 23:12, o resfriamento termina nesse horário. Posteriormente, a análise é executada hourly, desde que o parâmetro necessário e o Alibaba Cloud Managed Services permaneçam ativados para a instância.
Faça login no console do DAS.
No painel de navegação à esquerda, clique em .
Localize a instância de destino e clique em ID da instância para abrir a página de detalhes.
No painel de navegação à esquerda, clique em Lock Analysis. Na página Lock Analysis, selecione a aba Full Deadlock Analysis.
-
A cada hora, a análise completa de deadlocks examina automaticamente os logs de erros da instância, conta os deadlocks e plota os dados no gráfico Deadlock Trend na parte superior da página. Selecione um período para visualizar a tendência de deadlocks nesse intervalo.
A parte superior da página oferece botões de seleção rápida para Last 1 Day, Last 3 Days e Last 7 Days, além de um seletor de intervalo de datas personalizado. Clique no botão View para atualize o gráfico de tendências. Abaixo do gráfico, há uma lista de eventos de deadlock que mostra o Deadlock Time de cada um. Clique em View Details em um evento específico para obter mais informações.
Na lista de deadlocks da análise completa, clique em View Details na coluna Details.
Um painel será exibido, apresentando os detalhes do deadlock em três abas: View, List e Log. A aba Log contém o conteúdo do log de erros relacionado ao deadlock. As abas View e List são idênticas às da análise de deadlocks recentes. Para mais informações, consulte Análise de deadlocks recentes - Visualizar detalhes.
Caso tenham ocorrido múltiplos deadlocks, cada análise captura apenas o mais recente e salva seus dados.
Procedimento
Visualizar detalhes
Analisar com o SQL Explorer and Audit
Análise completa de deadlocks
Não há suporte para análise de deadlocks que contenham a mensagem "TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION".
Procedimento
Visualizar detalhes
Analisar com o SQL Explorer and Audit
O procedimento é o mesmo da análise de deadlocks recentes. Para mais informações, consulte Análise de deadlocks recentes - Analisar com o SQL Explorer and Audit.