我的死锁经历
數據庫=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 t2where t1.sid = t2.SESSION_ID;發現該表有四條鎖記錄;
解決辦法:刪除鎖記錄
alter system kill session 'sid ,serial#';alter system kill session'154,1030';
刪一個,少一條記錄,當刪除第三條時,四條記錄全消失了;
確定,出現的死鎖;
至此,程序正常;
?
死鎖排查,待續...
?
死鎖程序回避:
請求進入程序沒執行有風險的操作前,去redis查詢key;
有記錄,程序等待5ms,繼續操作;
沒有記錄,放入redis一個key;
程序執行完畢,刪除key;
完畢
?
轉載于:https://www.cnblogs.com/chenglc/p/9813593.html
總結
- 上一篇: pe的u盘怎么装系统教程 pe U盘装系
- 下一篇: POJ1149 PIGS