关于deadlock有关问题求解(ETL相关)
关于deadlock问题求解(ETL相关)现有表TAB,其中字段 A(年月),B(行政区划),C(rownum),D表数据量很大,一个月
关于deadlock问题求解(ETL相关)
现有表TAB,其中字段 A(年月),B(行政区划),C(rownum),D
表数据量很大,一个月大约数据为1000W左右,所以考虑分并发处理
即把每月,单行政区划(B)按数据量大小分成若干个子任务进行,
并发的分离由C决定,即用C的行号来确定其属于某个子任务,处理即更行D字段
在更新之前先把D按子任务UPDATE为空,此处报死锁,已确定rownum分并发并无重复,
且死锁为多行政区划互相产生,bitmap索引已重建为普通索引,仍无法解决
怀疑为资源不足导致次问题
发生死锁SQL如下
SQL codeUPDATE TAB@DB set D= '' WHERE A= 201108 AND B= TO_CHAR(510107) AND C>= 1 AND C<= 131072
错误报告如下:
ORA-00060: deadlock detected while waiting for resource
ORA-02063: preceding line from DB ORA-06512: at "PKG_ETL", line 2409
ORA-02049: timeout: distributed transaction waiting for lock
ORA-02063: preceding line from DB ORA-06512: at "PKG_ETL", line 2409
2409行即EXCUTE该SQL,求各位大神帮忙分析下,非常感谢
[解决办法]死锁是由于两个SESSION之间互相等待锁资源而产生的,你需要查看下死锁生成的trace文件,看两个SESSION分别执行了哪些SQL引起错误,然后看这些SQL更改的数据是否重合。
[解决办法]同求大神解决!!!!!
[解决办法]检查DBLINK远端数据库是否有SESSION在锁表:
select OBJECT_ID from dba_objects where object_name='TAB');
SELECT * FROM DBA_BLOCKERS;
确认没有bitmap索引。
确认并发进程更改的数据没有重合。
单个进程执行是否正常?