Nous avons récemment eu un problème que je n'avais jamais vu auparavant, où, pendant environ 3 heures, l'une de nos tables Mysql est devenue extrêmement lente. Cette table contient les messages du forum et contient actuellement environ un million de lignes. La requête qui est devenu lent était très commun dans notre application:Table Mysql lentement intermittente - pourquoi?
SELECT * FROM `posts` WHERE (`posts`.forum_id = 1) ORDER BY posts.created_at DESC LIMIT 1;
Nous avons un index sur la table messages sur (forum_id, created_at) qui permet normalement cette requête et trier pour arriver en mémoire. Mais, pendant ces trois heures, notsomuch. Ce qui est normalement une requête instantanée va de 2 secondes à 45 secondes pendant cette période. Ensuite, il est revenu à la normale.
J'ai parcouru notre journal de requête lente et rien d'autre ne sort de l'ordinaire. J'ai regardé New Relic (il s'agit d'une application Rails) et toutes les autres actions ont fonctionné essentiellement à la même vitesse que la normale. Nous n'avions pas un nombre inhabituel de messages de messages aujourd'hui. Je ne trouve rien d'autre d'étrange dans nos journaux. Et la base de données n'échangeait pas, quand il avait encore des concerts de mémoire à utiliser. Je me demande si Mysql pourrait changer d'avis sur les index à utiliser pour une requête donnée, et pour une raison quelconque, il a commencé à décider de faire une analyse de table complète sur cette requête pendant quelques heures aujourd'hui? Mais si cela était vrai, pourquoi aurait-il cessé de faire les analyses de table complètes?
Est-ce que quelqu'un d'autre a rencontré une requête par intermittence lente qui a défié la raison? Ou avez-vous des idées créatives sur la façon dont on pourrait déboguer un problème comme celui-ci?