zoukankan      html  css  js  c++  java
  • 我的死锁经历

    数据库=oracle

    测试人员在对程序进行黑盒测试时频繁出现timeout;

    本地复现,发现日志打印到一条删除语句时一直没有得到结果;

    拿到sql的条件,直接操作数据库;

    根据条件查询,正常查到结果;

    根据条件delete,则无休止的等待下去;

    怀疑被锁;

    删除同一张表的其他数据,可以正常删除;

    怀疑该记录被锁;

    查询表中的锁:

    查看那个表被死锁了

    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;

    找到详细信息

    select *
      from v$session t1, v$locked_object t2
     where t1.sid = t2.SESSION_ID;

    发现该表有四条锁记录;

    解决办法:删除锁记录

    alter system kill session 'sid  ,serial#';

    alter system kill session'154,1030';

    删一个,少一条记录,当删除第三条时,四条记录全消失了;

    确定,出现的死锁;

    至此,程序正常;

    死锁排查,待续...

    死锁程序回避:

    请求进入程序没执行有风险的操作前,去redis查询key;

    有记录,程序等待5ms,继续操作;

    没有记录,放入redis一个key;

    程序执行完毕,删除key;

    完毕

  • 相关阅读:
    图片懒加载DEMO
    手写offset函数
    DOM
    jQuery笔记
    children和 childNodes辨析
    运算符...典型的三种用处
    Python中的数据结构---栈,队列
    手写call方法
    移动零元素--leetcode题解总结
    剑指 Offer 36. 二叉搜索树与双向链表
  • 原文地址:https://www.cnblogs.com/chenglc/p/9813593.html
Copyright © 2011-2022 走看看