前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL事务(三)InnoDB存储引擎下SQL执行的缓存机制

MySQL事务(三)InnoDB存储引擎下SQL执行的缓存机制

作者头像
鳄鱼儿
发布2024-05-28 08:49:33
1400
发布2024-05-28 08:49:33
举报

前言

MySQL架构(二)SQL 更新语句是如何执行的?中,小鱼介绍了SQL 更新语句的执行流程,文章中考虑初次介绍MySQL 架构,涉及到服务层的流程并没有展开介绍。

于是今天把坑填了,本文将以更新语句执行过程对server 层的操作进行展开讲解。

MySQL 的缓存机制

在 InnoDB 存储引擎下,SQL 执行的缓存机制主要涉及两种类型的缓存:查询缓存和缓冲池(Buffer Pool)。

查询缓存

查询缓存会存储已经执行过的 SELECT 语句及其结果集,如果再次执行相同的 SELECT 语句,系统会直接返回缓存中的结果,而不需要重新执行查询。

在 InnoDB 中,默认情况下是不启用查询缓存的,因为对于更新较为频繁的数据表(或者高并发场景下)而言,缓存会频繁失效,若此时使用查询缓存容易对 MySQL 性能产生负面影响,因此通常情况下不建议使用查询缓存。

查询缓存在 MySQL架构(二)SQL 更新语句是如何执行的?中已经作过介绍,可以在这篇文章更详细的了解查询缓存。

Buffer Pool缓冲池

缓冲池是 InnoDB 存储引擎中最重要的缓存机制之一,主要用于缓存数据页。

数据页page是 InnoDB 存储引擎中的最小存储单位,每个数据页的大小通常为 16 KB。

当执行 UPDATE 语句时,首先会将相关的数据页加载到缓冲池中,然后在缓冲池中进行修改。如果数据页已经存在于缓冲池中,那么更新操作会直接在缓冲池中进行,而不需要从磁盘中读取数据,从而提高了更新操作的性能。

更详细的流程如下图所示:

  1. 加载目标数据所在的整页 page 数据到Buffer Pool 中(或者数据已经在 Buffer Pool 中,这是就不需要再从磁盘中读取了);
  2. 将从 Buffer Pool 中原目标数据(或)写入 undo 日志中;
  3. 更新 Buffer Pool 中数据;
  4. 将更新操作写入 Redo Log Buffer ;
  5. 准备提交事务,将redo 日志写入磁盘;
  6. 准备提交事务,将binlog 日志写入磁盘;
  7. 提交事务,将commit 标记写入redo 日志中,保证redo 和binlog 日志的一致性。
  8. Buffer Pool 数据随机写入磁盘,也是整页page 数据写入。 至此,整个更新流程完结。

小结

MySQL 的这套缓存机制看着十分复杂,但是能确保MySQL 每个更新操作都是先更新内存,再顺序写入日志文件,能保证MySQL 在各种异常情况下的数据一致性。

  1. 减少磁盘 I/O 操作:Buffer Pool 缓存了数据页,使得数据可以在内存中进行修改和访问,而不必每次都从磁盘读取。这样可以显著减少磁盘 I/O 操作的次数,提高了数据库的性能。
  2. 加快数据访问速度:由于数据页存储在内存中,访问这些数据页比从磁盘中读取数据要快得多。这样可以加快查询和更新操作的速度,提高了数据库的响应性能。
  3. 提高并发处理能力:Buffer Pool 可以同时缓存多个数据页,这意味着多个并发的查询和更新操作可以同时在内存中进行,而不会因为磁盘 I/O 的限制而被阻塞。这有助于提高数据库的并发处理能力,使得系统能够更好地支持高并发的访问。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • MySQL 的缓存机制
    • 查询缓存
      • Buffer Pool缓冲池
      • 小结
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档