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๋ฉ๋๋ค.
๋๊ธ