mysql buffer pool详解

介绍

缓冲池是InnoDB在访问表和索引数据时缓存的主内存区域。缓冲池允许直接从内存访问频繁使用的数据,这加快了处理速度。在专用服务器上,通常会将多达80%的物理内存分配给缓冲池。

为了提高大容量读操作的效率,缓冲池被划分为可能包含多行的页面。为了提高缓存管理的效率,缓冲池被实现为页面链表;很少使用的数据使用最近最少使用(LRU)算法的变体从缓存中老化。

了解如何利用缓冲池将频繁访问的数据保存在内存中是MySQL调优的一个重要方面

问题

LRU算法是通用的淘汰算法,但是这个算法在这个场景有一个问题,因为预读的原因,很有可能从存储中读到内存数据中,在内存有限的情况,可能会导致常用的内存页会被淘汰掉。

解决方案

1.借用java 中堆内存的思路,把内存分成young和old两块,从磁盘中读到的数据先放到old区,只有实际访问到这页的数据才加载到young区的head 里,这样old区里老的没访问到的数据逐步会退到tail,最后淘汰掉。

2.如果是全量查询的情况,会导致数据大量的全部查询出来,这时会造成buffer pool 污染,为了解决这个问题,在一的基础上增加了innodb_old_blocks_time 参数,只有数据页在old区,停留超过了这个范围的,才会加载到young区

相关推荐
KASH_SHADOW4 分钟前
8-Mysql的安装与配置
数据库·mysql·adb
澈20711 分钟前
【无标题】QT入门第十二天:数据库编程(下)模型视图与数据展示 | 零基础学QT
数据库·qt·oracle
云絮.1 小时前
数据库事务
java·开发语言·数据库
Leon-Ning Liu2 小时前
【真实经验分享】OGG抽取进程报错 ORA-07445 [kgherrordmp()+986] ORA-00600 [17114]分析步骤
运维·数据库
CCPC不拿奖不改名2 小时前
Redis 工程化部署深度解析
linux·服务器·数据库·redis·深度学习·缓存·rag
吴声子夜歌2 小时前
SQL进阶——自连接
数据库·sql
云贝教育-郑老师2 小时前
TDSQL(MySQL版)分布式事务实现机制深度解析:从两阶段提交到全局一致性读
数据库·sql
gb448oww52 小时前
Redis分布式锁进阶第三十五篇
数据库·redis·分布式
_陈陆亮3 小时前
MySQL 运维高频 SQL:一条语句快速定位长事务与锁阻塞
运维·sql·mysql