前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、ACID
事务的四要素:ACID,自行百度。隔离性是由锁来控制的,可以参考它还有它。原子性和持久性是由redo log来实现的,可以参考。一致性由undo log来实现。redo 和 undo其实都是一种恢复操作,redo恢复事务修改的页操作,通常是物理日志,记录的是页的物理修改操作。undo回滚记录到某个特定的行,undo是逻辑日志,
1.redo log
1.分类
重做日志由两部分组成:
- 重做日志缓冲
- 重做日志文件
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提供了大量能使我们快速便捷地处理数据的函数和方法。