Éviter les verrous avec les requêtes MySQL
Dans MySQL, certaines requêtes peuvent provoquer un verrouillage, entraînant des problèmes de performances, en particulier lorsque la table interrogée est fréquemment modifié. Pour résoudre ce problème, la question se pose : existe-t-il un moyen d'exécuter une instruction select sans induire de verrous ?
La requête d'origine en question :
SELECT COUNT(online.account_id) cnt from online;
verrouille la table en raison de l'événement parallèle modifier également le tableau. La question explore les alternatives possibles.
Une solution potentielle mentionnée dans les réponses consiste à définir le niveau d'isolement des transactions sur READ-UNCOMMITTED. Cependant, cette approche n'est pas idéale pour les bases de données esclaves car elle est incompatible avec la journalisation binaire en mode STATEMENT.
Une approche alternative compatible avec les bases de données esclaves consiste à utiliser la syntaxe suivante :
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; SELECT * FROM TABLE_NAME ; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
Cette méthode désactive efficacement les verrous pendant la durée de l'instruction select. Cependant, il est important de noter que cela peut conduire à des résultats non déterministes.
Une autre suggestion consiste à utiliser la syntaxe suivante :
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; SELECT * FROM TABLE_NAME ; COMMIT ;
Cette option désactive également les verrous pendant la durée de la select et garantit que les modifications apportées pendant la période d'isolement sont validées immédiatement. Il convient de noter que cette approche peut avoir des implications en termes de performances par rapport à la méthode précédente. De plus, il n'est pas nécessaire de redéfinir explicitement le niveau d'isolement sur REPEATABLE READ car il sera automatiquement réinitialisé lors de la validation.
En employant ces approches, il est possible d'éviter les verrous lors de l'exécution de requêtes de sélection dans MySQL, potentiellement améliorer les performances et réduire les conflits. Cependant, il est crucial de prendre en compte les compromis potentiels et les implications en termes d'exactitude et de cohérence des données lors du choix de la méthode appropriée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!