Я только что включил медленное ведение журнала в моей базе данных MySQL, добавив следующее к /etc/mysql/my.cnf
:
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
Когда я запускаю mysqldumpslow, он выдает следующее:
Reading mysql slow query log from mysql-slow.log
Count: 1 Time=199.23s (199s) Lock=0.00s (0s) Rows=32513.0 (32513), ...
SELECT /*!N SQL_NO_CACHE */ * FROM `mytable`
...
Посмотрев на исходный mysql-slow.log
, полный запрос:
SELECT /*!40001 SQL_NO_CACHE */ * FROM `mytable`;
Итак, mysqldumpslow
просто заменил номер на N
(чтобы помочь агрегировать похожие запросы.)
Итак, вопрос в том, откуда взялся этот запрос и что означает бит /*!40001 SQL_NO_CACHE */
?
Насколько я могу судить, возможно, из команды mysqldump
, которая делала резервную копию (следовательно, не желая кэшировать данные), похоже ли это правильно? И если это так, поскольку он читает только 32 000 строк, почему это заняло 199 секунд?
Есть еще несколько похожих запросов в других таблицах, принимающих 100, 50 и более, до более разумных 3-х, большинство из которых имеют около 10-20 000 строк, самый большой с 450 000 строк.