MySQL事务相关

意向锁:innodb中存在一个意向锁,比如一个事务正在对某一行加锁。另一个事务需要对整个表加表锁,为了防止第二个事务逐行去查找行级锁影响效率。第一个事务在获取行级锁之前,需要获取全表的意向锁。第二个事务只要知道第一个事务获取了意向锁,则无法获取表锁。意向锁只会与表锁冲突而不会与行锁冲突。

美团关于锁的文章
MVCC详细实现,关于高低水位

  • redolog:记录的是物理变化,用于实现ACID的D(durability)持久性,每次更新数据库先实现redolog,然后再刷新到磁盘,如果断电可以从redolog恢复,redolog是顺序写速度比直接改磁盘数据块
  • binlog:mysql自带的,不区分引擎,主要用于主从复制,记录的是逻辑变化,可以理解为每次的插入删除更新的sql语句,主服务器更新数据后,从服务器定期从主服务器的binlog中更新数据
  • undolog:记录的是每次更新语句的反向语句,也就是可以抵消这次更新的语句。主要用于回滚操作,也就是ACID的A实现,并且undolog还可以实现mysql的MVCC多版本并发控制的快照读操作。

MySQL的悲观锁与乐观锁

  • 多版本并发控制(MVCC)是一种用来解决读-写冲突的无锁并发控制,也就是为事务分配单向增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照。 这样在读操作不用阻塞写操作,写操作不用阻塞读操作的同时,避免了脏读和不可重复读
  • 乐观并发控制(OCC)是一种用来解决写-写冲突的无锁并发控制,认为事务间争用没有那么多,所以先进行修改,在提交事务前,检查一下事务开始后,有没有新提交改变,如果没有就提交,如果有就放弃并重试。乐观并发控制类似自选锁。乐观并发控制适用于低数据争用,写冲突比较少的环境。
全部评论

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务