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.