位置: 编程技术 - 正文

mysql数据库锁的产生原因及解决办法(mysql 锁详解)

编辑:rootadmin

推荐整理分享mysql数据库锁的产生原因及解决办法(mysql 锁详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql的锁是什么,mysql数据库锁有哪些,mysql的锁是什么,mysql数据库有哪些锁和作用,mysql数据库被锁如何解锁,mysql 锁详解,mysql数据库被锁如何解锁,mysql 锁详解,内容如对您有帮助,希望把文章链接给更多的朋友!

数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行。在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两 种基本的锁类型来对数据库的事务进行并发控制。

死锁的第一种情况

一个用户A 访问表A(锁住了表A),然后又访问表B;另一个用户B 访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B才能继续,同样用户B要等用户A释放表A才能继续,这就死锁就产生了。

解决方法:

这种死锁比较常见,是由于程序的BUG产生的,除了调整的程序的逻辑没有其它的办法。仔细分析程序的逻辑,对于数据库的多表操作时,尽量按照相同的顺序进 行处理,尽量避免同时锁定两个资源,如操作A和B两张表时,总是按先A后B的顺序处理, 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源。

死锁的第二种情况

mysql数据库锁的产生原因及解决办法(mysql 锁详解)

用户A查询一条纪录,然后修改该条纪录;这时用户B修改该条纪录,这时用户A的事务里锁的性质由查询的共享锁企图上升到独占锁,而用户B里的独占锁由于A 有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。这种死锁比较隐蔽,但在稍大点的项 目中经常发生。如在某项目中,页面上的按钮点击后,没有使按钮立刻失效,使得用户会多次快速点击同一按钮,这样同一段代码对数据库同一条记录进行多次操 作,很容易就出现这种死锁的情况。

解决方法:

1、对于按钮等控件,点击后使其立刻失效,不让用户重复点击,避免对同时对同一条记录操作。2、使用乐观锁进行控制。乐观锁大多是基于数据版本(Version)记录机制实现。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是 通过为数据库表增加一个“version”字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数 据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。乐观锁机制避免了长事务中的数据 库加锁开销(用户A和用户B操作过程中,都没有对数据库数据加锁),大大提升了大并发量下的系统整体性能表现。Hibernate 在其数据访问引擎中内置了乐观锁实现。需要注意的是,由于乐观锁机制是在我们的系统中实现,来自外部系统的用户更新操作不受我们系统的控制,因此可能会造 成脏数据被更新到数据库中。3、使用悲观锁进行控制。悲观锁大多数情况下依靠数据库的锁机制实现,如Oracle的Select … for update语句,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。如一个金融系统, 当某个操作员读取用户的数据,并在读出的用户数据的基础上进行修改时(如更改用户账户余额),如果采用悲观锁机制,也就意味着整个操作过程中(从操作员读 出数据、开始修改直至提交修改结果的全过程,甚至还包括操作员中途去煮咖啡的时间),数据库记录始终处于加锁状态,可以想见,如果面对成百上千个并发,这 样的情况将导致灾难性的后果。所以,采用悲观锁进行控制时一定要考虑清楚。

死锁的第三种情况

如果在事务中执行了一条不满足条件的update语句,则执行全表扫描,把行级锁上升为表级锁,多个这样的事务执行后,就很容易产生死锁和阻塞。类似的情 况还有当表中的数据量非常庞大而索引建的过少或不合适的时候,使得经常发生全表扫描,最终应用系统会越来越慢,最终发生阻塞或死锁。

解决方法:

SQL语句中不要使用太复杂的关联多表的查询;使用“执行计划”对SQL语句进行分析,对于有全表扫描的SQL语句,建立相应的索引进行优化。5.小结总体上来说,产生内存溢出与锁表都是由于代码写的不好造成的,因此提高代码的质量是最根本的解决办法。有的人认为先把功能实现,有BUG时再在测试阶段进 行修正,这种想法是错误的。正如一件产品的质量是在生产制造的过程中决定的,而不是质量检测时决定的,软件的质量在设计与编码阶段就已经决定了,测试只是 对软件质量的一个验证,因为测试不可能找出软件中所有的BUG。

批量 kill mysql 中运行时间长的sql KILL语法KILL[CONNECTION|QUERY]thread_id每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOWPROCESSLIST语句查看哪些线程正在运行,并使用KILLthread_id语

MySQL中create table as 与like的区别分析 本文分析了MySQL中createtableas与like的区别。分享给大家供大家参考,具体如下:对于mysql的复制相同表结构方法,有createtableas和createtablelike两种,区别是

MySQL中对于索引的基本增删查改操作总结 创建索引MySQL创建索引的语法如下:CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEXindex_name[USINGindex_type]ONtable_name(index_col_name,...)其中对应的语法变量信息如下:[UNIQUE|FULLTEXT

标签: mysql 锁详解

本文链接地址:https://www.jiuchutong.com/biancheng/319728.html 转载请保留说明!

上一篇:mysql 数据库死锁原因及解决办法(mysql 死锁处理)

下一篇:批量 kill mysql 中运行时间长的sql(mysql批量处理)

  • 私立幼儿园需要纳税吗
  • 资产交换的涉税处理
  • 所得税申报是什么
  • 工会开户所需资料怎么写
  • 外汇储备保值增值
  • 出租车发票可以重新打印吗
  • 工程款转入冻结账户能拿回
  • 社保费个人承担部分
  • 抄报未反写影响开票吗
  • 个人向个人借款100万交税吗
  • 公司哪些支出不影响报表净利润总额
  • 增值税普通发票查询真伪
  • 外聘人员劳务费入什么科目
  • 应收账款对应的科目有哪些
  • 企业收到委托开发软件的货款如何记账?
  • 企业员工报销法律规定
  • 商业保险税前扣除限额
  • 居民委员会有没有纳税人识别号吗
  • 外购存货成本包括哪些
  • 加油卡预付卡销户怎么办
  • 存货计价方法的选择对利润表中的项目没有影响
  • 外购公司的长期投资如何做账
  • 个人所得税累计减免税额为0
  • 收到以前年度退回的企业所得税怎么做账
  • 鸿蒙系统大文件夹怎么调节大小
  • 最新气象报告
  • 银行承兑汇票的转让一般通过什么渠道
  • 企业合并中或有负债确认后期调整的项目
  • 员工用差旅费冲账怎么办
  • laravel5 使用try catch的实例详解
  • php json转对象
  • 两台mac怎么一起用
  • 营改增后租金如何交税
  • 公积金可以支付二手房首付款吗
  • 预收账款什么时候开发票
  • 公司所有费用都让一人报销
  • 进料加工免退税
  • vueconfigjs配置proxy 无效
  • 东洛锡安的金黄麦田,苏格兰 (© Scott Masterton/plainpicture)
  • 企业所得税税前扣除和不扣除的区别
  • php实现图片上传到网页显示
  • 毕业证原件掉了可以报考社工证吗
  • 如何购买增值税发票需要什么资料
  • php计算给定日期的时间
  • 预缴所得税会计分录咋做
  • php单链表使用场景
  • yolov5map
  • 技术软件开发
  • 企业办理工程价款流程
  • 逾期包装物押金收入计入什么科目
  • 其他权益工具投资是什么意思
  • 房地产开发费用最高扣除比例
  • 本月无开票企业怎么报税
  • 织梦怎么调用当前栏目下的文章
  • 金蝶可以自动结转增值税吗
  • sql 列转行
  • 同一个单位能否交五险
  • 工程预付款是否含规费和税金
  • 公司应付款是什么意思
  • 去年主营业务收入少计
  • 开办费怎么做帐
  • 一家新成立的贸易企业
  • 原材料保险公司赔偿会计分录怎么写
  • 出口退税转为免税做账处理
  • 企业购置软件的会计处理
  • 什么是定额发票图片
  • 年终建账于年初建账,在录入期初余额时有什么不一样?
  • docker安装位置
  • vc++6.0运行程序
  • mac桌面应用
  • win7系统电脑卡住了怎么办
  • 铁嘴大师
  • ercp后淀粉酶为什么升高
  • ie6-ie10的浏览器
  • ssh自动输入密码登录
  • python中验证码校验
  • js 堆排序
  • 广东省电子税务局网上办税大厅
  • 百旺税控盘怎么备份数据
  • 个人转让住宅需要缴纳什么税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设