Buffer pool--mysql详解(八)

简介: 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保存点。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 缓存 关系型数据库
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
1338 0
|
缓存 关系型数据库 MySQL
MySQL并发支撑底层Buffer Pool机制详解
【10月更文挑战第18天】在数据库系统中,磁盘IO操作是性能瓶颈之一。为了提高数据访问速度,减少磁盘IO,MySQL引入了缓存机制。其中,Buffer Pool是InnoDB存储引擎中用于缓存磁盘上的数据页和索引页的内存区域。通过缓存频繁访问的数据和索引,Buffer Pool能够显著提高数据库的读写性能。
565 2
|
9月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
219 16
|
9月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
192 4
|
10月前
|
缓存 关系型数据库 MySQL
图解MySQL【日志】——Buffer Pool
Buffer Pool 是数据库管理系统(DBMS)中用于缓存磁盘数据页的内存区域,主要包含数据页、索引页、undo 页等。它通过减少磁盘 I/O 提升性能,特别是在处理大型数据库时效果显著。查询时,整个数据页而非单条记录会被加载到 Buffer Pool 中,以提高访问效率。
205 0
图解MySQL【日志】——Buffer Pool
|
10月前
|
存储 缓存 关系型数据库
MySQL进阶突击系列(08)年少不知BufferPool核心原理 | 大哥送来三条大金链子LRU、Flush、Free
本文深入探讨了MySQL中InnoDB存储引擎的buffer pool机制,包括其内存管理、数据页加载与淘汰策略。Buffer pool作为高并发读写的缓存池,默认大小为128MB,通过free链表、flush链表和LRU链表管理数据页的存取与淘汰。其中,改进型LRU链表采用冷热分离设计,确保预读机制不会影响缓存公平性。文章还介绍了缓存数据页的刷盘机制及参数配置,帮助读者理解buffer pool的运行原理,优化MySQL性能。
|
存储 缓存 关系型数据库
深度解密 MySQL 的 Buffer Pool
深度解密 MySQL 的 Buffer Pool
263 0
|
SQL 缓存 关系型数据库
(十二)MySQL之内存篇:深入探寻数据库内存与Buffer Pool的奥妙!
MySQL是基于磁盘工作的,这句几乎刻在了每个后端程序员DNA里,但它真的对吗?其实答案并不能盖棺定论,你可以说MySQL是基于磁盘实现的,这点我十分认同,但要说MySQL是基于磁盘工作,这点我则抱否定的态度,至于为什么呢?这跟咱们本章的主角:Buffer Pool有关,Buffer Pool是什么?还记得咱们在《MySQL架构篇》中聊到的缓存和缓冲区么,其中所提到的写入缓冲区就位于Buffer Pool中。
1314 1
|
存储 SQL 缓存
【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用
【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用
401 0
|
缓存 关系型数据库 MySQL
MySQL Buffer Pool 解析:原理、组成及作用
MySQL Buffer Pool 解析:原理、组成及作用

推荐镜像

更多