数据库缓存 buffer pool详解

什么是buffer pool

buffer pool, 又称之缓存池, 是mysql中为了提升查询性能而引入的缓存, 如果每次查询和修改都去操作磁盘的话, 性能就会很差, 从而引入

Buffer Pool包含多个缓冲页(默认大小通常为16KB),每个缓冲页都有对应的控制信息,如表空间编号、页号等。当数据库请求数据时,首先会在Buffer Pool中查找所需的数据页。如果找到了(称为缓存命中),则直接使用该数据;如果没有找到(称为缓存未命中),则从磁盘读取数据页到Buffer Pool中,并可能替换掉Buffer Pool中最近最少使用的(LRU)数据页来为新数据腾出空间。

修改的时候也是会写入内存

但是因为buffer pool是基于内存的,所以空间不可能无限大,他的默认大小是128M,当然这个大小也不是完全固定的,我们可以调整,可以通过修改MySQL配置文件中的innodb_buffer_pool_size参数来调整Buffer Pool的大小。

复制代码
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';  -- 查看buffer pool

SET GLOBAL innodb_buffer_pool_size = 512M; -- 修改buffer pool

buffer pool和query cache的区别

在Innodb中,除了buffer pool,还有一个缓存层是用来做数据缓存,提升查询效率的,很多人搞不清楚他和buffer pool的区别是什么。

首先就是他们目的和作用不同。Buffer Pool用于缓存表和索引的数据页,从而加速读取操作;而Query Cache用于缓存查询结果,减少重复查询的执行时间。

Buffer Pool主要与存储引擎InnoDB相关,而Query Cache也支持其他的引擎,如MyISAM等。所以,Query Cache是位于Server层的优化技术,而Buffer Pool 是位于引擎层的优化技术。

需要注意的是,在MySQL 5.7版本中,Query Cache已经被标记为废弃,并在MySQL 8.0版本中彻底被移除了。

相关推荐
LB21124 小时前
Redis黑马点评 Feed流
数据库·redis·缓存
喝杯牛奶丶5 小时前
MySQL隔离级别:大厂为何偏爱RC?
java·数据库·mysql·面试
一 乐5 小时前
二手车销售|汽车销售|基于SprinBoot+vue的二手车交易系统(源码+数据库+文档)
java·前端·数据库·vue.js·后端·汽车
Databend5 小时前
BendSQL v0.30.3 Web UI 功能介绍
数据库
gAlAxy...6 小时前
Spring 从 0 → 1 保姆级笔记:IOC、DI、多配置、Bean 生命周期一次讲透
数据库·sqlserver
苦学编程的谢6 小时前
Redis_5_单线程模型
数据库·redis·缓存
xuejianxinokok6 小时前
可能被忽略的 pgvector 各种坑
数据库·后端
拾忆,想起7 小时前
TCP粘包拆包全解析:数据流中的“藕断丝连”与“一刀两断”
java·网络·数据库·网络协议·tcp/ip·哈希算法
serve the people7 小时前
Formatting Outputs for ChatPrompt Templates(two)
前端·数据库
JanelSirry7 小时前
Java + Spring Boot + Redis技术栈,在实际使用缓存时遇到 缓存击穿、缓存穿透、缓存雪崩
java·spring boot·缓存