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区

相关推荐
风叶悠然2 分钟前
vue3中数据的pinia的使用
前端·javascript·数据库
JosieBook22 分钟前
【数据库】2026国产时序数据库新格局与金仓的多模突围
数据库·时序数据库
羑悻的小杀马特30 分钟前
不做“孤岛”做“中枢”:拆解金仓时序库,看国产基础软件如何玩转“多模融合”
数据库·人工智能
小北方城市网30 分钟前
SpringBoot 安全认证实战(Spring Security + JWT):打造无状态安全接口体系
数据库·spring boot·后端·安全·spring·mybatis·restful
bbq粉刷匠35 分钟前
MySQL - 基础增删查改
数据库·mysql
l1t44 分钟前
DeepSeek总结的SQLite 数据库的版本更新历史摘要
数据库·人工智能·sqlite
一个天蝎座 白勺 程序猿1 小时前
Apache IoTDB(13):数据处理的双刃剑——FILL空值填充与LIMIT/SLIMIT分页查询实战指南
数据库·sql·ai·apache·时序数据库·iotdb
一步一个脚印1 小时前
Oracle LONG类型与CLOB类型的比较与转换
数据库·oracle
s_daqing1 小时前
ubuntu(arm,手机)安装mysql
arm开发·mysql·ubuntu
廋到被风吹走1 小时前
【数据库】【Mysql】慢SQL深度分析:EXPLAIN 与 optimizer_trace 全解析
数据库·sql·mysql