我刚刚打开 slow query logging在我的 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 行。
最佳答案
/*!40001 SQL_NO_CACHE */
表示在 mysql >= 4.0.1 的版本中执行 SELECT SQL_NO_CACHE * FROM mytable
而在更早的版本中执行该命令而不SQL_NO_CACHE。
mysqldump 也使用 /*!40001 SQL_NO_CACHE */
语法。
我不知道为什么你的查询会这么慢。
关于mysql - "SELECT/*!N SQL_NO_CACHE */* FROM ` mytable `"mean in in MySQL' s 慢查询日志是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282788/