Buffer pool--mysql详解(八)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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保存点。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
121
分享
相关文章
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
70 4
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
94 16
图解MySQL【日志】——Buffer Pool
Buffer Pool 是数据库管理系统(DBMS)中用于缓存磁盘数据页的内存区域,主要包含数据页、索引页、undo 页等。它通过减少磁盘 I/O 提升性能,特别是在处理大型数据库时效果显著。查询时,整个数据页而非单条记录会被加载到 Buffer Pool 中,以提高访问效率。
77 0
图解MySQL【日志】——Buffer Pool
MySQL进阶突击系列(08)年少不知BufferPool核心原理 | 大哥送来三条大金链子LRU、Flush、Free
本文深入探讨了MySQL中InnoDB存储引擎的buffer pool机制,包括其内存管理、数据页加载与淘汰策略。Buffer pool作为高并发读写的缓存池,默认大小为128MB,通过free链表、flush链表和LRU链表管理数据页的存取与淘汰。其中,改进型LRU链表采用冷热分离设计,确保预读机制不会影响缓存公平性。文章还介绍了缓存数据页的刷盘机制及参数配置,帮助读者理解buffer pool的运行原理,优化MySQL性能。
MySQL原理简介—4.深入分析Buffer Pool
本文介绍了MySQL的Buffer Pool机制,包括其作用、配置方法及内部结构。Buffer Pool是MySQL用于缓存磁盘数据页的关键组件,能显著提升数据库读写性能。默认大小为128MB,可根据服务器配置调整(如32GB内存可设为2GB)。它通过free链表管理空闲缓存页,flush链表记录脏页,并用LRU链表区分冷热数据以优化淘汰策略。此外,还探讨了多Buffer Pool实例、chunk动态调整等优化并发性能的方法,以及如何通过`show engine innodb status`查看Buffer Pool状态。关键词:MySQL内存数据更新机制。
MySQL并发支撑底层Buffer Pool机制详解
【10月更文挑战第18天】在数据库系统中,磁盘IO操作是性能瓶颈之一。为了提高数据访问速度,减少磁盘IO,MySQL引入了缓存机制。其中,Buffer Pool是InnoDB存储引擎中用于缓存磁盘上的数据页和索引页的内存区域。通过缓存频繁访问的数据和索引,Buffer Pool能够显著提高数据库的读写性能。
453 2
深度解密 MySQL 的 Buffer Pool
深度解密 MySQL 的 Buffer Pool
187 0
(十二)MySQL之内存篇:深入探寻数据库内存与Buffer Pool的奥妙!
MySQL是基于磁盘工作的,这句几乎刻在了每个后端程序员DNA里,但它真的对吗?其实答案并不能盖棺定论,你可以说MySQL是基于磁盘实现的,这点我十分认同,但要说MySQL是基于磁盘工作,这点我则抱否定的态度,至于为什么呢?这跟咱们本章的主角:Buffer Pool有关,Buffer Pool是什么?还记得咱们在《MySQL架构篇》中聊到的缓存和缓冲区么,其中所提到的写入缓冲区就位于Buffer Pool中。
919 1
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
188 3

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等