MySQL 数据库死锁

数据库死锁

  • 死锁的解决办法(1)
    1. 执行下面SQL,先查看哪些表被锁住了:

      select b.owner,b.object_name,a.session_id,a.locked_mode
      from v$locked_object a,dba_objects b
      where b.object_id = a.object_id;
    2. 查处引起死锁的会话
      select b.username,b.sid,b.serial#,logon_time
      from vlocked_object a,vsession b
      where a.session_id = b.sid order by b.logon_time;
      -- 这里会列出SID
    3. 查出SID和SERIAL#:

      查V$SESSION视图:

      SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID';
      -- 这一步将得到PADDR 
    4. 查V$PROCESS视图:
      SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';
      -- 这一步得到SPID 
    5. 杀死进程
      • 在数据库中,杀掉ORACLE进程:

        ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#'; 
      • 如果在ORACLE中不能杀死进程,我们只能到操作系统中,使用操作系统命令杀死进程
        KILL -9  “刚才查出的SPID”

        在WINDOWS平台,可以是偶那个orakill。

  • 也可以根据对象模糊匹配直接查询死锁的session信息
    SELECT vl.session_id || ',' || b.serial#, ao.object_name, b.*
    FROM vlocked_object vl, all_objects ao, vsession b
    WHERE vl.object_id = ao.object_id
        AND vl.session_id = b.sid
        AND b.status = 'ACTIVE'          --session状态根据需要添加
        AND ao.object_name LIKE 'object_name'; 
    在数据库中,杀掉进程:
    ALTER SYSTEM KILL SESSION '查出的SID, 查出的SERIAL#'; 
  • 死锁的解决办法(2)
    1. 查询死锁的对象:

      select username,lockwait,status,machine,program from v$session where sid in
       (select session_id from v$locked_object);
    2. 查询死锁语句:
       select sql_text from v$sql where hash_value in
       (select sql_hash_value from v$session where sid in
       (select session_id from v$locked_object));
      
      SELECT s.lockwait,s.status,s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
      FROM VLOCKED_OBJECT l,VSESSION S
      WHERE l.SESSION_ID=S.SID and s.STATUS='ACT\IVE';
      
      alter system kill session '25,16823' IMMEDIATE;
      alter system kill session ‘sid,serial#’ IMMEDIATE;

原文地址:https://www.cnblogs.com/zhang-zi-yi/p/10792058.html

时间: 2024-08-29 16:52:21

MySQL 数据库死锁的相关文章

nagios 添加自定义监控项目监控mysql数据库死锁

nagios 添加自定义监控项目 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 系统环境:CentOS Linux release 7.2.1511 (Core) nagios 版本: 2.15 这里配合pt-dead-logger插件了,运行了这个插件,有死锁就会在test.deadlocks表写入死锁的信息 这里通过检测这个表是否增加了行数来发报警 nagios客户端自定义脚本: ###这里为了省事,直接把数据库的用户,

mysql数据库死锁的产生原因及解决办法

这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下 数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性.加锁是实现数据库并 发控制的一个非常重要的技术.在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行. 在数据库中有两种基本的锁类型

MySQL数据库死锁分析

背景说明: 公司内部一套自建分布式交易服务平台,在POC稳定性压力测试的时候出现了数据库死锁.(InnoDB引擎)由于保密性,假设是app_test表死锁了. 现象: 发生异常:Deadlock found when trying to get lock; try restarting transaction 分析思路: 1.回忆和查找相关资料,InnoDB死锁导致的原因. 第一:涉及多表访问,两个事务相互占有对方需要的锁.假设有A表(含有初始化记录1)和B表(含有初始化记录2).进行如下操作会

mysql数据库死锁

当我们频繁的对数据库进行插入或更新的时候,有可能会直接报sql错误1205:lock wait timeout exceeded.数据库的死锁. 一般INNODB数据库会自动添加事务,当进行插入或者更新的时候,如果上次commit尚未执行完,而又有一次新的commit提交的时候,系统就会报SQL错误1205:lock wait timeout exceeded.这就是mysql死锁. 作为一个新手,碰到这样苦逼的事情自然是手足无措.于是赶紧上网看看解决方案,不负所望,网上还真找到相应的结局方案,

记一次线上MySQL数据库死锁问题

最近线上项目报了一个MySQL死锁(DealLock)错误,虽说对业务上是没有什么影响的,由于自己对数据库锁这块了解不是很多,之前也没怎么的在线上碰到过.这次刚好遇到了,便在此记录一下. 出现死锁问题背景 项目层面:报错的项目做的是一个批量下单的动作,会同时写入多条订单数据,代码之前写的是一个事务中一个循环一条一条insert到数据库(至于为啥没用批量插入就不追究了,历史原因了). 数据库层面:一张test表(非线上真实表),比较重要的是有一个 type 和 name的唯一索引. 事务隔离级别:

mysql数据库死锁 情景一

备注:CI的SQL构造器,若果数据是int类型的话必须用intval进行转换 有一张查询很频繁的表,然后尝试根据主键去更新某一个字段,SQL如下: update node_bird set Isverify=1 where NodeID='912399'; 发现NodeID原本是int,CI的sql构造器将NodeID生成SQL语句的时候加了单引号,然而这张表的查询比较多,导致后面的查询都死掉了

Mybatis-update - 数据库死锁 - 获取数据库连接池等待

最近学习测试mybatis,单个增删改查都没问题,最后使用mvn test的时候发现了几个问题: update失败,原因是数据库死锁 select等待,原因是connection连接池被用光了,需要等待 get: 要勇于探索,坚持就是胜利.刚看到错误的时候直接懵逼,因为错误完全看不出来,属于框架内部报错,在犹豫是不是直接睡觉得了,毕竟也快12点了.最后还是给我一点点找到问题所在了. 同上,要敢于去深入你不了解的代码,敢于研究不懂的代码. 距离一个合格的码农越来越远了,因为越学越觉得漏洞百出,自己

架构设计:系统存储(8)——MySQL数据库性能优化(4)

================================ (接上文<架构设计:系统存储(7)--MySQL数据库性能优化(3)>) 4-3.InnoDB中的锁 虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引.表结构.配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在"锁机制能够提升性能"这样的说法.但如果技术人员不理解InnoDB中的锁机制或者混乱.错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的

运维角度浅谈:MySQL数据库优化

日志君导读: 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 作者:zhenliang8,本文转自51CTO博客,点击原文阅读查看网页版文章. 本博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很