我想多次运行相同的查询,看看它在没有缓存内存的帮助下花费了多少时间。运行命令重置查询缓存似乎不起作用,因为即使在缓存重置之后,第二次运行也需要很短的时间。我遗漏了什么?
发布于 2019-11-06 01:21:30
您可以在SQL_NO_CACHE查询中使用SELECT。
https://dev.mysql.com/doc/refman/5.5/en/query-cache-in-select.html
请记住,查询缓存在MySQL的后期版本中已被删除。
根据存储引擎的不同,它将表数据作为缓冲池的一部分加载到内存中。这一部分您不能真正控制哪些表要加载,哪些表不能加载(或者至少不容易)。
发布于 2019-11-06 00:50:21
您的操作系统正在缓存大量数据。然后DBMS本身缓存整个数据。查询缓存只保存上一次查询的输出。查询输出的数据可能都在RAM中。如果您想在没有缓存的情况下运行查询,那么在执行之间关闭主机,或者运行一个查询,该查询将从磁盘读取足够多的数据以覆盖所有缓存。但是,这将不是一个实际的衡量指标。in您的查询将在野外执行。
发布于 2019-11-06 02:06:39
两个“缓存”会影响查询。Query Cache和Buffer Cache(buffer_pool with InnoDB and key_buffer with MyISAM).Query cache的影响比Buffer Cache大得多,因为它缓存查询的结果,因此相同的查询不会再次执行。
为了避免Query Cache,使用SQL_NO_CACHE是个好主意,您可以在my.cnf中禁用Query Cache并重新启动mysql。
Buffer cache由mysql管理,用于在内存中缓存数据,这样查询就不会从磁盘(SSD或HDD)读取数据。如果您想清除它,请尝试将“缓冲区缓存”设置得足够小,并使用其他数据填充它(使用SELECT)。
https://stackoverflow.com/questions/58721299
复制相似问题