博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql锁与并发
阅读量:5359 次
发布时间:2019-06-15

本文共 886 字,大约阅读时间需要 2 分钟。

  Mysql锁类型:

一、普通锁、读锁(共享锁)、写锁(排他锁);

  1、普通锁

    串行、互斥

  2、读锁

    先加读锁后,可以与其他读锁共存

  3、写锁

    先加写锁,不能与其他锁共存

  

  redo/undo日志

    在开始事务前会先保存一份undo日志,这份日志可以用于其他线程读取,也可用于新事务失败后回滚。

      insert操作,undo日志记录新数据的PK,直接删除,

      update/delete操作,undo日志记录旧数据row,回滚直接恢复。

    redo是当前事务的操作数据,将整个事务的数据放入日志中,然后在事务提交后再输入磁盘,可实现数据分批次统一处理,随机读写优化为顺序读写。

  多版本 MVVC,为了提高并发,于是采用MVVC的方式,通过多版本数据实现数据读写并发;读取的数据就是事务开始前的undo日志。

    多版本快照读就是使用MVVC机制,

      RC 总能读取到最新数据(自己或其他事务已经提交的)

      RR 只能读取事务中第一次读取时读取的数据

  INNODB 会对row新增3个属性,

    1、DB_TRX_ID 6字节,记录最后一次修改它的事务ID,

    2、DB_ROLL_PTR,7字节,记录回滚段undo日志的指针地址,

    3、DB_ROW_ID,6字节,自增长ID。

二、表锁、行锁、区域(间隙)锁;

  表锁是锁整张表,

    1、自增长会产生自增长锁,是一种表锁,它会阻塞其他事务的插入操作

    2、优化1的情况,就出现了插入意向锁,是间隙锁的一种,只要插入位置不冲突,就不会阻塞

  行锁是锁某一行记录,INNODB支持行锁,实现是锁住行的索引;所以如果操作没有命中索引,也就不会使用行锁,而是使用表锁。

  区域(间隙)锁,防止其他事务在间隔中(索引间隔)插入数据,导致不可重复读,所以RC不会有该锁。

    

转载于:https://www.cnblogs.com/souyoulang/p/9765187.html

你可能感兴趣的文章
1027 制作表格
查看>>
Android之Socket通信、List加载更多、Spinner下拉列表
查看>>
面向对象的介绍与特性
查看>>
typing-python用于类型注解的库
查看>>
20189215 2018-2019-2 《密码与安全新技术专题》第13周作业
查看>>
第四周作业
查看>>
一、HTML基础
查看>>
蓝牙进阶之路 (002) - HC-05与HC-06的AT指令的区别(转)
查看>>
mysql的limit经典用法及优化
查看>>
C#后台程序与HTML页面中JS方法互调
查看>>
mysql 同一个表中 字段a 的值赋值到字段b
查看>>
linux系统可执行文件添加环境变量使其跨终端和目录执行
查看>>
Window7通过Anaconda安装Tensorflow
查看>>
antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
查看>>
UNICODE与ANSI的区别
查看>>
nginx 配置实例
查看>>
Flutter - 创建底部导航栏
查看>>
ASP.NET MVC 教程-MVC简介
查看>>
SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 <第八篇>
查看>>
转载:详解SAP TPM解决方案在快速消费品行业中的应用
查看>>