Dans le développement Web, en particulier lors de l'utilisation de PHP pour les opérations de base de données MySQL, la fonction MySQL_CLOSE () est utilisée pour fermer la connexion de la base de données. Bien que la fermeture de la connexion puisse libérer des ressources, un appel fréquent à mysql_close () , en particulier dans des scénarios de concurrence élevés avec de grandes quantités de demandes en peu de temps, apportera des frais généraux de performance inutiles, ce qui entraîne une création fréquente et une destruction de connexions de base de données, affectant la vitesse de réponse du système.
Pour résoudre ce problème, le mécanisme de pool de connexion est devenu une méthode d'optimisation courante. Cet article présentera comment réduire les appels fréquents de mysql_close () grâce à la mise en commun des connexions dans les applications Web PHP pour améliorer les performances et la stabilité du système.
Chaque fois qu'une connexion de base de données est établie, elle implique des frais généraux tels que la communication réseau, l'authentification de l'identité, l'allocation des ressources, etc. Après la fermeture de la connexion, une nouvelle connexion est établie la prochaine fois que vous le demanderez, en perdant beaucoup de temps et de ressources. Un grand nombre de demandes en peu de temps entraîneront:
Les connexions sont créées et fermées fréquemment, augmentant le CPU et la charge de mémoire.
Le serveur de base de données est soumis à une pression supplémentaire et peut subir une déplétion de pool de connexion.
A un impact sur l'expérience utilisateur et ralentit la réponse.
Par conséquent, il est crucial de réduire les appels mysql_close () et les connexions de base de données de réutilisation rationnelles.
Un pool de connexions est un conteneur qui établit un certain nombre de connexions de base de données à l'avance, et ces connexions peuvent être réutilisées. L'application obtient la connexion à partir du pool de connexion et ne la ferme pas après utilisation, mais renvoie la connexion au pool de connexion pour la prochaine demande à réutiliser.
Avantages de la mise en commun des connexions:
Réduisez le nombre d'établissements de connexion et de clôture.
Réduisez la charge du serveur de base de données.
Améliorez la vitesse de réponse et les capacités de traitement simultanées.
Les demandes Web typiques dans PHP elle-même sont un "cycle de vie court", et toutes les ressources sont publiées après chaque demande, y compris les connexions de base de données. Cela entre naturellement entre en conflit avec le mécanisme de mise en commun des connexions. Les solutions comprennent:
Connexion persistante : PHP fournit la fonction mysql_pconnect () pour créer une connexion persistante et évite l'établissement et la fermeture de connexions chaque fois que vous demandez.
Utilisez des middleware ou des extensions : tels que l'APD combinée avec la mise en commun des connexions au middleware ou l'utilisation de Swoole , Workerman et d'autres frameworks de connexion longs.
La couche d'application simule le regroupement des connexions : gérer les connexions avec le cache ou la mémoire partagée.
Ce qui suit se concentre sur l'utilisation de mysql_pconnect () pour implémenter des connexions persistantes simples et réduire les appels mysql_close () .
<?php
// Connectez-vous à la base de données,En utilisant une connexion persistante
$link = mysql_pconnect('m66.net', 'username', 'password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
// Sélectionnez une base de données
mysql_select_db('database_name', $link);
// Exécuter une requête
$result = mysql_query('SELECT * FROM table_name', $link);
while ($row = mysql_fetch_assoc($result)) {
echo $row['column_name'] . '<br>';
}
// Avis:La connexion persistante ne nécessite pas d'appel mysql_close()
// mysql_close($link); // Cette fonction n'est pas appelée,La connexion sera réutilisée
?>
Dans le code ci-dessus, mysql_pconnect () crée une connexion persistante qui n'est pas fermée à la fin du script, mais qui est réutilisée par la gestion de PHP. Cela évite les appels fréquents vers mysql_close () et rétablit les connexions.
Libération des ressources : Bien que les connexions persistantes améliorent les performances, elles peuvent entraîner longtemps les connexions à occuper les ressources de la base de données. Vous devez raisonnablement définir le nombre maximum de connexions de base de données.
Compatibilité : la fonction MySQL_ * est obsolète, il est recommandé d'utiliser MySQLI ou PDO , qui prennent également en charge les connexions persistantes.
Poolage de connexions plus avancé : pour les projets avec des exigences de concurrence élevées, il est recommandé d'utiliser des middleware ou des frameworks de serveur qui prennent en charge la mise en commun de la connexion, comme Swoole , pour coopérer avec l'OPD pour obtenir une gestion des connexions plus flexible.
Exemple: connexion persistante à l'aide de l'APD
<?php
$dsn = 'mysql:host=m66.net;dbname=database_name;charset=utf8';
$options = [
PDO::ATTR_PERSISTENT => true, // Activer la connexion persistante
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, 'username', 'password', $options);
$stmt = $pdo->query('SELECT * FROM table_name');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['column_name'] . '<br>';
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Grâce au mécanisme de mise en commun des connexions, en particulier la technologie de connexion persistante, les applications Web PHP peuvent réduire considérablement les appels fréquents vers mysql_close () , améliorer la réutilisation de la connexion de la base de données, réduire les frais généraux du système, améliorer les performances et les capacités de traitement simultanées.
Bien que MySQL_PConnect () soit un moyen simple d'implémenter des connexions persistantes, dans les projets réels, il est recommandé d'utiliser des extensions modernes telles que MySQLI et PDO , combinées avec des middleware ou des frameworks côté serveur pour atteindre une gestion plus complète du pool de connexions.