八、事务的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
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号