atxdba Asked: 2012-01-27 16:14:27 +0800 CST2012-01-27 16:14:27 +0800 CST 2012-01-27 16:14:27 +0800 CST innodb 缓冲池的“SQL_NO_CACHE” 772 我猜答案是否定的,但我想知道是否有办法告诉 innodb 不要将获取的页面存储在缓冲池中? 考虑这样做的原因是检查汇总表。我想尽量减少丢弃有用的缓存数据的影响。 mysql innodb 1 个回答 Voted Best Answer atxdba 2012-04-03T22:02:10+08:002012-04-03T22:02:10+08:00 几个月后,我偶然发现了我在问题中寻求的有效解决方案。 从文档本身来看,有两个变量可以帮助防止在校验和或 mysqldump 期间发生大表扫描时缓冲池被破坏。 第一个是 innodb_old_blocks_pct(默认 37%)。这是插入新页面时符合驱逐条件的页面子列表。当一个新页面被第一次读取时,它被添加到这个列表的头部。 innodb_old_blocks_time(默认为 0)定义添加后必须经过的毫秒数,然后访问才能将其从旧列表移出到新列表的头部。由于默认值为 0,因此第一次访问将其置于新列表的头部。 所以简而言之,将 innodb_old_blocks_time 设置为一个非零值,比如 500,然后表扫描基本上只会导致旧子列表不断循环。为其他目的而读取的页面将保留在新列表中,让您的数据库保持与实际应用程序相关数据的温暖!
几个月后,我偶然发现了我在问题中寻求的有效解决方案。
从文档本身来看,有两个变量可以帮助防止在校验和或 mysqldump 期间发生大表扫描时缓冲池被破坏。
第一个是 innodb_old_blocks_pct(默认 37%)。这是插入新页面时符合驱逐条件的页面子列表。当一个新页面被第一次读取时,它被添加到这个列表的头部。
innodb_old_blocks_time(默认为 0)定义添加后必须经过的毫秒数,然后访问才能将其从旧列表移出到新列表的头部。由于默认值为 0,因此第一次访问将其置于新列表的头部。
所以简而言之,将 innodb_old_blocks_time 设置为一个非零值,比如 500,然后表扫描基本上只会导致旧子列表不断循环。为其他目的而读取的页面将保留在新列表中,让您的数据库保持与实际应用程序相关数据的温暖!