๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ORACLE/DB

[Oracle] Transaction Dead Lock ๋ฐœ์ƒ ์‹ค์Šต, ์ด๋ก  ๋ง๊ณ  ์ง์ ‘ ๋งŒ๋“ค์–ด ๋ณด์ž :: ๋งˆ์ด์ž๋ชฝ

by ๐ŸŒปโ™š 2020. 3. 26.

Transaction Dead Lock ๊ต์ฐฉ์ƒํƒœ

์ž˜๋ชป๋œ ์ž์› ๊ด€๋ฆฌ๋กœ ์ธํ•˜์—ฌ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•จ๊ป˜ ๋ฉˆ์ถ”์–ด ๋ฒ„๋ฆฌ๋Š” ํ˜„์ƒ..........

๋„์ €ํžˆ ๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, Transaction์ด ์„œ๋กœ ๊ผฌ์—ฌ์„œ ์ž‘์—…์ด ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. Dead Lock ๊ต์ฐฉ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ์œ„์™€ ๋น„์Šทํ•œ ๋‚ด์šฉ์˜ ์ •์˜๋ฅผ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ๋˜ ๊ต์ฐฉ์ƒํƒœ๋กœ ๋น ์งˆ ์ˆ˜ ์žˆ๋Š” 4๊ฐ€์ง€์กฐ๊ฑด์ด๋ผ๊ณ  ํ•ด์„œ ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion), ์ ์œ ์™€ ๋Œ€๊ธฐ Hold and Wait, ๋น„์„ ์ (No Preemption), ํ™˜ํ˜•๋Œ€๊ธฐ(Circular Wait) ์ด๋Ÿฐ ์ด๋ก ์ ์ธ ๋‚ด์šฉ ๋ฐ–์— ์•ˆ๋‚˜์˜ต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด๊ณ  ๊ผญ ์•Œ์•„์•ผํ•˜๋Š” ๋‚ด์šฉ์€ ๋งž์ง€๋งŒ... ๊ธ€๋กœ๋งŒ ๋ด์„œ ๋Œ€์ถฉ ๋ฌด์Šจ ๋Š๋‚Œ์ธ์ง€๋Š” ์•Œ๊ฒ ๋Š”๋ฐ, ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ฒ ๊ณ ... ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š” ๋ถ„๋“ค์ด ๋งŽ์œผ์‹ค๊ฑฐ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Dead Lock์„ ์‹ค์ œ๋กœ ๋ฐœ์ƒ์‹œ์ผœ Dead Lock์— ๋Œ€ํ•œ ํ™•์‹คํ•œ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Transaction Update

์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— Transaction์—์„œ Update์ž‘์—…์„ ํ• ๋•Œ ์ฒ˜๋ฆฌ๊ณผ์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๊ผญ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค.

1
2
3
UPDATE EMPLOYEES
SET SALARY = 3000
WHERE EMPLOYEE_ID = 201;

์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์งˆ๊นŒ์š”?

1. ํ–‰ ๋ ˆ๋ฒจ LOCK

2. UNDO SEGMENT BUFFER ํ™•๋ณด ๋ฐ ์ •๋ณด ๊ธฐ๋ก

3. ๋ฐ์ดํ„ฐ UPDATE

4. COMMIT & ํ–‰ UNLOCK

 

Transaction์—์„œ Update๋ฅผ ํ•  ๊ฒฝ์šฐ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ–‰๋ ˆ๋ฒจ์—์„œ LOCK์„ ๊ฑธ์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Transaction์—์„œ Update ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๋„๋ก ๋ง‰๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋‹ค๋ฅธ Transaction์—์„œ SELECT๋ฅผ ํ•  ๊ฒฝ์šฐ ์•„์ง COMMIT์„ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ์ •๋ณด๋ฅผ UNDO BLOCK์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•ด์ฃผ๊ณ  ๋ฐ์ดํ„ฐ UPDATE ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Transaction์ด ์ตœ์ข…์ ์œผ๋กœ ๋๋‚˜๋ฉด ํ–‰๋ ˆ๋ฒจ ๋ฝ์„ ํ’€์–ด ์ค๋‹ˆ๋‹ค. UPDATE ์ž‘์—…์˜ ์ฒ˜๋ฆฌ๊ณผ์ •์€ ๊ฐ„๋žตํ•˜๊ฒŒ ์œ„์™€๊ฐ™์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด๋Ÿฐ UPDATEํ•˜๋Š” ๊ณผ์ •์—์„œ ์–ด๋–ป๊ฒŒ DEAD LOCK ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?

 

 

Dead Lock ๋ฐœ์ƒ ์‹œํ‚ค๊ธฐ

SQL PLUS๋ฅผ ์ด์šฉํ•ด์„œ HR ๊ณ„์ •์— 20๋ฒˆ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์›๋“ค์„ ๊ฒ€์ƒ‰ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. 201, 202๋ฒˆ ์‚ฌ์› 2๋ช…์ด ๊ทผ๋ฌดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด๋ฒˆ์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

์ด์ƒ ์—†์ด ๊ธ‰์—ฌ๊ฐ€ 13000์—์„œ 3000์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

์ด๋ฒˆ์—๋Š” Transaction์˜ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ฝ˜์†”์ฐฝ์„ ํ•˜๋‚˜ ๋” ์ด์šฉํ•ด์„œ ๋‹ค๋ฅธ TransactionB๋กœ 20๋ฒˆ ๋ถ€์„œ์˜ ์‚ฌ์› ์ •๋ณด๋ฅผ ํ™•์ธํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์•„์ง COMMIT์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š์•„์„œ UNDO SEGMENT์—์„œ ์ด์ „ ์ •๋ณด์˜ ๋ฐ์ดํ„ฐ๋ฅผ  ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํ˜„์žฌ 201๋ฒˆ ์‚ฌ์›์€ ํ–‰๋ ˆ๋ฒจ LOCK์ด ๊ฑธ๋ ค ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

 

 

UPDATE ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ์œผ๋‚˜... ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๊ณ  ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 201๋ฒˆ ์‚ฌ์›์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์ฒซ๋ฒˆ์งธ Transaction A์—์„œ UPDATE๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค . ๋‘๋ฒˆ์งธ Transaction B์—์„œ ๊ฐ™์€ ํ–‰์„ UPDATEํ•˜๋ ค๊ณ  ํ•˜๋ฉด WAITING์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Transaction์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ํ–‰์˜ LOCK์ด ํ’€๋ฆฌ๊ฒŒ ๋˜๋ฉด WAITING์ด ๋๋‚˜๊ณ  UPDATE ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

 

TRANSACTION A์—์„œ COMMIT ๋ช…๋ น์„ ์ž…๋ ฅํ•˜์ž๋งˆ์ž WAITING์€ ํ’€๋ฆฌ๊ณ  TRANSACTION B์—์„œ UPDATE ์ž‘์—…์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. SELECT๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ  TRANSACTION B์—์„œ ๋ณ€๊ฒฝํ•œ 4000์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ TRANSACTION A์—์„œ ์ด์ œ SELECT๋กœ 20๋ฒˆ ๋ถ€์„œ ์‚ฌ์›๋“ค์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด 201๋ฒˆ ์‚ฌ์›์˜ ๊ธ‰์—ฌ๋Š” ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ์„๊นŒ์š”??

 

์•„์ง TRANSACTION B์—์„œ COMMIT์„ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰์œผ๋กœ COMMIT์ด ๋œ 3000์œผ๋กœ ๋ณด์—ฌ์งˆ ๊ฒ๋‹ˆ๋‹ค. ์ด์ œ๋Š” 201๋ฒˆ ํ–‰์— ๋Œ€ํ•œ LOCK์€ TRANSACTION B๊ฐ€ ์†Œ์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

WAITING์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์‹ค์Šต๊นŒ์ง€ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์ด์ œ DEAD LOCK์„ ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒ์‹œํ‚ฌ์ง€ ๊ฐ์ด ์กฐ๊ธˆ ์˜ค์‹œ๋‚˜์š”?

 

 

์ด์ œ๋Š” ์ง„์งœ  DEAD LOCK์„ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ TRANSACTION A๋กœ ๋„˜์–ด์™”์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” 201๋ฒˆ ์‚ฌ์›์ด ์•„๋‹Œ 202๋ฒˆ์‚ฌ์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ UPDATE ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ œ๋Š” ๋‘๊ฐœ์˜ ํ–‰ ๋ชจ๋‘๊ฐ€ LOCK์ด ๊ฑธ๋ฆฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. 201๋ฒˆ ์‚ฌ์›์˜ ํ–‰์€ TRANSACTION B๊ฐ€, 202๋ฒˆ ์‚ฌ์›์˜ ํ–‰์€ TRANSACTION A๊ฐ€ LOCK์„ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋‘ TRANSCTION ๋ชจ๋‘ ๋๋‚˜์ง€ ์•Š์•˜๊ณ ... ์ด์ƒํƒœ์—์„œ TRANSACTION A๊ฐ€ 201๋ฒˆ ์‚ฌ์›์„ UPDATE ์‹œ๋„ํ•˜๊ณ  TRANSACTION B๊ฐ€ 202๋ฒˆ ์‚ฌ์›์„ UPDATEํ•˜๋ ค๊ณ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๋‘๊ฐœ์˜ TRANSACTION ๋ชจ๋‘ WAITING์— ๋“ค์–ด๊ฐ€๊ณ  Dead Lock ๊ต์ฐฉ์ƒํƒœ์— ๋น ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

๋‘๊ฐœ์˜ TRANSACTION ๋ชจ๋‘ WAITING์— ๋“ค์–ด๊ฐ€์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ชปํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ Dead Lock ๊ต์ฐฉ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด๋Ÿฐ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

 

 

Oracle์˜ ๊ฒฝ์šฐ, Dead Lock์„ ๊ฐ์ง€ํ•˜๋ฉด ํ•œ์ชฝ  Transaction์„ ํ’€์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. TRANSACTION A์˜ ๋งˆ์ง€๋ง‰ UPDATE ๋‚ด์šฉ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋˜๊ณ  COMMIT์„ ๋จผ์ € ํ•˜๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค. TRANSACTION B๋Š” ์•„์ง WAITING ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ๊ณ , TRANSACTION A์˜ COMMIT์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

 

 

์ง„ํ–‰ํ•œ ์˜ˆ์ œ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณด๋ฉด ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. Dead Lock ๋ฐœ์ƒ ์ดํ›„ TRANSACTION A, B ์ˆœ์„œ๋Œ€๋กœ COMMIT์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ฒฐ๊ตญ ๋งˆ์ง€๋ง‰์— UPDATEํ•œ  TRANSACTION์˜ ๊ฒฐ๊ณผ๋กœ COMMIT๋ฉ๋‹ˆ๋‹ค.

 

๋Œ“๊ธ€