mvcc机制的初识

「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

死锁通常是对于资源占用之后,没有及时的释放,导致了资源一直被锁定的状态。

1.解除死锁的方法:

本质上是将当前的进程从死锁的状态解脱出来;

在实际工作用,主要是用于 银行家算法资源分配法这两种方式来避免死锁。

2.MySQL的死锁问题:

在Mysql,默认的存储引擎是InnoDB,其中这个引擎是会产生死锁的问题,这个是行锁级别的问题,

其中这个InnoDB存储引擎,---->等待图;

如果发生死锁,等待图会如何做呢?

在运行过程中,等待图的方式会检测死锁,如果发生死锁,就会自动的回滚一个事务。

一般是MySQL的中,可以这样做避免死锁?

  • 索引避免无效索引,导致行锁升级为表锁

  • 设计索引,尽量缩小锁的范围

  • 控制特定事务的大小,加锁操作在事务的最后执行,尤其是写操作;

  • 使用低级别的事务隔离机制

InnoDB中Mvcc原理

其中这个数据库中的MVCC的机制主要用于并发操作下的数据更新以及CRUD。

本质上是,MVCC机制是对于数据库中数据某个时间点的数据快照

也就是说,同一个读的操作,按照相同的条件查询数据,在当前情况下,查到的结果都是一样的,

但是从另外一个角度看,不同事务,在同样时间中,看到的数据表中的数据也可能是不同的。

MVCC的组成机制

Mvcc的机制是通过每行数据表记录后面两个具体的列(隐藏)来实现的;

其中一列会保存行的创建本号,另一个是保存行的过期版本号;

用于对于每次事务开始之前,和每行之前记录的版本号进行对比。

一般是新的事务,就会递增这个版本号

Guess you like

Origin juejin.im/post/7031171114793435172