• 我的死锁经历


    数据库=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;

    完毕

  • 相关阅读:
    datepicker防手动输入
    [ACM]Link-Cut Tree实现动态树初探
    STL priority_queue 优先队列 小记
    hihoCoder挑战赛1 毁灭者问题
    python编程技巧
    openstack horizon 学习(3) DataTable
    Upcasting, downcasting in JAVA
    SGU 145
    URAL 1003,1004
    自建物流的无人机实验(困难)
  • 原文地址:https://www.cnblogs.com/chenglc/p/9813593.html
Copyright © 2020-2023  润新知