• 面试题:InnoDB 行锁


    InnoDB 行锁

    行锁介绍

    行锁特点 :偏向InnoDB 存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

    InnoDB 与 MyISAM 的最大不同有两点:一是支持事务;二是 采用了行级锁。

    InnoDB 的行锁模式

    InnoDB 实现了以下两种类型的行锁。

    • 共享锁(S):又称为读锁,简称S锁,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
    • 排他锁(X):又称为写锁,简称X锁,排他锁就是不能与其他锁并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。

    对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);

    对于普通SELECT语句,InnoDB不会加任何锁;

    可以通过以下语句显示给记录集加共享锁或排他锁 。

    共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
    
    排他锁(X) :SELECT * FROM table_name WHERE ... FOR UPDATE
    
    无索引行锁升级为表锁

    如果不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,实际效果跟表锁一样。

    行级锁定的优点:

    1、当在许多线程中访问不同的行时只存在少量锁定冲突。

    2、回滚时只有少量的更改

    3、可以长时间锁定单一的行。

    行级锁定的缺点:

    1. 比页级或表级锁定占用更多的内存。
    2. 当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁。
    3. 如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多。
    4. 用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定。
  • 相关阅读:
    python3+requests库框架设计03-请求重新封装
    python3+requests库框架设计02-封装日志类
    [patl2-001]紧急救援
    [patl1-046]整除光棍
    latex学习
    matlab基础功能实践
    dll注入及卸载实践
    编译原理大作业暂存
    12.24逆向工程上机作业整理
    [poj1703]Find them, Catch them(种类并查集)
  • 原文地址:https://www.cnblogs.com/dalianpai/p/14166063.html
Copyright © 2020-2023  润新知