美文网首页
【重学MySQL打卡行动】Day5 MySQL的全局锁、表锁、行

【重学MySQL打卡行动】Day5 MySQL的全局锁、表锁、行

作者: 花生无翼 | 来源:发表于2020-07-07 22:36 被阅读0次

学习内容:根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。

1.全局锁就是对整个数据库实例加锁,典型使用场景是做全库逻辑备份。
全局锁的典型使用场景是,做全库逻辑备份

官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务。

对于全部是 InnoDB 引擎的库,建议使用–single-transaction 参数。

single-transaction 方法只适用于所有的表使用事务引擎的库。

2.表级锁包括表锁和MDL锁两种。表锁一般是在数据库引擎不支持行锁的时候才会被用到的。
表锁的语法是 lock tables … read/write。

3.行锁就是针对数据表中行记录的锁,但并不是所有的引擎(MyISAM)都支持行锁。

两阶段协议:在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。

如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放。

死锁和死锁检测
死锁:当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态。

解决死锁的两种策略:
1.直接进入等待,直到超时。这个超时时间可以通过参数 innodb_lock_wait_timeout 来设置。
2.发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数 innodb_deadlock_detect 设置为 on,表示开启这个逻辑。
正常情况下我们还是要采用第二种策略,即:主动死锁检测

怎么解决由这种热点行更新导致的性能问题呢?
一种头痛医头的方法,就是如果你能确保这个业务一定不会出现死锁,可以临时把死锁检测关掉。
另一个思路是控制并发度。

相关文章

  • Mysql的锁

    MySql锁的分类 Mysql里的锁大致可以分为全局锁、表级锁和行锁三类。 全局锁 Mysql 增加全局锁的方法:...

  • 【重学MySQL打卡行动】Day5 MySQL的全局锁、表锁、行

    学习内容:根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。 1.全局锁就是对整个数据库实例...

  • 5、全局锁和表锁

    根据加锁范围:MySQL里面的锁可以分为:全局锁、表级锁、行级锁 全局锁: 对整个数据库实例加锁。 MySQL提供...

  • 又一个mysql面试必问的东西mysql锁

    mysql锁 MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁 全局锁就是对整个数据库实例加锁。M...

  • MYSQL(03)-锁

    MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类 全局锁 全局锁就是对整个数据库实例加锁,mysql提供了...

  • MySQL系统学习(06):MySQL的全局锁、表级锁以及行锁

    原文: MySQL系统学习(06):MySQL的全局锁、表级锁以及行锁[http://www.wangqi94.c...

  • mysql学习day3

    mysql的锁根据加锁范围:MySQL里面的锁可以分为:全局锁、表级锁、行级一、全局锁:对整个数据库实例加锁。My...

  • Mysql的全局锁和表锁

    以前对Mysql的锁的认识,只了解表锁和行锁,其实Mysql的锁的种类还是不少的,有全局锁,表级锁,行级锁,还有元...

  • MySQL 锁之一——行锁

    1、概述 MySQL 锁以粒度划分可以分为三类:全局锁、表级锁和行级锁,MySQL 中的行级锁由存储引擎实现,并不...

  • MySQL行锁功过:怎么减少行锁对性能的影响?

    在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁。 MySQL 的...

网友评论

      本文标题:【重学MySQL打卡行动】Day5 MySQL的全局锁、表锁、行

      本文链接:https://www.haomeiwen.com/subject/wdetcktx.html