web-dev-qa-db-fra.com

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

Intensité du processeur ouvrant et fermant 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?
15
ThinkingMonkey

Pensez à la quantité de mémoire allouée par connexion DB. Quelles choses doivent être allouées? Selon ( Guide d'étude de certification MySQL 5.0, 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 ne pas utiliser mysql_pconnect as 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 RAM et inhibition possible en raison de l'échange dans le système d'exploitation. Sur un site Web à faible écriture et à faible lecture) , Je ne m'inquiéterais pas autant.

12
RolandoMySQLDBA

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 certaine interaction avec la base de données, vous allez être loin mieux vaut réutiliser la même connexion active que d'ouvrir et de fermer dans la boucle (un motif que je vois assez souvent).

10
Aaron Bertrand

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éé lorsqu'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.

4
Dude

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 .

2
greenlitmysql