L'idĂ©e derriĂšre les connexions persistantes est que les connexions entre les clients et la base peuvent ĂȘtre rĂ©utilisĂ©es par un autre processus client, au lieu d'ĂȘtre dĂ©truites et recréées de nombreuses fois. Cela rĂ©duit le coĂ»t de crĂ©ation des connexions Ă chaque fois que l'une d'entre elles 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, il faut 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 des variables de session
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 en
appelant automatiquement la fonction C mysql_change_user().
Le nettoyage automatique a ses avantages et ses inconvĂ©nients. L'avantage est que le programmeur 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
mysqlisupporte les connexions persistantes avec le MySQL Native Driver et avec la bibliothĂšque MySQL.