mysql事务


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ACID

事务的四要素:ACID,自行百度。隔离性是由锁来控制的,可以参考还有。原子性和持久性是由redo log来实现的,可以参考。一致性由undo log来实现。redo 和 undo其实都是一种恢复操作,redo恢复事务修改的页操作,通常是物理日志,记录的是页的物理修改操作。undo回滚记录到某个特定的行,undo是逻辑日志,

1.redo log

1.分类

重做日志由两部分组成:

  1. 重做日志缓冲
  2. 重做日志文件

2.如何保证持久性

Innodb通过Force Log at Commit 机制来实现,即在事务提交时,必须先将该事务所有的日志写入到重做日志文件进行持久化,待事务的提交操作完成才算完成。那么,每次都要写磁盘不会很慢影响事务的提交性能吗?这个不会,因为redo log是顺序写的,是很快的。而由于在写入磁盘的过程中,其实都会先将内存中的数据写入到文件系统的缓存,一旦计算机宕机,则会丢失数据,因此为了保证不丢失数据,Innodb都会在事务提交时,调用一次fsync操作,将文件系统中的缓存刷新进磁盘,而fsync的效率取决于磁盘的性能,因此,磁盘的性能就决定了事务提交的性能。

3.和二进制日志的对比

二进制日志由msyql产生,和存储引擎无关,redo 和 undo 由innodb 产生。二进制日志主要作用是point-in-time恢复和主从复制环境搭建。
mysql中任何对于数据的更改都会产生二进制日志。二进制日志是逻辑日志,记录的就是 insert,update,delete语句。且只会在事务提交时,产生一次。而redo log会时刻产生,即便事务没有提交,可以看下master线程的工作方式。

4.恢复

innodb在mysql每次启动时,都会进行数据恢复。redo log中和页中记录的都有LSN,其实就是个序列号标识,当宕机时,checkpoint记录的LSN=1000,下次恢复时,就恢复大于1000之后的数据即可。
在这里插入图片描述

2.undo log

2.1 作用

undo log用来帮助回滚和MVCC的实现。mvcc的实现:当用户读取一条数据时,数据被其他事务占用,则当前事务可以通过undo log读取之前的行版本信息。

2.2 是什么

undo 数据存放在undo segment。undo 存放的是逻辑日志,例如原来事务是插入,undo就是一个相反的删除操作。undo log也要持久化,因此总伴随redo log 产生着。

2.3 何时被删除

事务提交后不能马上删除undo log,因为可能有其他事务需要通过undo log 来获取之前版本的数据,因此,是否删除由purge 线程来处理。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值