Buffer pool--mysql详解(八)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Buffer pool--mysql详解(八)

上篇文章说了,show warning可以看到mysql优化器的结果,执行计划的详解,select type的种类,有派生,物化,子查询,连接查询等。


Mysql在访问数据的时候,并不是每次从磁盘的系统表空间查询,而是会缓存到内存,这个内存我们就称为buffer pool,可以通过innoDB buffer pool size来设置,默认是128m


Buffer pool如何管理内存里的页呢,于是有一些表空间编号,页号,缓存页,lsn值等。


Free链表:当mysql服务器启动的时候,就会申请buffer pool,当系统还没有数据进入buffer pool的时候,这时候都是free 链表,当有数据进入的时候,会从free链表取空闲的缓存页。


Flush链表:当数据开始修改到内存的时候,发现内存和磁盘书就不一致,这时候总不能每次修改一点就刷新到磁盘,于是有了flush链表,又称为脏页,当系统正常关机的时候会刷新到磁盘,系统空闲的时候也会刷新到磁盘,当buffer pool内存不足的时候也会把数据刷新到磁盘。

Lru链表:当内存数据越来越多,我们需要把不需要的数据从缓存移除,这时候lru链表就出现了。


于是lru链表为了提高缓存命中率,使用频率高的数据就称为热数据,young区域,使用频率低的数据则是冷区域,old区域。可以通过innodb_old_blocks_pct参数来设置两个区域的占比,默认是37innodb_old_blocks_time默认是1000ms,通过这两个参数来解决mysql的预读和全盘扫描。Mysql第一次读取数据线放入old区域,后面会先移除,1000ms之内再次访问,才会把数据移动到young区域。


所以总是那个所述,刷新数据到磁盘会通过lru链表和flush链表来实现。


Buffer pool的数量可以通过innodb_buffer_pool_instances来设置大小,并不是越多越好,当内存大小小于1g的时候默认是一个,设置是无效的。


我们可以通过show engine innodb status来查看buffer pool 的状态。


事务简介(ACID

原子性(Atomicity):保证在一个事务里的操作要么全部执行成功,要么全部执行失败。

隔离性(Isolation):当两个修改同时操作数据库的时候,保证不会交叉影响,分开读取和修改来保证隔离性。


一致性(Consistency):一个事务作为一个原子在事务里独立运行,直到事务结束,也必须再次一致,一致的条件不限于数据库主键约束和check约束,还需要业务代码来实现,新增和扣减必须是一致的。


持久化(Durability):当数据发生改变的时候,会记录到mysql数据库磁盘上,这个过程就叫做持久化。


上面就是事务的简介,当满足上述条件时候,就叫做事务(transaction)。


在事务里大致有五个状态:活动的(active)、部分提交的(partially commited')、失败的(failed)、中止的(aborted)、提交的(committed)。当事务发生错误失败后,则会回滚之后进入中止状态。


事务不光能全部回滚,还能用savapoint 来保存保存点,后面rollback to保存点。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 缓存 关系型数据库
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
660 0
|
26天前
|
缓存 关系型数据库 MySQL
MySQL并发支撑底层Buffer Pool机制详解
【10月更文挑战第18天】在数据库系统中,磁盘IO操作是性能瓶颈之一。为了提高数据访问速度,减少磁盘IO,MySQL引入了缓存机制。其中,Buffer Pool是InnoDB存储引擎中用于缓存磁盘上的数据页和索引页的内存区域。通过缓存频繁访问的数据和索引,Buffer Pool能够显著提高数据库的读写性能。
74 2
|
2月前
|
存储 缓存 关系型数据库
深度解密 MySQL 的 Buffer Pool
深度解密 MySQL 的 Buffer Pool
35 0
|
4月前
|
SQL 缓存 关系型数据库
(十二)MySQL之内存篇:深入探寻数据库内存与Buffer Pool的奥妙!
MySQL是基于磁盘工作的,这句几乎刻在了每个后端程序员DNA里,但它真的对吗?其实答案并不能盖棺定论,你可以说MySQL是基于磁盘实现的,这点我十分认同,但要说MySQL是基于磁盘工作,这点我则抱否定的态度,至于为什么呢?这跟咱们本章的主角:Buffer Pool有关,Buffer Pool是什么?还记得咱们在《MySQL架构篇》中聊到的缓存和缓冲区么,其中所提到的写入缓冲区就位于Buffer Pool中。
308 1
|
5月前
|
缓存 关系型数据库 MySQL
MySQL Buffer Pool 解析:原理、组成及作用
MySQL Buffer Pool 解析:原理、组成及作用
|
5月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
97 3
|
6月前
|
缓存 关系型数据库 MySQL
MySQL高效运行的秘密:BufferPool缓存机制深度剖析!
MySQL高效运行的秘密:BufferPool缓存机制深度剖析!
179 0
MySQL高效运行的秘密:BufferPool缓存机制深度剖析!
|
存储 SQL 缓存
【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用
【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用
138 0
|
6月前
|
SQL 缓存 关系型数据库
MySQL(三)SQL优化、Buffer pool、Change buffer
MySQL(三)SQL优化、Buffer pool、Change buffer
93 0
|
6月前
|
存储 算法 关系型数据库
MySQL之深入InnoDB存储引擎——Buffer Pool
InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。在数据库系统中,由于CPU速度与磁盘速度之间的鸿沟,基于磁盘的数据库系统通常使用缓冲池技术来提高数据库的整体性能。在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,这个过程称为将页“FIX”在缓冲池中,在下一次读取相同的页时,首先判断该页是否存在缓冲池中,如果存在则被命中,直接读取,否则读取磁盘上的页。