iT邦幫忙

0

oracle deadlock問題(不同程式不會處理到同一筆資料,為何還會deadlock)

我在oracle上處理大資料量.把資料分成5群,分成5隻程式同時跑,
不同程式不會處理到同一筆資料.程式都是3000筆commit一次.

結果程式跑到一半出現ORA-00060: deadlock detected while waiting for resource

是一次commit筆數太多嗎?另外,不同程式不同讀寫到同一筆,為何還會有deadlock問題?

有人可以解答嗎?

看更多先前的討論...收起先前的討論...
暐翰 iT邦大師 1 級 ‧ 2019-05-16 23:47:18 檢舉
> 不同程式不會處理到同一筆資料
可以附上sql嗎? 怎麼確定不會處理處理同一筆
brucechn iT邦新手 5 級 ‧ 2019-05-17 10:53:42 檢舉
程式1處理的資料來源:
SELECT *
FROM T
WHERE
IDN LIKE 'A%' OR
IDN LIKE 'B%' OR
IDN LIKE 'C%' OR
IDN LIKE 'D%' OR
IDN LIKE 'E%'

程式2處理的資料來源:
SELECT *
FROM T
WHERE
IDN LIKE 'F%' OR
IDN LIKE 'G%' OR
IDN LIKE 'H%' OR
IDN LIKE 'I%' OR
IDN LIKE 'J%'

程式3處理的資料來源:
SELECT *
FROM T
WHERE
IDN LIKE 'K%' OR
IDN LIKE 'L%' OR
IDN LIKE 'M%' OR
IDN LIKE 'N%' OR
IDN LIKE 'O%'

程式4處理的資料來源:
SELECT *
FROM T
WHERE
IDN LIKE 'P%' OR
IDN LIKE 'Q%' OR
IDN LIKE 'R%' OR
IDN LIKE 'S%' OR
IDN LIKE 'T%'

程式5處理的資料來源:
SELECT *
FROM T
WHERE
IDN LIKE 'U%' OR
IDN LIKE 'V%' OR
IDN LIKE 'W%' OR
IDN LIKE 'X%' OR
IDN LIKE 'Y%' OR
IDN LIKE 'Z%'
fysh711426 iT邦研究生 4 級 ‧ 2019-05-17 11:49:50 檢舉
有做 update 嗎?
brucechn iT邦新手 5 級 ‧ 2019-05-17 12:06:13 檢舉
有對cursor資料做update

1 個回答

0
fuzzylee1688
iT邦新手 2 級 ‧ 2019-05-17 09:48:39

請create working table, 再一次insert into select 即可, 不需要用cursor loop commit, 資料庫會最佳化做大量處理的.

看更多先前的回應...收起先前的回應...
brucechn iT邦新手 5 級 ‧ 2019-05-17 12:26:10 檢舉

我以為這是防snapshot too old.

這樣也會防deadlock嗎?想說各程式處理的IDN區間不會重疊,這樣為何還會deadlock

沒回寫原Table當然不會lock,用空間換取時間..做完馬上換表,會更有效率的.

brucechn iT邦新手 5 級 ‧ 2019-05-17 15:07:20 檢舉

oracle不是row lock嗎?我以為oracle是做row lock,執行程式讀自己要讀的資料,並作寫了...別的程式不讀到同一筆,也不會寫同一筆,這樣應該不會deadlock阿

brucechn iT邦新手 5 級 ‧ 2019-05-17 15:07:20 檢舉

oracle不是row lock嗎?我以為oracle是做row lock,執行程式讀自己要讀的資料,並作寫了...別的程式不讀到同一筆,也不會寫同一筆,這樣應該不會deadlock阿

我要發表回答

立即登入回答