数据库事务-持久性原理

  • 持久性(Durability): 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。(持久性由redo log日志来保证)

以一个跟新语句执行流为例:

在存储引擎执行时,会先在缓存池中检测的数据是否在缓存池中,如果在可以直接修改,不在就加载数据所在的磁盘数据文件,把数据加载到缓存池中,在缓存池中修改,修改成功后就会把修改的数据加载到redo日志文件中,而在缓存池中修改后的数据,数据库后台会有异步的IO线程,把数据随机写入磁盘。

如果缓存池中的数据丢失,就可以通过redo日志文件追回。(如当数据库服务器宕机,服务器重启后会把redo日志中的数据加载到缓存池中,这样就可以保证数据不会丢失)

 MySQL引入redo 日志,Buffer Pool内存写完了,然后会写一份redo 日志,这份redo日志记载着这次在摸个页上做了什么修改。

即便MySQL在中途挂了,我们还可以根据redo 日志来对数据进行恢复

redo日志是顺序写的,写入速度很快,并且记录的是物理修改(那一页做了什么修改)文件体积很小,恢复速度也快。

为什么要增加写入redo日志,不直接写入数据的磁盘文件中?

因为数据写入redo日志是顺序写,就是在日志文件的后面追加信息,而数据写入磁盘文件是随机写,顺序写的效率要远大于随机写。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库系统原理 事务 概念 事务是逻辑上的一组操作,要么都执行,要么都不执行。 特性 ACID 1. 原子性(Atomicity) 事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。 回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。 2. 一致性(Consistency) 数据库事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。 3. 隔离性(Isolation) 一个事务所做的修改在最终提交以前,对其它事务是不可见的。 4. 持久性(Durability) 一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。 可以通过数据库备份和恢复来实现,在系统发生崩溃时,使用备份的数据库进行数据恢复。 并发一致性问题 在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。 丢失修改 T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。 java-数据库系统原理全文共3页,当前为第1页。 java-数据库系统原理全文共3页,当前为第1页。 脏读 T1 修改一个数据,T2 随后读取这个数据。如果 T1 撤销了这次修改,那么 T2 读取的数据是脏数据。 不可重复读 T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。 幻影读 T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。 事务隔离级别 产生并发不一致性问题主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过封锁(加锁)来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务的隔离级别,让用户以一种更轻松的方式处理并发一致性问题。 事务隔离级别如下: 隔离级别 说明 未提交读(READ UNCOMMITTED) 事务中的修改,即使没有提交,对其它事务也是可见的。 提交读(READ COMMITTED) 一个事务只能读取已经提交的事务所做的修改。 可重复读(REPEATABLE READ) 保证在同一个事务中多次读取同样数据的结果是一样的。 可串行化(SERIALIZABLE) 强制事务串行执行。 java-数据库系统原理全文共3页,当前为第2页。事务并发访问引起的问题及使用哪种事务隔离级别避免: java-数据库系统原理全文共3页,当前为第2页。 并发访问问题 事务隔离级别 丢失修改 MySQL 所有事务隔离级别在数据库层面上均可避免 脏读 READ-COMMITTED 事务隔离级别以上可避免 不可重复读 REPEATABLE-READ 事务隔离级别以上可避免 幻读 SERIALIZABLE 事务隔离级别以上可避免 即: 事务隔离级别 并发问题 丢失修改 脏读 不可重复读 幻读 未提交读 (READ UNCOMMITTED) 避免 发生 发生 发生 提交读 (READ COMMITTED) 避免 避免 发生 发生 可重复读 (REPEATABLE READ) 避免 避免 避免 发生 可串行化 (SERIALIZABLE) 避免 避免 避免 避免 java-数据库系统原理全文共3页,当前为第3页。 java-数据库系统原理全文共3页,当前为第3页。 java-数据库系统原理
事务是指一组逻辑上的操作,这些操作要么全部执行成功,要么全部失败回滚,从而保证数据库的一致性和完整性。事务分析数据库原理数据库管理系统(DBMS)的关键组成部分,其重要性不言而喻。以下是事务分析数据库原理的一些核心知识点: 1. 事务的ACID特性:事务必须满足ACID特性,即原子性、一致性、隔离性和持久性。 2. 事务的隔离级别:事务的隔离级别是指多个并发执行的事务之间可以看到彼此的数据变化的程度。常见的隔离级别包括:读未提交、读已提交、可重复读和串行化。 3. 锁定机制:为了保证多个事务之间的数据隔离性,数据库采用锁定机制来避免并发访问造成的数据冲突。常见的锁定机制包括悲观锁和乐观锁。 4. 日志机制:为了保证事务持久性数据库采用日志机制来记录所有对数据库的修改操作,以便在需要的时候进行回滚或恢复操作。 5. 事务的实现方式:事务可以通过编程语言的事务处理机制实现,也可以通过存储过程、触发器等数据库内置机制实现。 6. 分布式事务:在分布式环境中,多个数据库之间的事务需要协调和同步,这就需要采用分布式事务管理机制来保证数据的一致性和完整性。 以上是事务分析数据库原理的一些核心知识点,掌握了这些知识点,可以更好地理解和应用数据库管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值