mysql从缓冲区中排除模式

mysql从缓冲区中排除模式,mysql,caching,buffer,innodb,Mysql,Caching,Buffer,Innodb,如何从缓冲或缓存中排除完整的架构? 此架构的每个查询都不应缓冲在查询缓存或innoDB缓冲区中。要禁用特定架构的查询缓存,通常是不可能的,但是,您可以使用 SET SESSION query\u cache\u type=OFF 它将完全关闭当前会话的查询缓存。 或者,您可以将SQL\u NO\u缓存包含到所选查询中 至于InnoDB缓冲池-我认为这是不可能的,因为它没有特定于架构的配置值。既然您标记了您的问题,我假设您希望排除数据库中特定架构的缓冲页 没有控制存储在缓冲池中的架构或表的选项。事

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

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

SET SESSION query\u cache\u type=OFF

它将完全关闭当前会话的查询缓存。 或者,您可以将
SQL\u NO\u缓存
包含到所选查询中


至于InnoDB缓冲池-我认为这是不可能的,因为它没有特定于架构的配置值。

既然您标记了您的问题,我假设您希望排除数据库中特定架构的缓冲页

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

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

但InnoDB更进一步。在过去,即使您的表扫描是每天一次的查询(如mysqldump运行的查询),也存在大表扫描会逐出所有页面的风险。因此,InnoDB试图通过跟踪新加入缓冲池的页面,或者那些由于已被多次读取而具有“资历”的页面来实现。高级页面不太可能被新来者逐出


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

没错,我的重点是InnoDB和节省空间。你的回答对我很有帮助。只需一次会议就完全关闭QC会导致不一致。也许该设置会在您的
选择时禁用它,但在“写入”时不应禁用清除。好吧,据我所知,查询缓存仅适用于选择,因为缓存DML查询由于明显的原因(没有人会将相同的值插入同一个表)是毫无用处的。我的观点是,DML查询虽然没有缓存,确实要让QC参与清除。虽然完全关闭查询缓存(而不是查询缓存本身,因为
SET SESSION query\u cache\u type=off;
就像在每个查询中添加
sql\u no\u cache
),但这的确是一个不错的主意,特别是当您在执行一次性繁重的查询时,结果非常巨大。