Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que o commit não causa deadlock


Eu suspeito que este é um caso extremo que não vale a pena tornar mais eficiente. Observe que você teve que fazer 3 sessões tentando pegar a mesma linha - um acontecimento raro. E você fez um ROLLBACK -- também raro. Portanto, o impasse que ocorreu é um exagero, mas não vale a pena consertar. Por esta razão, deve-se estar preparado para lidar com impasses em todos os lugares.

Para sua informação, se fossem 3 nós de um cluster Galera, haveria erros em COMMIT que o código teria que lidar. Suspeito que haja ainda mais combinações de coisas estranhas acontecendo se você aplicar essa transação (com reversão ou confirmação) várias vezes a vários nós.

Agora a sua pergunta... Presumivelmente, o deadlock não aconteceu porque uma das threads obteve o bloqueio exclusivo e a outra foi atingida com um "wait" em vez de um "deadlock".