表锁:表级别的锁定是mysql各存储引擎中最大粒度的锁定机制,该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小,所以获取锁释放锁的速度很快,由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并发度大打折扣。使用表级锁定的主要是MyISAM,MEMORY,CSV等一些非事务性存储引擎。

MyISAM在执行查询前,会自动执行表的加锁、解锁操作,一般情况下不需要用户手动加、解锁,但是有的时候也需要显示加锁。比如:检索某一个时刻t1,t2表中数据数量。

页锁:页级锁定是MySQL中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。

在数据库实现资源锁定的过程中,随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量是越来越多的,实现算法也会越来越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低,系统整体并发度也随之提升。使用页级锁定的主要是BerkeleyDB存储引擎。

行锁:行级锁定最大的特点就是锁定对象的粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。

虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。

使用行级锁定的主要是InnoDB存储引擎。

总结

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般。

从锁的角度来说,表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用;而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统。

乐观锁的颗粒度_mysql「锁」相关推荐

  1. 乐观锁的颗粒度_MySql数据库锁机制详解

    概述 数据库锁定机制简单的来说,就是数据库为了保证数据的一致性与完整性,而使各种共享资源在被并发访问时变得有序所设计的一种规则.对于任何一种数据库来说都需要有相应的锁机制,所以MySQL也不能例外.M ...

  2. mysql锁总结知乎_Mysql悲观锁乐观锁区别与使用场景

    概念上区别 乐观锁(Optimistic Locking):顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,"乐观"的认为加锁一定会成功的,在最后一步 ...

  3. mysql默认锁机制是什么_MySQL中锁机制的原理是什么

    MySQL中锁机制的原理是什么 发布时间:2020-12-08 14:48:30 来源:亿速云 阅读:81 作者:Leah MySQL中锁机制的原理是什么?针对这个问题,这篇文章详细介绍了相对应的分析 ...

  4. mysql锁的基本类型_Mysql的锁

    (1)锁类型:表锁&行锁 表锁是在mysql server层实现的,而行锁的mysql存储引擎实现的 所以表锁相对简单,直接给该表加一个锁标识即可.行锁则相对复杂. 注意事项: 1.innod ...

  5. 旷视AI「炼丹房」Brain++ 再升级!首席科学家孙剑发AI「灵魂」三问

    来源:新智元 [导读]从深度学习算法.计算机视觉算法到AIoT算法,从开源框架旷视天元到AI生产力平台Brain++,旷视十年故事,旷视首席科学家.旷视研究院院长孙剑讲给你听. 万万没想到,我和小伙伴 ...

  6. 旷视AI「炼丹房」Brain++ 再升级 首席科学家孙剑发AI「灵魂」三问

    万万没想到,我和小伙伴们被旷厂拿去「炼丹」了. 没错,就是这个炼丹炉! 站在炉子中央,各种算法代码眼前飞闪,让我体验了一把时空穿梭的快乐. OMG!真·颅内高潮... 业界认为「炼丹」过程正如算法研究 ...

  7. mysql行锁还需要乐观锁吗_mysql行锁、表锁。乐观锁,悲观锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  8. mysql悲观锁和乐观区别_MySQL悲观锁和乐观锁的区别是什么

    MySQL悲观锁和乐观锁的区别是什么 区别如下: 1.概念不同 乐观锁( Optimistic Locking): 顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,&qu ...

  9. 华为应用锁退出立即锁_面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景...

    前言 生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来.电动车被偷等等. 但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就 ...

最新文章

  1. Node.js开发环境的搭建
  2. 4.Eclipse的安装和使用
  3. 惊!Kubernetes 将弃用 Docker,开发者们怎么办?
  4. 为什么老师批改完试卷,分数下要画两条横线?今天终于知道了!
  5. 前端学习(1798):前端调试之css伪元素练习
  6. 自从用了这几个网站后,linux下的开发(使用)更加简单化
  7. Vue中虚拟DOM的理解
  8. Python OOP:继承、单继承、多继承、__mro__、子类重写父类同名属性和方法、子类调用父类同名属性和方法、多层继承、super()、私有(实例)属性和方法、获取修改私有属性值、私有类属性
  9. Flex 页面跳转 四种方法
  10. Unity Ragdoll 实现死亡效果 心得+坑点总结
  11. 当R遇上Docker的第一步
  12. SSD性能怎么测?看这一篇就够了!
  13. 最新电脑cpu性能排行服务器,至强cpu天梯图2020_intel服务器cpu排行榜2020
  14. 花猫c语言,C语言实现小猫钓鱼游戏 - 技术经验 - W3xue
  15. 计算机的语言是美式英语,有关计算机语言英语口语表达
  16. YII2框架AJAX请求报500错误的处理方法
  17. ngx-markdown 安装和使用
  18. mysql的设置参数中max_allowed_packet
  19. CMNET和CMWAP GPRS 连接
  20. 获取一个对象或数组的所有属性及值

热门文章

  1. -bash: ifconfig: 未找到命令
  2. c++获取一段代码的执行时间_微软IE浏览器JScript脚本引擎远程代码执行漏洞通告...
  3. Oracle SQL多表查询
  4. php web服务器部署,php – 如何配置apache web服务器以部署laravel 5
  5. python对象回收_python 引用,拷贝,对象回收,弱引用
  6. SpringBoot整合kafka案例
  7. Android开发笔记(四)字符串格式化
  8. 2019的第一工作日
  9. Spring , Spring mybatis 配制文件 模板
  10. mysql简单的命令centos版