首页 > 数据库 >MySQL中行级锁与表级锁与页级锁的区别

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

时间:2024-03-23 11:59:14浏览次数:21  
标签:行级 级锁 重试 并发 MyISAM MySQL 数据 表级

#

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

#

简单回忆 MyISAM 与 InnoDB区别

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

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

      • 是否支持行级锁:

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

      • 是否支持外键;

      • 是否支持MVCC;

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

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

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

      • 锁的特点:

        • 确保数据的完整性;

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

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

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

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

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

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

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

    • 行级锁:

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

    • 表级锁

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

    • 页级锁

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

  • 乐观锁与悲观锁

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

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

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

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

    • 乐观锁:

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

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

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

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

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

        • 冲突解释方案

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

          • 重试机制(深):

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

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

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

              • 采用不同的重试策略:

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

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

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

标签:行级,级锁,重试,并发,MyISAM,MySQL,数据,表级
From: https://blog.csdn.net/2301_81422019/article/details/136964061

相关文章

  • Mysql默认字符集修改
    0.查看自己的字符集配置mysql-uroot-p123456-e"showcharacterset\G;"查看所有的字符集查看常用的字符集:mysql-uroot-p123456-e"showcharacterset\G;"|egrep"gbk|utf8|latin1"|awk'{print$0}'查看MySQL当前的字符集mysql>showvariables......
  • Mysql中备份数据文件中/*!*/的含义
    1.问题在备份数据库时,我们发现生成的备份文件中,存在这样一系列代码:/*!40101SET@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT*/;/*!40101SET@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS*/;/*!40101SET@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTIO......
  • innodb_undo_tablespaces导致Mysql启动报错
    1.问题MySQL5.7设置innodb_undo_tablespaces=2报错如下:2020-06-09T04:40:07.800321-05:000[ERROR]InnoDB:Expectedtoopen2undotablespacesbutwasabletofindonly0undotablespaces.Settheinnodb_undo_tablespacesparametertothecorrectvalueandret......
  • django《大学计算机》课程思政资源共享平台(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化社会,教育领域正逐渐实现数字化转型,其中课程资源的共享与利用成为提高教学效率和质量的关键。特别是对于《大学计算机》这类基础且重要的课程,构......
  • django+Mybatis的医生在线诊所平台(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的迅猛发展和普及,越来越多的传统行业开始向数字化转型。医疗健康领域作为与人们生活密切相关的行业,其服务模式也正逐渐从传统的面对面诊疗转......
  • djangoJAVA汽车年审管理系统(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着汽车产业的快速发展,汽车已经成为人们日常生活中不可或缺的交通工具。然而,随着汽车数量的增加,汽车安全问题也日益凸显。为了确保道路交通安全,各国政府都......
  • 【附源码】django计算机毕业设计web的房屋租赁系统的设计与实现(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着经济的发展和社会的进步,人们对于居住环境的需求越来越高。房屋租赁市场作为房地产市场的重要组成部分,近年来呈现出快速发展的态势。然而,传统的房屋租赁......
  • mysql常规优化
    1、通过慢查日志等定位那些执行效率较低的SQL语句2、explain分析SQL的执行计划需要重点关注type、rows、filtered、extra。type由上至下,效率越来越高ALL全表扫描index索引全扫描range索引范围扫描,常用语<,<=,>=,between,in等操作ref使用非唯一索引扫描或唯一索引前缀......
  • .lastUpdated:The POM for mysql:mysql-connector-java:jar:8.1.0 is missing, no depe
    描述:在IDEA中,出现该类报错,查看本地仓库中项目对应的jar包存在,却无法获取时,可能是文件中生成.lastUpdated文件或有remote.repositories文件导致的。.lastUpdated:在更新maven项目的时候,每一个jar包路径下的_remote.repositories文件都会同setting.xml中设置的仓库地址id......
  • 房屋租赁系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着城市化进程的加快和人口流动性增大,房屋租赁市场日益繁荣,对租赁信息的管理提出了更高要求。一个高效的房屋租赁系统能够为房东和租户提供一个便捷的信息发布......