美文网首页
mysql实战(七)行锁、死锁

mysql实战(七)行锁、死锁

作者: WAHAHA402 | 来源:发表于2020-12-14 19:23 被阅读0次

MySQL的行锁是在引擎层实现的,MySQL原生引擎MyISAM不具备行锁,这也是被InnoDB替换它的原因。

两阶段锁协议:
InnoDB事务中,行锁是需要时才被加上的,该行锁在事务结束时才会被释放。

根据两阶段锁协议,可以联想到:如果一个事务需要锁多个行,要把最可能造成锁冲突、影响并发度的锁往后放(即:把可能导致行锁冲突的sql语句update语句等,放在一个事务的最后执行)。

死锁和死锁检测
并发系统中不同线程出现循环资源依赖,互相等待对方释放资源却不得,而陷入无限等待的状态,称为死锁。

死锁解决策略

1、进入等待,直到超时。超时时间可以通过参数innodb_lock_wait_timeout来设置。
缺点:设置太长,会导致很久才退出,服务停摆;设置太短,容易将执行时间较长的正常事务“误伤”。

2、主动检测死锁
更加常用。参数innodb_deadlock_detect设置,默认为on。
缺点:很多线程同时更新热点行时,每个线程需要遍历其他线程占有的资源,时间复杂度为O(n平方)。
解决方法: 1)确保不会出现死锁是,关闭该参数为off 2)控制并发度(例如通过业务设计优化等方式)。

相关文章

  • mysql实战(七)行锁、死锁

    MySQL的行锁是在引擎层实现的,MySQL原生引擎MyISAM不具备行锁,这也是被InnoDB替换它的原因。 两...

  • 高性能Mysql笔记

    一、Mysql架构与历史 1、架构图 2、锁 表锁 行级锁 3、事务 死锁 Mysql中的事务 1

  • MySQL的锁

    一. MySQL的锁粒度 按锁的粒度分,MySQL的锁可以分为三类: 行级锁:加锁开销最大,且有可能出现死锁,但并...

  • Mysql并发时经典常见的死锁原因及解决方法

    1. mysql都有什么锁 MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁...

  • MySQL--锁

    MySQL 锁 锁的类型 行锁粒度最小的锁,存在死锁。 页锁粒度在行锁和表锁之间的锁。 表锁粒度较大的锁,不存在死...

  • MySQL日记——锁机制

    MySQL的锁一般分为三种 行锁 表锁 页锁 表锁 偏向MyISAM储存引擎,开销小,加锁快;无死锁;锁定粒度大,...

  • 1-1、mysql锁机制

    一、MySQL的锁 表级锁:开销小,加锁快;不会死锁;粒度大,锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢...

  • 数据库_锁

    六、数据库锁1.mysql都有什么锁,死锁判定原理和具体场景,死锁怎么解决?MySQL有三种锁的级别:页级、表级、...

  • Mysql锁

    mysql的两种锁 表锁:开销小,加锁快,锁粒度大,不会出现死锁;并发度最低,遇到锁冲突的概率高 行锁:开销大,加...

  • MySQL 死锁是怎么产生的?6 个案例分享!

    最近总结了一波死锁问题,和大家分享一下。 Mysql 锁类型和加锁分析 MySQL有三种锁的级别:页级、表级、行级...

网友评论

      本文标题:mysql实战(七)行锁、死锁

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