MySQL中行级锁与表级锁与页级锁的区别

#

        再次复习MyISAM和InnoDB存储引擎时,发现两个存储引擎的区别包括MyISAM只支持表级锁,而InnoDB还支持行级锁,因为没有系统的了解过锁的概念,因此花了点时间进行了初步的学习,若有不对之处,望有指正;

#

简单回忆 MyISAM 与 InnoDB区别

  • MyISAM是5.5版之前,由于其缺陷明显,不支持外键和事务,崩溃后无法安全恢复,之后都使用InnoDB作为MySQL的默认存储引擎

    • 两者具体区别包括:以下都是InnoDB支持,MyISAM不支持;

      • 是否支持行级锁:

      • 是否支持事务和崩溃后的安全恢复;

      • 是否支持外键;

      • 是否支持MVCC;

    • MyISAM就没有好处吗?MyISAM强调性能,每次查询具有原子性,其执行效率比InnoDB更快;但是一般情况下我们需要考虑扩展能力,并发能力,事务控制,更在乎稳定性,所以通常不会使用MyISAM;

进一步探讨行级锁与表级锁与页级锁的关系

  • 首先了解锁的定义:
    • 锁是用于控制并发访问的一种机制,它确保在多个并发事务同时访问或修改数据时,不会发送数据不一致或丢失更新等问题;

      • 锁的特点:

        • 确保数据的完整性;

        • 提高隔离的级别;事务的隔离性通过锁定机制实现;

        • 控制并发访问;控制并发对数据的访问和修改顺序;避免出现竞争条件和冲突操作。

        • 同样也会影响性能:锁的引入会带来额外的开销,需要合适的策略和锁的粒度;

    • 锁的粒度:决定了锁的范围和作用对象;

    • 锁竞争:多个并发事务或线程对同一资源进行获取出现争抢锁定的情况;可能会导致死锁, 等待,降低性能;

      • 性能降低:指频繁的锁竞争将性能浪费了,真正的业务处理并没有利用性能

  • 行级锁与表级锁与页级锁 根据粒度的不同而分别定义

    • 行级锁:

      • ①粒度最小:对表的单行数据进行锁定;②只锁定受影响的行,不影响其他并发操作;③适合于需要精细控制并发访问的场景,但可能引起锁竞争

    • 表级锁

      • ①粒度最大:对整个表进行锁定;②阻止对整个表的操作;③并发性能下降;

    • 页级锁

      • ①粒度适中:介于行和表之间,以数据库页为单位(多行数据);②锁定多行,减小锁竞争;③平衡行级锁和表级锁的之间的场景

  • 乐观锁与悲观锁

    • 是两种不同的并发控制机制,用于处理多个事务同时访问共享数时可能出现的数据冲突情况

    • 悲观锁:典型的悲观锁实现:行级锁和表级锁

      • 悲观锁认为在并发情况下会频繁发生数据冲突,因此访问数据前先获取锁,并阻止其他事务对数据进行修改;

      • 虽然适用于更新频繁,并发度较高的场景,但导致的问题就是死锁,性能下降等;

    • 乐观锁:

      • 乐观锁认为在并发情况下数据冲突的概率较低,因此允许多个事务同时访问数据,但提交时检查数据是否修改;

      • 乐观锁实现通过版本控制或时间戳标记版本,在数据修改时通过比较版本号来判断是否冲突

        • 版本号比对:读取数据时记录数据的版本号,修改时同时提交新的版本号,比较读取到的和数据库中的是否一致,不一致证明被修改过;

        • 时间戳比对:读取数据时记录读取的时间戳,并标记最后修改时间,比较读取到的和数据库中的是否一致,不一致证明被修改过;

      • 适用于读操频繁(查数据),写数据较少的场景,可以提高并发的性能,但是需要处理数据冲突的解释方案;

        • 冲突解释方案

          • 回滚事务;通过异常处理捕获冲突导致的异常提示用户重新操作;或者合并数据;

          • 重试机制(深):

            • 一种常见的错误处理和容错机制;

            • 用于在发生错误或异常时重复执行某个操作,直到操作成功或达到最大重试次数;

              • 在乐观锁中检测数据冲突时,可触发;或者当冲突导致更新失败,可触发

              • 采用不同的重试策略:

                • 固定间隔重试:见名识意

                • 指数退避重试:每次重试间隔采用指数增长,避免过多重试给系统带来压力;

              • 设置最大重试次数确保不会无限重试;达到最大重试次数返回异常信息给用户或将信息保留做为后续分析;

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值