MVCC 的机制初识
死锁通常是对于资源占用之后,没有及时的释放,导致了资源一直被锁定的状态。
1.解除死锁的方法:
本质上是将当前的进程从死锁的状态解脱出来;
在实际工作用,主要是用于 银行家算法和资源分配法这两种方式来避免死锁。
2.MySQL 的死锁问题:
在 Mysql,默认的存储引擎是 InnoDB,其中这个引擎是会产生死锁的问题,这个是行锁级别的问题,
其中这个 InnoDB 存储引擎,---->等待图;
如果发生死锁,等待图会如何做呢?
在运行过程中,等待图的方式会检测死锁,如果发生死锁,就会自动的回滚一个事务。
一般是 MySQL 的中,可以这样做避免死锁?
索引避免无效索引,导致行锁升级为表锁
设计索引,尽量缩小锁的范围
控制特定事务的大小,加锁操作在事务的最后执行,尤其是写操作;
使用低级别的事务隔离机制
InnoDB 中 Mvcc 原理
其中这个数据库中的 MVCC 的机制主要用于并发操作下的数据更新以及 CRUD。
本质上是,MVCC 机制是对于数据库中数据某个时间点的数据快照,
也就是说,同一个读的操作,按照相同的条件查询数据,在当前情况下,查到的结果都是一样的,
但是从另外一个角度看,不同事务,在同样时间中,看到的数据表中的数据也可能是不同的。
MVCC 的组成机制
Mvcc 的机制是通过每行数据表记录后面两个具体的列(隐藏)来实现的;
其中一列会保存行的创建本号,另一个是保存行的过期版本号;
用于对于每次事务开始之前,和每行之前记录的版本号进行对比。
一般是新的事务,就会递增这个版本号
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/81cefb34dc0625b8d0ba9f606】。文章转载请联系作者。
评论