2009-10-09 6 views
2

Je pensais, pourquoi Apache commence une nouvelle connexion au serveur MySQL pour chaque demande de page? Pourquoi ne garde-t-il pas toujours une connexion ouverte à tout moment et envoie-t-elle toutes les requêtes sql par le biais de cette connexion (évidemment avec l'identifiant du client attaché à chaque req)?Apache -> connexions multiples MySQL vs une connexion

Il réduit le temps de transfert de la poignée de main, et quelques autres avantages que je vois. C'est comme brancher un ordinateur à chaque fois que vous voulez l'utiliser. Pourquoi aller à la sortie chaque fois que vous pouvez le laisser branché? Parce que c'est l'objectif du module mod_dbd.

Répondre

2

la raison en est: c'est plus simple.

Pour réutiliser les connexions, vous devez inventer et implémenter la mise en commun des connexions. ceci ajoute une autre couche de code qui doit être développée, maintenue, etc.

plus les connexions groupées invitent à une toute autre classe de bugs que vous devez surveiller tout en développant votre application. Par exemple, si vous définissez une variable utilisateur mais que l'utilisateur suivant de cette connexion descend un chemin de code qui se branche sur la base de l'existence de cette variable ou non, alors cet utilisateur exécute le mauvais code. D'autres problèmes incluent: les tables temporaires, les blocages de transaction, les variables de session, etc. tous ces problèmes deviennent très difficiles à dupliquer car ils dépendent des actions ultérieures de deux utilisateurs différents qui semblent n'avoir aucun lien entre eux. En outre, le surcoût de connexion sur une connexion mysql est minuscule. D'après mon expérience, le regroupement de connexions augmente considérablement le nombre d'utilisateurs qu'un serveur peut supporter.

1

2

MySQL ne prend pas en charge plusieurs sessions sur une même connexion.

Oracle, par exemple, permet cela, et vous pouvez configurer Apache à mutliplex plusieurs sessions logiques sur une seule connexion TCP.

Il s'agit d'une limitation de MySQL, et non de Apache ou de langages de script.

Il existe des modules qui peuvent faire la mise en commun de la session:

  • PreCreate un certain nombre de connexions
  • Choisissez un lien gratuit sur demande
  • Créer des connexions supplémentaires si pas de connexion gratuite est disponible.
Questions connexes