2020-02-29事物ACID

redo 重做日志

作用:主要功能 保证 Durable(持久性)

记录内存数据页的变化

为了保证事物的持久性 保证commit 完成前会redo将内存的DML语句先写入磁盘    而数据是当内存达到百分75才开始写入磁盘

lsn:


当事物提交完成后   突然断电   然后重启数据库会对比LSN  发现redo log 和idb文件  如果不一致就会重新将数据写入磁盘

保证事物的durable



undo 回滚日志:

TXID:事物id号  commit之后  redo和undo会打标记提交了

作用:在acid 主要保证automic的特性  同时对consisdent isolate有一定的作用

记录修改之前的状态

当事物还没有提交的时候  进行rollback 操作  undo会判断事物id是否提交  去内存还原数据

还有一种情况  还没提交事物  redo顺带把日志写入磁盘  断电重启后先前滚 构造脏页 发现事物id没有提交 undo在回滚还原数据库



“锁”顾名思义就是锁定的意思。

“锁”的作用是什么?

上一个事物没有提交   一般会锁表  就是不能并发

在事务ACID过程中

,“锁”和“隔离级别”一起来实现“I”隔离性和"C"一致性(redo也有参与)

悲观锁:行级锁定(行锁)谁先操作某个数据行

,就会持有<这行>的(X)锁.乐观锁:没有锁

隔离级别

transaction_isolation 隔离级别(参数)

transaction_isolation=read-uncommitted    RU:读未提交,可脏读,一般部议叙出现

transaction_isolation=read-committed       RC:读已提交,可能出现幻读,可以防止脏读

transaction_isolation= REPEATABLE-READ |  RR:可重复读,功能是防止"幻读"现象,利用的是undo的快照技术+GAP(间隙锁)+NextLock(下键锁)

SR:可串行化,可以防止死锁,但是并发事务性能较差

什么叫做幻读?

在更新操作之前  commit了一个insert操作  出现了一些没有更新的数据

补充:在RC级别下,可以减轻GAP+NextLock锁的问题,但是会出现幻读现象,一般在为了读一致性会在正常select后添加forupdate语句.但是,请记住执行完一定要commit 否则容易出现所等待比较严重.

[world]>select*fromcitywhereid=999forupdate;

[world]>commit;

最高安全模式

innodb_flush_log_at_trx_commit=1

Innodb_flush_method=O_DIRECT

最高性能:

innodb_flush_log_at_trx_commit=0

Innodb_flush_method=fsync

你可能感兴趣的:(2020-02-29事物ACID)