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

Transações paralelas no mysql


Tudo depende do ISOLATION LEVEL você definiu.

Você pode ver qual você definiu com esta consulta:
select @@global.tx_isolation, @@session.tx_isolation;

Antes de explicar os diferentes níveis de isolamento, deixe-me explicar quais problemas eles estão tentando evitar:

  • A leitura suja :Os dados de uma transação ainda não finalizada são lidos por outra transação.

  • A atualização perdida :Duas transações modificam uma entrada em uma tabela em paralelo. Quando ambas as transações forem concluídas, apenas uma modificação será aplicada.

  • A leitura não repetível :leituras recorrentes levam a resultados diferentes.

  • A leitura fantasma :Durante uma transação, outra transação adiciona ou remove entradas de tabela.

Agora para os diferentes níveis de isolamento.

Ler não confirmado :
Com este nível de isolamento, as operações de leitura ignoram qualquer tipo de bloqueio, portanto, qualquer um dos problemas mencionados acima pode ocorrer.

Ler confirmado :
Este nível de isolamento define um bloqueio de gravação para toda a transação em objetos que devem ser modificados. Os bloqueios de leitura são definidos apenas durante a leitura de dados. Portanto, leitura não repetível e leitura fantasma podem ocorrer.

Leitura repetível :
Com este nível de isolamento é garantido que as operações de leitura recorrentes sempre produzem o mesmo resultado quando os parâmetros são os mesmos. Os bloqueios são definidos para operações de leitura e gravação durante a duração total da transação. Portanto, somente leituras fantasmas podem ocorrer.

Serializável :
O mais alto nível de isolamento garante que o resultado das transações paralelas seja o mesmo que se as transações estivessem sendo executadas uma após a outra. A maioria dos bancos de dados realmente não executa essas transações uma após a outra, seria uma perda de desempenho muito grande. Portanto, pode acontecer que uma transação seja abortada. O MySQL, por exemplo, realiza isso com o MVCC (Multi-Version Concurrency Control). Google-lo, se você quiser saber mais. É demais para esta resposta.

Em suma, esta tabela explica também:
                 | Lost updates | Dirty Read | Non-Repeatable Read | Phantom Read
---------------------------------------------------------------------------------
Read Uncommitted | possible     | possible   | possible            | possible
Read Committed   | impossible   | impossible | possible            | possible
Repeatable Read  | impossible   | impossible | impossible          | possible
Serializable     | impossible   | impossible | impossible          | impossible
  • Nesta entrada manual é mais algumas informações sobre isso e como definir o nível de isolamento.

Tudo isso é apenas teoria para sistemas de gerenciamento de banco de dados relacional. Como o MySQL usa MVCC (controle de simultaneidade de várias versões), no entanto, leituras fantasmas não ocorrem ao usar InnoDB e nível de isolamento de leitura repetível .
Do manual :