我有一个慢速数据库查询,第一次运行 18 秒,后续运行 4 秒。我正在尝试优化它的“冷启动”执行时间。但无法连续复制。
select SQL_NO_CACHE
指令没有帮助。
以下命令均无法使其再次运行 18 秒:
FLUSH QUERY CACHE;
RESET QUERY CACHE;
FLUSH TABLES;
即使数据库重新启动也不会使它再次运行很长时间。
还有其他刷新缓存的命令吗?
表引擎是 InnoDB。
我有一个慢速数据库查询,第一次运行 18 秒,后续运行 4 秒。我正在尝试优化它的“冷启动”执行时间。但无法连续复制。
select SQL_NO_CACHE
指令没有帮助。
以下命令均无法使其再次运行 18 秒:
FLUSH QUERY CACHE;
RESET QUERY CACHE;
FLUSH TABLES;
即使数据库重新启动也不会使它再次运行很长时间。
还有其他刷新缓存的命令吗?
表引擎是 InnoDB。
让我解释一下为什么它没有帮助。
Your Requirement
:在这里,您尝试再次运行相同的查询,但您希望它仅通过清理缓存来作为第一次运行。
当查询运行时,图片中会出现多种类型的缓存。“查询缓存”是我们谈论的最常见的缓存,然后是 MySQL 缓存(例如 Innodb 缓冲池)、table_cache(在 MySQL 级别和 InnoDB 级别)、OS 缓存、硬件缓存。
select SQL_NO_CACHE :
这将阻止运行查询以保存任何“查询缓存”,这意味着如果您再次运行没有任何“查询缓存”的相同查询,但图片中将存在其他缓存。
FLUSH QUERY CACHE :
这只是对“查询缓存”进行碎片整理以更好地利用其内存
RESET QUERY CACHE :
从“查询缓存”中删除所有查询结果,这不会影响您在之前的所有查询中是否使用了“SQL_NO_CACHE”。
我通常在查询中添加一个用户定义的变量,这样它就可以跳过查询缓存。不过,不确定您是否可以以这种方式模拟冷启动。
SELECT a.*
FROM a, (SELECT @a:=NULL) as foo;