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

Impedir leitura ao atualizar a tabela


Supondo que você use um mecanismo transacional (geralmente Innodb), limpe e preencha novamente a tabela na mesma transação.

Certifique-se de que seus leitores usem READ_COMMITTED ou nível de isolamento de transação mais alto (o padrão é REPEATABLE READ, que é mais alto).

Dessa forma, os leitores continuarão a poder ler o conteúdo antigo da tabela durante a atualização.

Existem alguns cuidados com os quais devemos ter cuidado:
  • Se a tabela for tão grande que esgota a área de rollback - isso é possível se você atualizar toda (digamos) uma tabela de 1 milhão de linhas. Claro que isso é ajustável, mas há limites
  • Se a transação falhar no meio do caminho e for revertida - reverter grandes transações é MUITO ineficiente no InnoDB (ele é otimizado para commits, não rollbacks)
  • Tenha cuidado com impasses e tempos limite de espera de bloqueio, que são mais prováveis ​​se você usar grandes transações.