Sélection de données sans verrouillage dans MySQL
Lors de l'interrogation d'une table qui est activement modifiée par des événements, il est possible de rencontrer des verrous de table, qui peuvent performances d’impact. Existe-t-il un moyen d'effectuer une instruction select dans MySQL qui ne provoque pas de tels verrous ?
Solution pour les bases de données esclaves
La solution mentionnée dans l'article intitulé "MYSQL AVEC NOLOCK" n'est pas applicable dans ce cas car il s'agit d'une base de données esclave. De plus, définir le niveau d'isolement des transactions sur READ-UNCOMMITTED entraînera une erreur sur une base de données esclave configurée pour la journalisation binaire basée sur STATEMENT.
Méthodologie spécifique à MySQL
Pour éviter le verrouillage lors de la sélection de données sur une base de données esclave MySQL, vous pouvez utiliser l'approche suivante :
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; COMMIT;
Cette méthode définit temporairement l'isolation des transactions niveau à READ UNCOMMITTED, ce qui permet à l'instruction select de se poursuivre sans obtenir de verrous. Cependant, il est important de se rappeler que ce paramètre ne peut être utilisé que dans une transaction suivie d'une instruction COMMIT.
Suggestion d'amélioration
Comme alternative, vous pouvez envisager d'utiliser la syntaxe suivante suggérée par Michael Mior :
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; COMMIT;
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!