web-dev-qa-db-fra.com

L'activation de "log_queries_not_using_indexes" désactive "long_query_time"?

J'ai remarqué que, dans Mysql, lors de l'activation de log_queries_not_using_indexes, slow_query_log et long_query_time, le fichier journal des requêtes lentes généré contiendra beaucoup de requêtes même si le temps de requête est bien inférieur à long_query_time.

Il semble qu'une fois que le log_queries_not_using_indexes est activé, Mysql enregistrera toutes les requêtes qui n'utilisent pas d'index quel que soit le "long_query_time".

Y a-t-il un moyen de surmonter cela? Je veux dire, existe-t-il un moyen de consigner toutes les requêtes qui prennent plus de temps que long_query_time, qu'ils utilisent ou non des index?

14
coolcfan

C'est un comportement attendu. Reportez-vous à la documentation en ligne, mais en résumé:

  • long_query_time est le seuil de temps d'exécution de la requête au-delà duquel il est enregistré. Toutes les requêtes prenant plus de temps que le seuil sont enregistrées, qu'elles utilisent ou non un index.

  • log_queries_not_using_indexes indique à MySQL de consigner en outre toutes les requêtes qui n'utilisent pas d'index pour limiter le nombre de lignes analysées. La journalisation de cette condition se produit indépendamment du temps d'exécution.

J'espère que cela explique ce que vous voyez. Il semble que vous vouliez probablement simplement long_query_time et pas log_queries_not_using_indexes si votre objectif est de capturer uniquement les requêtes qui prennent plus de temps qu'un certain seuil.

Liens vers les documents: http://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_log-queries-not-using-indexes

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_long_query_time

27
drogart