mysql从缓冲中排除模式

时间:2018-03-13 08:14:46

标签: mysql caching buffer innodb

如何从缓冲或缓存中排除完整的架构? 此模式的每个查询都不应该在查询缓存或innoDB缓冲区中缓冲。

2 个答案:

答案 0 :(得分:1)

由于您标记了问题,我假设您要在InnoDB Buffer Pool中排除特定架构的缓冲页面。

没有选项可以控制存储在缓冲池中的模式或表。事实上,查询读取的任何页面必须存储在缓冲池中,至少在您查询时是这样。

InnoDB会在您查询时自动将页面加载到缓冲池中。如果后续查询需要某些其他页面的空间,InnoDB也会自动逐出页面。这些页面由LRU(最近最少使用)算法管理,这使得不常用的页面被驱逐的可能性更大。

但InnoDB更进了一步。在过去,即使您的表扫描是每天一次的查询(如mysqldump运行的那些查询),也存在大表扫描会驱逐所有页面的风险。因此,InnoDB通过跟踪缓冲池新手的页面或具有“资历”的页面来尝试make the buffer pool scan-resistant,因为它们已被多次读取。高级页面不太可能被新人驱逐。

以上所有内容应该有助于解释为什么您可能不需要控制哪些模式可以使用缓冲池。 InnoDB努力确保您需要的页面在RAM中,而那些您不需要的页面则不是。

答案 1 :(得分:0)

对于禁用特定架构的查询缓存 - 通常不可能,但是,您可以使用

关闭连接的查询缓存

SET SESSION query_cache_type = OFF;

它将完全关闭当前会话的查询缓存。 或者,您可以在选择的查询中添加SQL_NO_CACHE

对于InnoDB缓冲池 - 我认为不可能,因为它没有特定于模式的配置值。