首页 > 数据库 >MySQL数据库日志之WAL机制和Buffer Pool

MySQL数据库日志之WAL机制和Buffer Pool

时间:2024-09-21 11:50:02浏览次数:8  
标签:WAL log Buffer undo 缓存 MySQL 磁盘 Pool

WAL 机制(Write-Ahead-Logging)

先磁盘之前先写入日志文件到磁盘,也就是 redo log 中的后台系统线程,每 1 秒进行一次对 redo log Buffer 刷盘操作。

  • 标准的Undo Log这一步是靠WAL实现的,也就是要求Undo写入先于数据落盘。
    • 对于,undo log 的 WAL 机制,只是相对于提交事务后的刷盘和线程轮询刷盘。只写一次盘,走 redolog 。
  • redo log 在事务没有提交前的刷盘,也使用了 WAL 机制,写入先于数据落盘。
  • binlog 要求一次写入,write 也只是写入到文件缓存(page cache),事务提交的时候,再把 binlog cache 写到 binlog 文件中。
    • 但是我们可以通过 binlog_cache_size 参数控制单个线程 binlog cache 内存大小,如果存储内容超过了这个参数,就要暂存到磁盘。这里应用了 WAL 机制,日志先于数据落盘。

Buffer Pool(缓存池) 的作用

MySQL 的数据都是存在磁盘中的,那么要更新一条记录的时候,得先要从磁盘读取该记录,然后在内存中修改这条记录。那修改完的记录是选择继续写入磁盘,还是缓存起来???

当然是缓存,这样下次有查询语句命中了这条记录,直接读取缓存中的记录,就不需要从磁盘获取数据了。

为此 InnoDB 引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能。

有了 Buffer Pool 后:

  • 当读取数据是,如果数据存在于 Buffer Pool 中,客户端就会直接读取 Buffer Pool 中的数据,否则再去磁盘中读取。
  • 当修改数据时如果数据存在于 Buffer Pool 中,那么直接修改 Buffer Pool 中的数据所在的页,然后将其页设置为脏页(该页的内存数据和磁盘上的数据已经不一致), 为了减少磁盘 I/O,不会立即将脏页写入磁盘,后续由后台线程选择一个合适的时机将脏页写入到磁盘。

Buffer Pool 缓存了什么?

InnoDB 会把存储的数据划分为如干个【页】(数据页),以页作为磁盘和内存交互的基本单位,一个页的默认大小为 16 KB。因此,Buffer Pool 同样需要按照【页】来划分。

在 MySQL 启动的时候,InnoDB 会为 Buffer 申请一片连续的内存空间,然后按照默认 16 KB 的大小划分一个个页,Buffer Pool 中的页就叫缓存页。此时这些缓存页都是空闲的,之后随着程序的运行,才会由磁盘上的页被缓存到 Buffer Pool 中。

Buffer Pool 缓存了什么?

数据页,索引页,插入缓存页,undo,自适应哈希索引,锁信息

undo 页 是记录是什么?

开启事务后,InnoDB 层更新记录前,首先要记录相应的 undo log,如果是更新操作,需要把被更新的列的 旧值记下来,也就是要生成一条 undo log,undo log 会写入 Buffer Pool 中的 undo 页面。

undo log 的记录的是开启事务时的值,如果是更新操作就要存到缓存中(脏页 undo 页),后面系统线程会刷脏。

对于,undo log 的 WAL 机制,只是相对于提交事务后的刷盘和线程轮询刷盘。

只写一次盘,走 redolog 。

查询一条记录,就只需要缓冲一条记录吗?

不是的。

当我们查询一条记录时,InnoDB 是会把整个页的数据加载到 Buffer Pool 中,将页加载到 Buffer 后,再通过页里的【页目录】去定位到某条具体的记录。


标签:WAL,log,Buffer,undo,缓存,MySQL,磁盘,Pool
From: https://blog.csdn.net/X2512261315/article/details/142412060

相关文章

  • MySQL中的事务和事务隔离级别
    MySQL/MariaDB中的事务和事务隔离级别 分类: 数据库系列undefined官方手册:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html1.事务特性事务具有ACID特性:原子性(A,atomicity)、一致性(C,consistency)、隔离性(I,isolation)、持久性(D,......
  • Mysql
    一什么是数据库数据库:(DB,DataBase)概念:是数据仓库软件在操作系统之上的应用sql可以存储大量数据作用:存储数据,管理数据1.1、数据库的三大范式1、第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据线;也就是说:每列的值具有原子性,不可再分割。2、第二范式(2NF)是在第一......
  • MySQL数据库的备份与恢复
    MySQL数据库的备份与恢复在现代信息时代,数据已成为企业和个人的重要资产,数据的安全性和可恢复性直接影响到业务的连续性和稳定性。MySQL作为广泛使用的关系型数据库管理系统,其数据的备份与恢复显得尤为重要。本文将详细探讨MySQL数据库的备份与恢复策略,包括备份的重要性、......
  • 在一台服务器docker下载mysql和redis镜像,保存到本地,然后在另外一台服务上导入镜像
    要在一台服务器上下载MySQL和Redis的Docker镜像并保存到本地,然后在另一台服务器上导入镜像,您可以按照以下步骤进行操作:步骤1:在第一台服务器上下载MySQL和Redis镜像下载MySQL镜像:dockerpullmysql:latest下载Redis镜像:dockerpullredis:latest步骤2:......
  • MySQL 中的锁定粒度:理解与应用
    在MySQL数据库的使用中,锁定粒度是一个至关重要的概念。它决定了数据库在并发控制中锁定的范围和程度,对数据库的性能和并发能力有着深远的影响。今天,我们就来深入了解一下MySQL中的锁定粒度是什么意思,并通过实际案例来更好地理解它。一、什么是锁定粒度锁定粒度是指数......
  • MySQL 中的锁定粒度:理解与应用
    《MySQL中的锁定粒度:理解与应用》在MySQL数据库的使用中,锁定粒度是一个至关重要的概念。它决定了数据库在并发控制中锁定的范围和程度,对数据库的性能和并发能力有着深远的影响。今天,我们就来深入了解一下MySQL中的锁定粒度是什么意思,并通过实际案例来更好地理解它。一、什么......
  • MySQL 中的 UTF-8 与 UTF8MB4:差异解析
    在MySQL数据库中,字符集的选择对于数据的存储和处理至关重要。其中,UTF-8和UTF8MB4是两个常见的字符集选项。那么,它们之间到底有什么区别呢?一、字符集简介UTF-8UTF-8(8-bitUnicodeTransformationFormat)是一种可变长度的字符编码方式,可以表示世界上几乎所有的字符。它使......
  • 8. 详细描述一条 SQL 语句在 MySQL 中的执行过程。
    一条SQL语句在MySQL中的执行过程包括多个步骤,从接收到SQL命令到返回结果,这些步骤涉及SQL解析、优化、执行以及最终的结果返回。以下是详细描述一条SQL语句在MySQL中的执行过程。1.客户端发送SQL请求客户端应用程序:首先,客户端(如JDBC、命令行工具等)通过网络向MySQL服务器发......
  • MYSQL面试知识点手册
    第一部分:MySQL基础知识1.1MySQL简介MySQL是世界上最流行的开源关系型数据库管理系统之一,它以性能卓越、稳定可靠和易用性而闻名。MySQL主要应用在Web开发、大型互联网公司、企业级应用等场景,且广泛用于构建高并发、高可用的数据驱动系统。MySQL的发展历史:MySQL......
  • MySQL数据库知识点2
    表的数值类型负数:signed(有符号的)正数:unsigned(无符号的)0补齐:zerofill例Createtableshuju(nameint(5)zerofill);#整型:int大整型(默认十一位)thinyint微小整型( 有符号(signed默认):-128~127无符号(unsigned):0~255)smallint小整型......