开发者社区> 问答> 正文

锁机制与InnDB锁算法

锁机制与InnDB锁算法

展开
收起
pandacats 2019-12-23 10:36:21 937 0
1 条回答
写回答
取消 提交回答
    1. MyISAM和InnoDB存储引擎使用的锁:

    MyISAM 采用表级锁(table-level locking)。

    InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁

    1. 表级锁和行级锁对比:

    表级锁: Mysql中锁定粒度最大的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁。其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM和 InnoDB引擎都支持表级锁。

    行级锁: Mysql中锁定粒度最小的一种锁,只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。

    1. InnoDB存储引擎的锁的算法有三种:

    Record lock:单个行记录上的锁

    Gap lock:间隙锁,锁定一个范围,不包括记录本身

    Next-key lock:record+gap 锁定一个范围,包含记录本身

    1. 相关知识点:

    innodb对于行的查询使用next-key lock

    Next-locking keying为了解决Phantom Problem幻读问题

    当查询的索引含有唯一属性时,将next-key lock降级为record key

    Gap锁设计的目的是为了阻止多个事务将记录插入到同一范围内,而这会导致幻读问题的产生

    有两种方式显式关闭gap锁:(除了外键约束和唯一性检查外,其余情况仅使用record lock) A. 将事务隔离级别设置为RC B. 将参数innodb_locks_unsafe_for_binlog设置为1

    2019-12-23 10:36:32
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载