Mysql
 sql >> Base de données >  >> RDS >> Mysql

Empêcher la lecture lors de la mise à jour de la table

En supposant que vous utilisez un moteur transactionnel (généralement Innodb), effacez et remplissez la table dans la même transaction.

Assurez-vous que vos lecteurs utilisent READ_COMMITTED ou un niveau d'isolation de transaction supérieur (la valeur par défaut est REPEATABLE READ qui est supérieure).

De cette façon, les lecteurs pourront continuer à lire l'ancien contenu du tableau pendant la mise à jour.

Il y a quelques points à respecter :

  • Si la table est si grande qu'elle épuise la zone de restauration - cela est possible si vous mettez à jour l'intégralité (disons) d'une table de 1 million de lignes. Bien sûr, cela est réglable mais il y a des limites
  • Si la transaction échoue en cours de route et est annulée, l'annulation de grosses transactions est TRÈS inefficace dans InnoDB (elle est optimisée pour les validations, pas les annulations)
  • Faites attention aux interblocages et aux délais d'attente de verrouillage, qui sont plus probables si vous utilisez de grosses transactions.