CakeFest 2024: The Official CakePHP Conference

L'extension mysqli et les connexions persistantes

L'idée derrière les connexions persistantes est que les connexions entre les clients et la base peuvent être réutilisés par un autre processus client, au lieu d'être détruits et recréés de nombreuses fois. Cela réduit le coût de création des connexions à chaque fois que l'une d'entre elle est requise, car les connexions sont mises en cache pour être recyclées.

Contrairement à l'extension MySQL, MySQLi ne fournit pas de fonction séparée pour ouvrir des connexions persistantes. Pour ouvrir une connexion persistante, vous devez ajouter p: au nom de l'hôte lors de la connexion.

Le problème des connexions persistantes est qu'elles peuvent être laissées dans un état imprévisible, par les clients. Par exemple, un verrou de table peut avoir été posé avant que le client ne se déconnecte inopinément. Un nouveau client va alors prendre la connexion, mais tel quel. Il faudrait alors que le nouveau venu effectue un nettoyage en profondeur de la connexion avant de pouvoir la réutiliser sans parasitage, ce qui est un inconvénient pour le programmeur.

La connexion persistante de l'extension mysqli fournit une méthode de nettoyage automatique. Le nettoyage est effectué par mysqli et inclut :

  • L'annulation des transactions actives.

  • La fermeture et destruction des tables temporaires.

  • Le déverrouillage des tables

  • La remise à la valeur par défaut les variables de sessions

  • La libération des commandes préparées (cela arrive toujours avec PHP)

  • La fermeture du gestionnaire

  • La libération des verrous posés par GET_LOCK()

Cela assure que la connexion persistante est dans une condition correcte avant d'être remise dans le groupe de connexion, et qu'un client différent la reprenne.

L'extension mysqli effectue ce nettoyage e appelant automatiquement la fonction C mysql_change_user().

Le nettoyage automatique a ses avantages et ses inconvénients. L'avantage est que le programmeurs n'a pas besoin de s'en inquiéter, car il est appelé automatiquement. Cependant, l'inconvénient est que ce code peut éventuellement être un peu plus lent, car il doit être appelé à chaque fois que la connexion est retournée dans le groupe d'attente.

Il est possible de désactiver le nettoyage du code, en compilant PHP avec l'option MYSQLI_NO_CHANGE_USER_ON_PCONNECT.

Note:

L'extension mysqli supporte les connexions persistantes avec le MySQL Native Driver et avec la bibliothèque MySQL.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top