J'utilise Asp.Net avec MySQL. Dans la chaîne de connexion .Net, j'ai défini la taille maximale du pool sur 150.
Si j'exécute ce qui suit, j'obtiens ces valeurs:
SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474
Ce qui donne Threads_created / Connections = 0,1392.
Donc, à partir de cela, il semble que je doive augmenter thread_cache_size
.
Mais si je cours, SHOW PROCESSLIST
je vois toujours que j'ai beaucoup de connexions ouvertes (la plupart d'entre elles dorment) à cause du pool créé par .Net. Dois-je encore définir le thread_cache_size
car je vais toujours réutiliser les connexions du pool de connexions? Si la taille de la piscine est de 150, pensez-vous qu'une bonne valeur serait de mettre thread_cache_size
150+? Cela affecterait-il beaucoup le processeur et la mémoire?
la source
Selon les documents MySQL, vous devez définir de
thread_cache_size
sorte que la plupart des nouvelles connexions utilisent des threads du cache plutôt que des threads nouvellement créés. Cela permet d'économiser certains frais généraux de création de threads, bien que cela ne crée normalement pas d'amélioration significative des performances:Cela signifierait que vous devez définir votre
thread_cache_size
afin queThreads_created / Connections
(le% de connexions qui conduisent à la création de nouveaux threads) soit plutôt faible. Si vous prenez les documents MySQL littéralement ("la plupart"), la valeur doit être <50%. La réponse de RolandoMySQLDBA indique <1%. Je ne sais pas qui est le plus proche de la vérité.Vous ne devez pas définir
thread_cache_size
plus haut queMax_used_connections
. La dernière phrase de la réponse de RolandoMySQLDBA ("À tout le moins, thread_cache_size devrait être supérieure à Max_used_connections") ne semble pas sensée car elle dit que vous devez conserver plus de threads dans le cache que votre serveur n'en utilise jamais . MySQL ne mettra jamais autant de threads dans le cache de toute façon - il ne place pas de manière préventive les threads dans le cache - il ne les y place qu'après qu'un client a créé un thread et se déconnecte. Si vous n'avez jamais X clients connectés en même temps, vous n'aurez jamais X threads dans le cache:Voir aussi cette réponse de Michael:
/dba//a/28701
la source
Dans la journée de travail commune, une «nouvelle embauche» aurait-elle besoin d'une connexion? La plupart des magiciens ne sauront pas combien de personnes pourraient être embauchées dans les prochains jours. La version 8 de MySQL suggère CAP thread_cache_size à 100 pour éviter la surcharge indépendamment de max_used_connections. Pour moi, 100 est une bonne PAC.
Voir ce lien, s'il vous plaît.
la source