我想多次运行相同的查询,以了解在没有高速缓存的情况下需要花费多少时间。 运行命令RESET QUERY CACHE似乎不起作用,因为即使重新设置了缓存,查询在第二次运行中的时间也很短。 我想念什么?
wuyancindy 回答:如何在MYSQL中真正清除缓存?
您的操作系统正在缓存大量数据。然后,DBMS本身会缓存全部数据。查询缓存仅保存先前查询的输出。创建查询输出的数据可能全部在RAM中。如果要运行查询而不进行任何缓存,请在两次执行之间关闭主机或运行查询,该查询将从磁盘读取足够的数据以覆盖所有缓存。但这不是您查询将在野外执行的现实方法。
,您可以在SQL_NO_CACHE
查询中使用SELECT
。
https://dev.mysql.com/doc/refman/5.5/en/query-cache-in-select.html
请记住,MySQL的更高版本中已删除了查询缓存。
根据存储引擎(例如innodb),它将表数据作为缓冲池的一部分加载到内存中。这部分您无法真正控制要加载的表和不加载的表(或至少不容易)。
,两个“缓存”会影响查询。 Query Cache
和Buffer Cache(buffer_pool with InnoDB and key_buffer with MyISAM)
。 Query cache
的影响远大于Buffer Cache
,因为它缓存查询的结果,因此同一查询将不再执行。
要避免使用Query Cache
,请使用SQL_NO_CACHE
,可以在Query Cache
中禁用my.cnf
并重新启动mysql。
Buffer cache
由mysql管理,可将数据缓存在内存中,以便您的查询不会从磁盘(SSD或HDD)读取数据。如果要清除它,请尝试将“缓冲区缓存”设置得足够小,并用其他数据填充(使用SELECT
)。
在旧版本的 MySQL (v.5.1) 上,我遇到了缓存视图的问题,该视图永远不会刷新。我尝试了 RESET QUERY CACHE
、FLUSH TABLES
、SELECT SQL_NO_CACHE...
等。但没有任何效果。然后,我将在此视图中查询的底层(单个)表的存储引擎从 InnoDB 更改为 MyISAM,并且它隐式地按预期工作!无需跳过任何环节来清除或阻止缓存!
我不确定这是否只是旧版本/存储引擎的错误?如果您对此事有任何了解,请发表评论。