mysql复习四-事务

事务的特性:

事务具有以下4个属性,通常简称为事务的ACID属性。

原子性(Atomicity) :当前事务的操作要么同时成功,要么同时失败。原子性由 undo log日志来实现。

一致性(Consistent) :比如A有100,B为0,A给B转100,在各个事务中,A和B总和永远为100,这就是一致性,使用事务的最终目的,由其它3个特性以及业务代码正确逻 辑来实现。

隔离性(Isolation) :在事务并发执行时,他们内部的操作不能互相干扰。隔离性由 MySQL的各种锁以及MVCC机制来实现。

持久性(Durable) :一旦提交了事务,它对数据库的改变就应该是永久性的。持久 性由redo log日志来实现,MYSQ里面redo log日志,这个日子会记录这个页面上做了什么修改,就算突然断电,也可以从redo log恢复,redolog是顺序写的,写入速度快,这个页面做了什么修改,文件体积下,恢复速度快

事物的隔离级别:

事务的隔离级别越高,新能消耗越大

读未提交:会发生脏读,不可重复读,幻读等

读已提交:会发生不可重复读和幻读,orcle就是这个级别

可重复读:mysql在这个级别,时通过MVCC版本控制实现的,在读的这一刻,mysql会生成一个快照,在这个事务里面的所有读,都市读快照内容,除非在这个事务里面发生了更新,删除,新增,此时在针对更新操作的数据读,会读到更新的数据,所以,这就导致了还会存在部分幻读现象

串行化:解决了上述所有问题,对一个数据的读和写不能同时执行,只能一个提交了,在让下个事务操作,实际上应用很少,不能支持并发操作

MVCC多版本不并发控制机制,其中多版本是指undolog的日志链,并发时指同时的读写操作

问一个问题;查询方法需要使用事务吗

答,要看是否有多个查询,比如在大公司做报表,需要多个sql去查,那同一时间就很重要了,用事务能解决这个问题,这个问题主要看业务要求,对时间维度要求高用RR,和查找结果集要求

事务的优化

大事务的影响

1、并发情况下,数据库连接池容易被撑爆,事务没有终止,链接就不会断

2、锁定太多的数据,造成大量的阻塞和锁超时

3、执行时间长,容易造成主从延迟

4、回滚所需要的时间比较长,因为undo文件需要每一步都重新执行一遍

5、undo log膨胀,undo在事务提交以后,过一段时间其实会清除

6、容易导致死锁

事务优化 

1、将查询等数据准备操作放到事务外 事务中避免远程调用,远程调用要设置超时,防止事务等待时间太久

2、事务中避免一次性处理太多数据,可以拆分成多个事务分次处理

3、更新等涉及加锁的操作尽可能放在事务靠后的位置,比如新增和更新,新增放在后面,因为更新是针对已有数据,就存在其他数事务也要操作的可能性,这时就算更新完,还要等插入完的操作,其他事务才能操作,增加了等待时间

4、能异步处理的尽量异步处理,比如远程调用,但也要设计超时

5、应用侧(业务代码)保证数据一致性,非事务执行 如果对应用性能非常高,那就尽量不用事务,不推荐,除非业务非常简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值