从 MySQL 获取数据,是从磁盘读取的吗?(buffer pool)
从 MySQL 获取数据,是从磁盘读取的吗?(Buffer Pool)
在 MySQL 中,数据是否从磁盘读取取决于数据是否已经被加载到内存中。MySQL 使用 InnoDB 存储引擎 中的 Buffer Pool 来优化磁盘 I/O,减少从磁盘读取数据的次数,提高查询性能。
Buffer Pool 的工作原理
缓存机制:
- Buffer Pool 是 InnoDB 存储引擎中的一个内存区域,用于缓存数据页(Data Page)、索引页和其他缓存的页面。每当 MySQL 查询数据时,首先会检查 Buffer Pool 中是否有相应的数据。
- 如果 Buffer Pool 中已经缓存了需要的数据页,MySQL 就可以直接从内存中读取数据,避免了磁盘 I/O 操作,这样可以大幅提高查询效率。
从磁盘读取:
- 如果数据不在 Buffer Pool 中,MySQL 会从磁盘读取数据。InnoDB 会从数据文件中将数据页读取到内存中,然后返回查询结果。
- 当数据被读取到 Buffer Pool 后,下次查询相同的数据时,可以直接从内存中获取,而无需再次访问磁盘。
缓存策略:
- LRU(Least Recently Used)算法:Buffer Pool 会根据 LRU 算法管理缓存数据页。当 Buffer Pool 满时,最近最少使用的数据页会被淘汰,以便腾出空间存储新的数据。
- 写入操作:对于写入操作(如
INSERT、UPDATE、DELETE),数据首先写入 Buffer Pool,MySQL 会定期将这些修改后的数据刷写到磁盘(通过后台线程进行)。
刷盘机制:
- 即使数据已经缓存到 Buffer Pool 中,最终数据还是需要写入磁盘以保证持久性。InnoDB 会周期性地将内存中的数据刷新到磁盘的数据文件中,这个过程叫做 刷盘(Flushing)。
总结
- 数据从磁盘读取:当数据不在 Buffer Pool 中时,MySQL 需要从磁盘读取数据。
- 缓存在内存中:为了提高性能,MySQL 会将读取的数据缓存在 Buffer Pool 中,以便后续查询时直接从内存中获取,减少磁盘 I/O。
- 写入操作:写入操作首先发生在内存中,然后定期通过刷盘操作写回磁盘。
通过使用 Buffer Pool,MySQL 能够显著减少磁盘 I/O,提高查询和写入操作的效率。
从 MySQL 获取数据,是从磁盘读取的吗?(buffer pool)的更多相关文章
- php 写入数据到MySQL以及从MySQL获取数据,页面出现乱码的解决方法
现象如标题. 解决思路: 1确定数据库charset是否是utf-8 a. charset不是utf-8 1, 更改数据库charset为utf-8 ALTER DATABASE db_name DE ...
- mysql启动报错cannot allocate memory for the buffer pool处理
今天启动mysql服务器时失败了.去/var/log/mysql/查看error.log,报错信息如下: 160123 22:29:26 InnoDB: Initializing buffer poo ...
- PHP从mysql获取数据的方法
<?php require "database.php"; //读取数据库中的数据 $sql_1 = "SELECT * FROM test_table" ...
- 从MySQL获取数据
安装 PM> install-package newtonsoft.json PM> install-package mysql.data string connectionString ...
- 源码浅析:InnoDB聚集索引如何定位到数据的物理位置,并从磁盘读取
索引结构概述: MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址.这与Oracle的索引结构相似,比较好理解.那么,常用的Innodb聚集索引结构是怎样的呢? InnoDB的数据文 ...
- Mysql删除数据后磁盘空间未释放的解决办法【转】
转自 Mysql删除数据后,磁盘空间未释放的解决办法 - 今日头条(TouTiao.com)http://toutiao.com/a6303087712678412546/?tt_from=mobil ...
- Python3 多线程(连接池)操作MySQL插入数据
1.主要模块DBUtils : 允许在多线程应用和数据库之间连接的模块套件Threading : 提供多线程功能 2.创建连接池PooledDB 基本参数: mincached : 最少的空闲连接数, ...
- JDBC 连接mysql获取中文时的乱码问题
前段时间学习JDBC,要连接mysql获取数据.按照老师的样例数据,要存一些名字之类的信息,用的都是英文名,我当时就不太想用英文,就把我室友的名字存了进去,嘿嘿,结果,出问题了. 连接数据库语句: s ...
- [转]MySQL innodb buffer pool
最近在对公司的 MySQL 服务器做性能优化, 一直对 innodb 的内存使用方式不是很清楚, 乘这机会做点总结. 在配置 MySQL 的时候, 一般都会需要设置 innodb_buffer_poo ...
- MySQL · 性能优化· InnoDB buffer pool flush策略漫谈
MySQL · 性能优化· InnoDB buffer pool flush策略漫谈 背景 我们知道InnoDB使用buffer pool来缓存从磁盘读取到内存的数据页.buffer pool通常由数 ...
随机推荐
- Oracle 遍历游标的四种方式汇总(for、fetch、while、BULK COLLECT)
本文原创:https://www.cnblogs.com/Marydon20170307/p/12869692.html 感谢博主分享 注意:原文中方式四FORALL处有语法错误,应该使用FOR. 1 ...
- day05-面向对象编程:基础语法
Java面向对象:类的基础语法 [ 任务列表 ] 1.面向对象快速入门 2.什么是面向对象 3.类的基础语法--构造器 4.类的基础语法--this关键字 5.类的基础语法--封装 6.类的基础语法- ...
- Codeforces 11D A Simple Task 题解 [ 蓝 ] [ 状压 dp ]
思路不难想,细节比较多. 思路 观察到 \(n \le 19\) ,首先想到状压 dp . 于是自然地定义 \(dp[j][i]\) 为:抵达点的状态为 \(i\) ,且此时在点 \(j\) 时,简单 ...
- Markdown语法基础教学
Markdown语法基础教学 简介 Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML.它的目标是实现"易读易写",并且 ...
- 分享一个 Windows 下的透明锁屏工具【开源】
透明锁屏 担心展示内容时被误操作打断? 害怕离开后忘记锁屏导致隐私泄露? 厌倦了千篇一律的系统锁屏界面? 透明锁屏 了解一下. 功能特点 告别误操作:锁屏状态下,屏幕内容依然可见,视频播放.PPT 演 ...
- 【软件开发】Doxygen使用笔记
[软件开发]Doxygen 使用笔记 Doxygen 是通过代码注释生成文档的事实标准,借用该工具可以将文档内容与代码写在一起方便维护. https://github.com/doxygen/doxy ...
- redis - [07] 数据类型
redis是一个开源(BSD许可)的,内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件MQ.它支持多种类型的数据结构,如字符串(String).散列(Hash).列表(List).集合( ...
- Linux - 禁ping & 开放访问端口
适用于Linux操作系统 禁ping 1.编辑 /etc/sysctl.conf 文件,文件末尾增加如下内容后,保存退出. net.ipv4.icmp_echo_ignore_all = 1 2.在命 ...
- Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效
Jsmoke by Yn8rt 该插件由 Yn8rt师傅 开发,插件可以理解为主动版的hae和apifinder,因为其中的大多数规则我都引用了,当你认为当前页面,以及其调用的js文件存在敏感信息 ...
- 算子var_threshold
算子var_threshold 名称 var_threshold - 通过局部均值和标准差分析对图像进行阈值处理. 签名 var_threshold(Image : Region : MaskWidt ...