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区

相关推荐
柯南二号11 分钟前
Go使用Gin写一个对MySQL的增删改查服务
mysql·golang·gin
Pocker_Spades_A24 分钟前
金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步
数据库·数据库平替用金仓·金仓数据库2025征文
暮 夏27 分钟前
利用session在html和MySQL实现登录
前端·mysql·html
穿条秋裤到处跑38 分钟前
Centos离线安装mysql、redis、nginx等工具缺乏层层依赖的解决方案
mysql·centos
席万里1 小时前
MongoDB入门详解
数据库·mongodb
随缘而动,随遇而安1 小时前
第五十四篇 AI与数据分析
大数据·数据库·sql·数据分析·数据库架构
苹果酱05671 小时前
小程序 IView WeappUI组件库(简单增删改查)
java·vue.js·spring boot·mysql·课程设计
敖行客 Allthinker2 小时前
Redis 重回开源怀抱:开源精神的回归与未来展望
数据库·redis·开源
忘梓.3 小时前
从父类到子类:C++ 继承的奇妙旅程(1)
java·开发语言·数据库·c++
陆少枫5 小时前
MySQL基础关键_004_DQL(三)
数据库·mysql