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区

相关推荐
Cat God 0072 分钟前
基于 CentOS 7.6 的 MySQL 8.0 主从复制
linux·服务器·mysql·centos
笨蛋少年派9 分钟前
Maxwell数据变更捕获工具简介
数据库·mysql
谷新龙00117 分钟前
pg_clickhouse插件,在postgresql中借助clickhouse借用OLAP能力
数据库·clickhouse·postgresql
Hello.Reader18 分钟前
Flink SQL 的 SET 语句会话参数配置与快速自检(SQL CLI 实战)
数据库·sql·flink
老华带你飞26 分钟前
工会管理|基于springboot 工会管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
自在极意功。26 分钟前
MyBatis配置文件详解:environments、transactionManager与dataSource全面解析
java·数据库·tomcat·mybatis
紫金桥软件26 分钟前
紫金桥软件 | 赋能工业数字化转型
数据库·国产化
Navicat中国30 分钟前
Navicat x 达梦技术指引 | 模型转换
数据库·达梦·navicat·概念模型·物理模型·逻辑模型·模型转换
邂逅星河浪漫31 分钟前
【MySQL 事务】详细介绍+实例
数据库·mysql·事务
tianyuanwo34 分钟前
RPM数据库锁竞争:原理、诊断与根治方案
数据库·rpm·bdb·命令挂起