Detecção de Deadlock e Rollback


O InnoDB detecta automaticamente o deadlock de transações e faz um roll back da(s) transação(ões) para prevenir o deadlockck. A partir da versão 4.0.5, o InnoDB tentará escolher pequenas transações para se fazer roll back. O tamanho de uma transação é determinado pelo número de linhas que foram inseridas, atualizadas ou deletadas. Antes da versão 4.0.5, InnoDB sempre fazia roll back da transação cujo pedido de bloqueio fosse o último a criar o deadlock, isto é, um ciclo no grafo de espera da transação.

O InnoDB não pode detectar deadlocks onde uma trava atribuida por uma instrução MariaDB LOCK TABLES está envolvida ou se uma trava definida em outro mecanismo de banco de dados diferente de InnoDB está envolvida. Você tem que resolver estas situações usando innodb_lock_wait_timeout configurado em my.cnf.

Quando o InnoDB realiza um rollback completo de uma transação, todos as travas da transação são liberadas. No entanto, se é feito o rollback de apenas uma única instrução SQL como um resultado de um erro, algumas das travass definidas pela instrução podem ser preservadas. Isto ocorre porque o InnoDB armazena as travas de registro em um formato onde ele não pode saber qual trava foi definida por qual instrução SQL.

Retornar