2009-02-04 6 views
4

Sur un site récemment lancé, j'ai remarqué que, bien au-delà des requêtes lourdes sur le site, la requête la plus coûteuse, sur plusieurs millions de requêtes, est en fait SET Les NOMS, qui cadencent plus de 2,3 secondes en moyenne, tandis que les requêtes multi-joint syndicales sont bien inférieures à 2 secondes. À la fin, cela le place près du sommet du journal de requête lente, et je ne peux pas trouver un moyen de l'optimiser.MySQL "SET NAMES" près du sommet du journal de requête lente

Cela ne semble pas être un problème commun, car je n'ai trouvé aucune référence à googling.

Depuis SET NAMES est sur le classement, voici les informations connexes:

  • Le MySQL charset UTF-8 Unicode (UTF8)
  • La collation de connexion de base de données est utf8_unicode_ci
  • la base de données et tous ses tables utilisent utf8_general_ci

FWIW, cela fonctionne MySQL 5.0.45-log. Le serveur de base de données est localhost.

Répondre

6

Si toutes les requêtes sont lentes, SET NAMES peut avoir une priorité très faible sur le serveur, et donc attendre que le chargement s'éteigne. Si vous avez beaucoup d'autres requêtes qui prennent beaucoup de temps à s'exécuter, vous pouvez essayer d'optimiser celles-ci en premier.

Une autre solution à ce « problème », pourrait être d'ajouter ceci à votre my.cnf sur le serveur:

[mysqld] 
init-connect = 'SET NAMES utf8' 

Cela fait que le jeu de caractères est défini sur UTF-8 quand un client se connecte, donc le client n'a pas à attendre le résultat de cette "requête". Vous voulez probablement désactiver la requête SET NAMES dans votre logiciel. Principalement, je ne m'inquiéterais pas trop à moins que vous ayez vraiment BEAUCOUP de NOMS de SET qui prend si longtemps.

+0

Merci pour la suggestion. Il n'y a pas beaucoup de requêtes lentes, c'est pourquoi les noms des sets sont parmi les plus longs en nombre * durée: ils mangent plusieurs minutes par jour, contrairement aux requêtes lourdes réelles. Je vais essayer votre suggestion pour quelques jours; Je n'avais pas pensé à utiliser my.cnf de cette façon. – FGM