【笔记】Mysql 锁与事务
来源:互联网 发布:校园网络需求规格说明 编辑:程序博客网 时间:2024/05/18 13:12
不可重复读:一个事务内多次读取同一数据集合,由于其它事务的影响,这个事务内俩次读到的数据不一样。
不可重复读的示例
在InnoDB存储引擎中,使用Next-Key Lock算法来避免不可重复读的问题。在Mysql官方文档中将不可重复读的问题定义为Phantom Problem,即幻像问题。
在Next-Key Lock算法下,对于索引的扫描,不仅是锁住了扫描到的索引,而且还锁住这些索引覆盖的范围(gap)。因此在这个范围内不允许插入,避免了不可重复度的问题。
InnoDB存储引擎的默认事务隔离级别是READ REPEATABLE是能避免不可重复读的现象。
show engine innodb status 及
innodb_trx、innodb_locks、innodb_lock_waits
在默认的事务隔离级别下(REPEATABLE READ),InnoDB存储引擎采用Next-Key Locking机制来避免Phantom Problem(幻像问题),Phantom Problem是指在同一事务下,连续执行俩次同样的SQL语句可能导致不同的结果,
第二次的SQL语句可能会返回之前不存在的行。违反了事务的隔离性。
脏页:在缓冲池中已经被修改的页,但是还没有刷新到磁盘中。
脏数据:事务对缓冲池中行记录的修改,并且还没有被commit。
不可重复读:一个事务内多次读取同一数据集合,由于其它事务的影响,这个事务内俩次读到的数据不一样。
在InnoDB存储引擎中,使用Next-Key Lock算法来避免不可重复读的问题。在Mysql官方文档中将不可重复读的问题定义为Phantom Problem,
即幻像问题。
在Next-Key Lock算法下,对于索引的扫描,不仅是锁住了扫描到的索引,而且还锁住这些索引覆盖的范围(gap)。因此在这个范围内不允许
插入,避免了不可重复度的问题。
InnoDB存储引擎的默认事务隔离级别是READ REPEATABLE是能避免不可重复读的现象。
丢失更新是另一个锁导致的问题,简单来说就是一个事务的更新操作会被另一个事务的更新操作所覆盖,从而导致数据的不一致。
1)事务T1将行记录r更新为v1。
2)与此同时,事务T2将行记录r更新为v2。
3)事务T1提交
4)事务T2提交
innodb_lock_wait_timeout用来控制等待的时间(默认50秒)
innodb_rollback_on_timeout用来设定是否在等待超时时对进行中的事务进行回滚操作(默认是OFF,代表不回滚)。
参数innodb_lock_wait_timeout是动态的,可以在MySQL数据库运行时修改。
SET @@innodb_lock_wait_timmeout=60;
而innodb_rollback_on_timeout是静态的,不可在启动时进行修改。
死锁
解决死锁问题最简单的一种方法是超时。
当前数据库还普遍采用wait-for graph(等待图)的方式来进行死锁检测。
这是一种更为主动的死锁检测方式。wait-for graph要求数据库保存以下俩种信息:
锁的信息链表
事务等待链表
在每个事务请求锁并发生等待时都会判断是否存在回路,若存在则有死锁,通常会选择回滚
undo量最小的事务。
事务发生死锁的概率和以下几点因素有关:
系统中事务的数量,越多概率越大。
每个事务操作的数量(r),r越多,死锁概率越大。
操作数据的集合R,越小死锁概率越大。
- 【笔记】Mysql 锁与事务
- MySQL笔记-锁、事务与并发控制
- mysql事务与锁
- MySql 事务与锁
- MySQL锁与事务
- MySql学习笔记——锁与事务机制
- MySqL 事务与锁的深入学习笔记
- MySQL中的事务与锁
- MySQL中的事务与锁
- MySQL 事务与锁机制
- 初探Mysql事务与锁
- mysql 笔记:事务
- mysql事务 个人笔记
- mysql 事务学习笔记
- Mysql笔记-事务
- MySql事务笔记
- MySQL InnoDB之事务与锁详解
- MySQL InnoDB之事务与锁详解
- oracle执行update语句卡住不动
- CSAPP: Proxy lab
- swift 函数
- SCCI
- GIT开源优秀项目
- 【笔记】Mysql 锁与事务
- Android Studio如何取消与SVN的关联
- java后台返回json数据前台接收并解析(json)
- XML与HTML的区别
- java中抽象类跟接口的区别
- loaded the "xxx" nib but the view outlet was not set 错误的解决办法。
- 如何在一个项目中是OC和Swift开发
- asp.net解决高并发的方案
- junit测试方法