2009-02-20 4 views
0

Notre serveur MySQL se comporte étrangement - faire une requête lourde sur une table le verrouillera à peu près, aucune autre requête ne sera traitée, même si elle est triviale sur une table complètement indépendante (comme SELECT par clé primaire , INSERT, ou même EXPLAIN) - il faudra juste attendre que le lourd finisse.

Je suis vraiment à court d'idées ce qui pourrait causer cela - il ya beaucoup de threads libres, CPU est en attente/état d'attente, le réseau est libre, il y a beaucoup de mémoire ...

Quelqu'un a des idées quoi chercher?Général mysql freeze

+0

1. Que signifie «à peu près» le verrouillage? :) D'autres requêtes _sometime_ sont-elles servies? 2. Cette requête lourde - utilise-t-elle beaucoup de jointures? pouvez-vous en dire un peu plus à ce sujet? –

+0

Le gel ne semble pas complètement déterministe, mais lorsqu'il est gelé, il est gelé définitivement jusqu'à ce que la requête soit diffusée. Si cela prend plus d'une heure, tout le reste attendra également pendant une heure, puis sera servi quelques secondes après la fin du gros. – taw

Répondre

0

De combien de mémoire dispose MySQL? Je suppose qu'il faut aller sur le disque pour les tables temporaires et cela peut être un tueur. Quelle est la taille de votre innodb_buffer_pool_size dans votre fichier my.cnf/my.ini? En augmentant cela (ce qui augmente l'utilisation de la mémoire), les requêtes plus petites (et les requêtes qui ont besoin de faire beaucoup de tri) n'auront pas à frapper le disque. La prochaine fois qu'une requête commencera à vous faire cela, connectez-vous sur MySQL, faites "afficher la liste complète des processus" et enregistrez ce qui s'y trouve. Si vous émettez un EXPLAIN ou un DESCRIBE sur la requête qui est lente, qu'est-ce que c'est? Inclut-il la note que cela va à une table temporaire? Lorsque MySQL commence à utiliser des tables temporaires, les choses peuvent se sentir comme si elles étaient en train de mourir, surtout si vous n'avez pas de disque rapide.

Questions connexes