Quel est le coût d'ouverture et de fermeture d'une connexion DB?

15

Comment le processeur utilise-t-il l'ouverture et la fermeture d'une connexion DB (pour une application Web) dans MySQL

  • ... lorsque le logiciel DB est sur localhost?
  • ... lorsque le logiciel DB se trouve sur une autre machine?
ThinkingMonkey
la source

Réponses:

12

Pensez à la quantité de mémoire allouée par connexion DB. Quelles choses doivent être allouées? Selon MySQL 5.0 Certification Study Guide, page 357 :

Le serveur conserve plusieurs tampons pour chaque connexion client. L'un est utilisé comme tampon de communication pour l'échange d'informations avec le client. D'autres tampons sont conservés par client pour lire les tables et effectuer des opérations de jointure et de tri.

Quels paramètres régissent les tampons par connexion?

Il faut du temps pour allouer et désallouer ces tampons lorsqu'une connexion est établie. N'oubliez pas de multiplier la somme de ces valeurs par max_connections . En guise de remarque, veuillez vous abstenir d'utiliser mysql_pconnect car PHP et les connexions persistantes de MySQL ne s'entendent pas bien. Voici deux liens informatifs sur ce sujet:

Dans un environnement à lecture et écriture intensives, comme OLTP, cela coûterait cher en termes d'utilisation de la RAM et d'inhibition possible en raison de l'échange dans le système d'exploitation. Sur un site à faible écriture et à faible lecture, je ne m'inquiéterais pas autant.

RolandoMySQLDBA
la source
10

Je ne suis pas sûr que cela compte "combien plus cher". C'est certainement plus coûteux que de réutiliser la même connexion. Ce que vous observerez dépendra de l'utilisation correcte du pool de connexions, de la saturation de votre pool, des ressources disponibles sur la box, etc.

En général, si vous effectuez une boucle pour faire une interaction avec la base de données, vous allez être bien mieux de réutiliser la même connexion active que d'ouvrir et de fermer dans la boucle (un anti-modèle que je vois assez souvent) .

Aaron Bertrand
la source
4

Le dilemme entre réutiliser un objet et le démolir et le reconstruire (qui ont tous deux des avantages et des inconvénients) peut souvent être résolu avec un compromis: mettre en cache l'objet, mais pour une durée limitée (c'est-à-dire avec expiration). Si l'objet est fréquemment utilisé, il continue d'être réutilisé. Mais s'il n'est pas utilisé pendant un certain temps, un mécanisme d'expiration en dispose, le forçant à être recréé quand il est à nouveau nécessaire.

Un système peut avoir un hook global pour ces types de caches qui est invoqué lorsque la mémoire est faible, ce qui les déclenche tous pour supprimer des objets récemment inutilisés.

Mec
la source
2

Mysql met en cache les connexions (ou threads) à l'aide du Thread Cache (thread_cache_size). La valeur maximale est 100. Lorsque le client ferme la connexion, elle est renvoyée dans le cache. Lorsqu'une nouvelle connexion s'ouvre, il vérifie le cache de threads. Sur un système très occupé, l'ouverture de la fermeture de la connexion peut coûter cher, surtout si vous avez des requêtes de longue durée.

https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Si vous pouvez vous permettre Mysql Enterprise, vous pouvez utiliser le plug-in Thread Pool implémenté dans Mysql 5.6.

greenlitmysql
la source