码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Mysql锁机制


    锁机制详解

    锁分类

    从对数据库操作的类型分为读锁和写锁(都属于悲观锁)、意向锁

    乐观锁

    多个事务共同更新操作,是通过版本号区分的,乐观锁不会等待

    悲观锁

    多个事务共同更新操作,需要等待的

    乐观锁适合读操作更多的操作,悲观锁比较适合写更多的操作

    意向锁

    针对表级别的锁,如果事务A已经给表的一行加了意向锁就会有一个标识,事务B想要给这张表做表锁(做表锁的话需要去一行行去看表数据,看每一行是否都没有加锁,都没加锁才能做表锁),这时就可以看到意向锁的标识

    从数据操作的粒度分为  表锁、页锁、行锁

    表锁

    缺点:锁粒度大,发生锁冲突的概率最高,并发度最低,一般用在表迁移上面

    好处:开销小,加锁快、不会出现死锁

    使用方法:lock table  表名称 read

    unlock table 释放表锁

    页锁

    只有BDB存储引擎支持页锁,页锁就是在页page的粒度上进行锁定

    行锁

    每次操作一行数据,

    缺点:开销大,加锁慢、容易出现死锁

    好处:锁粒度最小,发生锁冲突的概率最低,并发度最高

    行锁实际上是针对索引加的锁(在索引对应的索引项上做标记),并且该索引不能失效

    如果条件不用索引来限制,(RR隔离级别)就会升级为表锁针对这个表加锁 , (RC隔离级别)不会

    为什么RR隔离级别 会升级为表锁的原因

    因为在RR隔离级别下,需要解决不可重复读和幻读问题,为了防止扫描过的索引被其他事务修改(不可重复读)或间隙被其他事物插入记录(幻读),从而导致数据不一致,所以Mysql解决方案是把所有扫描过的索引记录和间隙都锁上

    间隙锁-对索引加锁

    间隙锁只有在rr可重复读隔离级别才生效

    目的是:(解决幻读问题:A事务读到了B事务新增的数据)

    表中的数据不是连续的

    1 zhangsan 23

    5 lisi 20

    20 wangwu 40

    (1,5)中间有间隙,是可以被插入2、3、4数据的

    Select * from A where id = 10 for update;

    那么在id为10这个位置加入间隙锁的话,其他的事务是没有办法对(5,20)中的间隙进行操作的

    不过id = 5和id=20是都可以被操作的

    临键锁

    Select * from A where id >3 and id <= 10 for update;

    是行锁与间隙锁的组合

    锁等待分析

    通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况

    show status like ‘innodb_row_lock’

    查看锁等待的详细信息

    show engine innodb status;

    锁优化实践

    1、尽可能让所有数据检索都通过索引来完成,避免无锁引起行锁升级为表锁

    2、合理设计索引,缩小缩的范围

    3、减少检索条件范围,避免间隙锁

    4、控制事务大小,减少锁定资源量和时间长度,涉及事务加锁的sql放在最后执行

    5、用低的事务隔离级别

  • 相关阅读:
    【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
    力合精密装备科技:操纵盒按键说明
    【附源码】Python计算机毕业设计企业信息化平台协同办公管理系统
    MediaCodec_Analyze-3-start
    百战RHCE(第五十一战:运维工程师必会技-Ansible学习6-编写和执行Playbook)
    【PAT乙】2022秋季赛后总结
    北邮22级信通院数电:Verilog-FPGA(4)第三周实验:按键消抖、呼吸灯、流水灯 操作流程&&注意事项
    【TES745D】青翼自研基于复旦微的FMQL45T900全国产化ARM核心模块(100%国产化)
    线性表的应用 —— 双向链表 && 循环链表
    Pointers
  • 原文地址:https://blog.csdn.net/qq_56573709/article/details/133756263
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号