一 、上期回忆
上次小编讲了一条sql的口头流程,总结如下:
行级锁:对特定记载加锁,防止并发抵触。
数据修正:实践降级记载,记载修正到redo log。
事务控制(ACID):事务提交或回滚,确保数据分歧性和耐久性。
而后小编也说了,InnoDB存储引擎外面不止做了这几件事,所以这期小编来聊聊InnoDB存储引擎做了哪些事件。
二 、innoDB
2.1 一条降级sql语句的口头流程图
2.2 buffer pool(innoDB)
Buffer Pool的定义
Buffer Pool 是一块内存区域,专门用于存储数据库的数据页和索引页,以便数据库在查问或降级数据时,能够间接从内存读取而不是从磁盘读取,极大地提高了查问性能。
Buffer Pool的作用
性能调优倡导
另外 buffer pool既然是将物理磁盘的数据缓存起来,那么它的数据结构,内存不够时的淘汰战略等等,小编将新开一篇mysql innoDB的buffer pool独自解说,有兴味的同窗记的关注后续文章。
2.3 undo log(innoDB)
Undo Log的定义
Undo Log 是用于记载数据在启动修正之前的形态的日志。当一个事务口头时,任何对数据的修正都会在修正前记载到Undo Log中。假设事务由于某些要素失败或被显式回滚,InnoDB会应用Undo Log将数据复原到修正前的形态。
Undo Log的作用
假设一个事务在口头环节中出现失误或许用户显式口头ROLLBACK,InnoDB会应用Undo Log中的记载将数据复原到事务开局前的形态,确保事务的原子性。
Undo Log与Redo Log的区别
2.4 redo log(innoDB)
Redo Log的定义
Redo Log 是一种物理日志,记载的是数据页的修正操作,而不是详细的数据内容。当一个事务对数据库中的数据启动修正时,InnoDB会先将这些修正操作记载到Redo Log中,而后再将这些操作实践写入到磁盘的数据文件中。
Redo Log的作用
在出现系统解体、宕机或配件缺点时,Redo Log能够用于重做未成功的事务,确保数据库在复原时依然可以反映出一切已提交的事务修正。这是事务的耐久性保证。
Redo Log的上班原理
Redo Log的性能调优
0:事务提交时不强迫写日志到磁盘,日志在后盾刷新。这种性能性能高但危险较大。
1:每次事务提交时,Redo Log会立刻刷入磁盘。这是自动的设置,确保了事务的强耐久性。
2:事务提交时,日志写入文件系统缓存中,而不是立刻写入磁盘,解体时或许失落局部数据。
2.5 bin log(mysql)
Binlog的定义
Binlog是MySQL的二进制日志,记载了一切更改数据库数据的语句以及与其关系的事务。它与InnoDB存储引擎的Redo Log不同,Redo Log是用于复原解体后未成功的事务,而Binlog是记载事务日志,用于备份、复原和复制。
Binlog的作用
Binlog可以用作增量备份工具。经过活期备份Binlog文件,MySQL治理员可以将数据库复原到某一时辰之前的形态,而后经过运行Binlog中的修正来复原到解体前的最新形态。与完整备份配合,能够成功更精细的复原环节。
假设数据库因某种要素解体,可以经过Point-in-Time Recovery(PITR,时期点复原),将数据库复原到特定的时期点,或复原到某个已知的稳固形态。
MySQL支持主从复制(Replication),其中主主机上的数据更改会经过Binlog同步到从主机。主主机会将一切更改记载到Binlog中,而后从主机读取并运行这些日志,从而坚持与主主机的数据分歧性。
这种机制使得可以创立冗余的从主机来提高高可用性和读性能,分担查问负载。
三 、总结
InnoDB的Buffer Pool是MySQL用于缓存数据和索引页的内存区域,缩小磁盘I/O,优化读写性能。Undo Log记载事务修正前的数据,用于回滚未提交的事务和成功MVCC。Redo Log则记载已提交事务的修正操作,确保系统解体后能够复原事务,保证数据的耐久性。Buffer Pool优化了内存经常使用,Undo Log保养事务分歧性,Redo Log确保耐久性与数据复原,三者协同保证InnoDB的高效性与牢靠性。