八、事务的ACID特性

 

事务的ACID特性

Atomic(原子性)

所有语句作为一个单元全部成功执行或全部取消。不能出现中间状态。

Consistent(一致性)

如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。

Isolated(隔离性)

事务之间不相互影响

Durable(持久性)

事务成功完成后,所做的所有更改都会准确的记录在数据库中。所做的更改不会丢失。

 事务的生命周期

1.开启事务 begin;

2.标准的事务语句

DML:insert update delete

事务的结束

 提交(commit)回滚(rollback)

自动提交机制(autocommit)

在线修改提交参数:set autocommit=0;关闭 set global autocommit=0;vim /etc/my.cnf 

事务隐式提交情况

 begin(再一个会话窗口)

a

b

begin 或者 set autocommin =1

都会执行提交上一个执行的事务

导致提交的非事务语句:

DDL:(ALTER、CREATE、DROP)

DCL:(GRENT、REVOKE、SET)

锁定语句:(LOCK TABLES、UNLOCK TABLES)

事务的ACID如何保证

redo log

重做日志 ib_logfile0~1 50M ,轮询使用

redo log buffer: redo内存区域

ibd:存储 数据行和索引

buffer pool:缓冲区池,数据和索引的缓冲

LSN:日志序列号

磁盘数据页,redo文件,buffer pool,redo buffer

mysql每次数据库启动,都会比较磁盘数据页哥redolog的LSN,必须要求两者LSN一致数据库才能正常启动

WAL:write ahead log日志优先写的方式实现持久化

脏页:内存脏页,内存中发生了修改,没写入到磁盘之前,我们把内存页称之为脏页。

CKPT:checkpoint,检查点,就是将脏页刷写到磁盘的动作

TXID:事务号,INNODB会为每一个事务生成一个事务号,伴随着整个事务

事务日志-- redo重做日志

主要功能:保证D、A、C

1.记录了内存数据页的变化  

2.提供快速的持久化功能

3.csr过程中实现前滚的操作(磁盘数据页和redo日志LSN一致)

undo作用:再ACID特性中,主要保证A的特征,同时对CI也有一定的功效

1.记录了数据修改之前的状态

2.rollback将内存的数据修改恢复到修改之前

3.在CSR中实现未提交数据的回滚操作

4.实现一致性快照,保证MVCC,实现读和写的操作不会互相阻塞

实现了事务之间的隔离功能,INNODB中事项的是行级锁

row-level lock 

gap

next-lock

隔离级别

RU:读未提交,可脏读,一般不议叙出现

RC:读已提交,可能出现幻读,可以防止脏读

RR:可重复读,功能是防止幻读现象,利用的是undo的快照技术+GAP(间隙锁)+next-lock(下键锁)

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

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

在RR模式下,GAP和nextlock进行避免幻读现象,必须索引支持

Innodb存储引擎默认设置

default_storage_engine=innodb

表空间模式:innodb_file_per_table=1

共享表空间文件个数和大小:innodb_data_file_path=ibdata1:512M: ibdata2:512M: autoextend

双一标准的其中一个:innodb_flush_log_at_trx_commit=1

最高安全模式

innodb_flush_log_at_trx_commit=1

innodb_flush_method=O_DIRECT 

最高性能模式

innodb_flush_log_at_trx_commit=0

innodb_flush_method=fsync

脏页刷写策略

innodb_max_dirty_pages_pct=75 

 

 

 

 

posted @ 2023-05-16 18:09  good-good-luck  阅读(84)  评论(0)    收藏  举报