Deadlock์ด๋ผ๊ณ ์ฐ๋ฉฐ ๋ ๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ํน์ ์์(ํ ์ด๋ธ ๋๋ ํ)์ ์ ๊ธ(Lock)์ ํ๋ํ์ฑ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ํ๊ณ ์๋ ์ ๊ธ์ ์๊ตฌํ๋ฉด์ ์๋ฌด๋ฆฌ ๊ธฐ๋ค๋ ค๋ ์ํฉ์ด ๋ฐ๋์ง ์๋ ์ํ
๊ฒฐ๊ณผ์ ์ผ๋ก ์๋ฌด๊ฒ๋ ์๋ฃ๋์ง ๋ชปํ๋ ์ํ๋ฅผ ๋งํ๋ค.
ํํ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ง๋ง ์ผ๋ฐ์ ์ธ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์์ง ์๋ ์ํ๋ค.
- ์ ๊ธ์ด๋? ์ ๊ธ(Lock)๊ณผ ํธ๋์ญ์ ์ ์๋ก ๋น์ทํ ๊ฐ๋ ๊ฐ์ง๋ง ์ฌ์ค ์ ๊ธ์ ๋์์ฑ์ ์ ์ดํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๊ณ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค. ์ ๊ธ์ ์ฌ๋ฌ ์ปค๋ฅ์ ์์ ๋์์ ๋์ผํ ์์์ ์์ฒญํ ๊ฒฝ์ฐ ์์๋๋ก ํ ์์ ์๋ ํ๋์ ์ปค๋ฅ์ ๋ง ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ ์ ํ๋ค. ์ฌ๊ธฐ์ ์์์ ๋ ์ฝ๋๋ ํ ์ด๋ธ์ ๋งํ๋ค. ์ด์๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ํธ๋์ญ์ ์ ๊ผญ ์ฌ๋ฌ ๊ฐ์ ๋ณ๊ฒฝ ์์ ์ ์ํํ๋ ์ฟผ๋ฆฌ๊ฐ ์กฐํฉ๋์์ ๋๋ง ์๋ฏธ์๋ ๊ฐ๋ ์ ์๋๋ค. ํธ๋์ญ์ ์ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ์ค ํ๋์ ์ฟผ๋ฆฌ๊ฐ ์๋ ๋ ๊ฐ ์ด์์ ์ฟผ๋ฆฌ๊ฐ ์๋ ๊ด๊ณ์์ด ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ์์ฒด๊ฐ 100% ์ ์ฉ๋๊ฑฐ๋ ์๋ฌด๊ฒ๋ ์ ์ฉ๋์ง ์์์ผ ํจ์ ๋ณด์ฅํ๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค๋ฉด HW ์๋ฌ ๋๋ SW ์๋ฌ์ ๊ฐ์ ๋ฌธ์ ๋ก ์ธํด ์์ ์ ์คํจ๊ฐ ์์ ๊ฒฝ์ฐ, ํน๋ณํ ๋์ฑ ์ด ํ์ํ๊ฒ ๋๋๋ฐ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด๋ค.
- E.G ์ฝํ๋ง ๊ต์๊ฐ ๋งํ๋ ๊ต์ฐฉ์ํ๊ฐ ์ผ์ด๋๊ธฐ์ํ 4๊ฐ์ง ํ์ ์กฐ๊ฑด
- ์ํธ๋ฐฐ์ (Mutual Exclusion) : ํ๋ก์ธ์ค๋ค์ด ํ์๋ก ํ๋ ์์์ ๋ํด ๋ฐฐํ์ ์ธ ํต์ ๊ถ์ ์๊ตฌํ๋ค.
- ์ ์ ๋๊ธฐ(Hold and Wait) : ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ ์์์ ๊ฐ์ง ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค.
- ๋น์ ์ (Non-preemption) : ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์์์ ์ฌ์ฉ์ ๋๋ผ ๋ ๊น์ง ๊ทธ ์์์ ๋บ์ ์ ์๋ค.
- ์ํ๋๊ธฐ(Circular Wait) : ๊ฐ ํ๋ก์ธ์ค๋ ์ํ์ ์ผ๋ก ๋ค์ ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ๋ ์์์ ๊ฐ์ง๊ณ ์๋ค.
- ์ฌ๊ธฐ์ 4. ์ํ๋๊ธฐ ์กฐ๊ฑด์ 2. ์ ์ ๋๊ธฐ ์กฐ๊ฑด๊ณผ 3. ๋น์ ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ์ฑ๋ฆฝํ๋ฏ๋ก ์ 4๊ฐ์ง ์กฐ๊ฑด๋ค์ ์๋ก ์์ ํ ๋ ๋ฆฝ์ ์ธ ํํ๋ ์๋๋ค.
๊ต์ฐฉ์ํ๋ ์ผ์ด๋๊ธฐ์ํ 4๊ฐ์ง ํ์์กฐ๊ฑด์ ๋ชจ๋ ์ถฉ์กฑํด์ผํ๊ธฐ ๋๋ฌธ์ ์์ 4๊ฐ์ง ์กฐ๊ฑด์ค ํ๋๋ฅผ ๋ง์์ผ๋ก์จ ๊ต์ฐฉ์ํ์ ๋์ํ๊ฒ ๋๋ค.
-
์๋ฐฉ
- ์ํธ๋ฐฐ์ ์กฐ๊ฑด ๋ถ์ (์ ๊ฑฐ) : ํ๋ฒ์ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
- ์ ์ ๋๊ธฐ ์กฐ๊ฑด ๋ถ์ : ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ธฐ ์ ํ์ํ ๋ชจ๋ ์์์ ํ ๋นํ์ฌ ํ๋ก์ธ์ค ๋๊ธฐ๋ฅผ ์์ ๊ฑฐ๋ ์์์ด ์ ์ ๋์ง ์์ ์ํ์์๋ง ์์์ ์๊ตฌํ๋๋ก ํ๋ค.
- ๋น์ ์ ์กฐ๊ฑด ๋ถ์ : ์์์ ์ ์ ํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ์์์ ์๊ตฌํ ๋ ์ ์ ํ๊ณ ์๋ ์์์ ๋ฐ๋ฉํ๊ณ ์๊ตฌํ ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ค.
- ์ํ๋๊ธฐ ์กฐ๊ฑด ๋ถ์ : ์์์ ์ ํ ์์๋ก ๋ถ๋ฅํ์ฌ ๊ณ ์ ๋ฒํธ๋ฅผ ํ ๋นํ๊ณ , ๊ฐ ํ๋ก์ธ์ค๋ ํ์ฌ ์ ์ ํ ์์์ ๊ณ ์ ๋ฒํธ๋ณด๋ค ์์ด๋ ๋ค ์ด๋ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์์์ ์๊ตฌํ๋๋ก ํ๋ค.
-
ํํผ ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ๊ธฐ ์ ๊ต์ฐฉ ์ํ๋ฅผ ์์ํ์ฌ ์์ ์ํ์์๋ง ์์ ์์ฒญ์ ํ์ฉํจ
Safe state(์์ ์ํ) : Safe sequence๊ฐ ์กด์ฌํ์ฌ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃํ ์ ์๋ ์ํ
Safe sequence(์์ ์์) : ๊ต์ฐฉ ์ํ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ์์์ ํ ๋นํ๋ ์์
-
์์ํ ๋น ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ : ์์ ์ ํ๋ง๋ค ์ธ์คํด์ค๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
๋ฐฉ๋ฒ
- ์์ ํ ๋น ๊ทธ๋ํ์ ์์ฝ ๊ฐ์ ์ ์ถ๊ฐํฉ๋๋ค.
- ์์ฝ ๊ฐ์ (claim edge) : ํฅํ ์์ฒญํ ์ ์๋ ์์์ ๊ฐ๋ฆฌํค๋ ์ ์ ์ผ๋ก ํ์๋ ๊ฐ์
- ํ๋ก์ธ์ค ์์ ์ ์ ๋ชจ๋ ์์ฝ ๊ฐ์ ๋ค์ ์์ํ ๋น ๊ทธ๋ํ์ ํ์ํฉ๋๋ค.
- ํ๋ก์ธ์ค๋ ์์ฝ ๊ฐ์ ์ผ๋ก ์ค์ ํ ์์์ ๋ํด์๋ง ์์ฒญํ ์ ์๊ณ ์ฃผ๊ธฐ๊ฐ ํ์ฑ๋์ง ์์ ๋์๋ง ์์์ ํ ๋น ๋ฐ์ต๋๋ค.
์)
๋ค์ ๊ทธ๋ํ์์ ํ๋ก์ธ์ค P2๊ฐ ์์ R2๋ฅผ ์์ฒญํ์ฌ ์์์ ํ ๋น๋ฐ๋๋ค๋ฉด
๋ค์๊ณผ ๊ฐ์ด ์ฃผ๊ธฐ(cycle)๊ฐ ๋ฐ์ํ๋ฏ๋ก ์์์ ์์ฒญ์ ์น์ธํ ์ ์์ต๋๋ค.
๋ฐ๋๋ก ํ๋ก์ธ์ค P1์ด ์์ R2๋ฅผ ์์ฒญํ์ฌ ์์์ ํ ๋น๋ฐ๋๋ค๋ฉด ์ฃผ๊ธฐ๊ฐ ๋ฐ์ํ์ง ์์ ์์์ ์์ฒญํ์ฌ ํ ๋น๋ฐ์ ์ ์์ต๋๋ค.
- ์์ฒญ์ ย : ํ๋ก์ธ์ค์์ ์์์ผ๋ก ์ฐ๊ฒฐ ๋ ์ฌ (๋ ์ ์์ ์ฐ๊ณ ์ถ๋ค~๋ผ๊ณ ์์ฒญํ๋ค๊ณ ๋ณด๋ฉด ๋จ)
- ํ ๋น์ ย : ์์์์ ํ๋ก์ธ์ค๋ก ์ฐ๊ฒฐ ๋ ์ฌ (์ด ์์์ ์ด ํ๋ก์ธ์๊ฐ ์ฐ๊ณ ์์์ ๋ํ๋)
์ฐธ๊ณ ์๋ฃ : https://wannabe-gosu.tistory.com/26
- ์์ ํ ๋น ๊ทธ๋ํ์ ์์ฝ ๊ฐ์ ์ ์ถ๊ฐํฉ๋๋ค.
-
์ํ์ ์๊ณ ๋ฆฌ์ฆ : ๊ฐ ์์ ์ ํ๋ง๋ค ๋ค์์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
๋ฐฉ๋ฒ
- ํ๋ก์ธ์ค ์์์ ์์ ์ด ํ์ํ ๊ฐ ์์์ ์ต๋(Max) ๊ฐ์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธํฉ๋๋ค.
- ๊ฐ ํ๋ก์ธ์ค์์ ์์์์ฒญ์ด ์์๋ ์์ฒญ์ ์น์ธํ๋ฉด ์์คํ ์ด ์์ ํ ์ํ(safe state)๋ก ์ ์ง๋๋ ๊ฒฝ์ฐ์๋ง ์์์ ํ ๋นํฉ๋๋ค.
- ๋ถ์์ ์ํ(unsafe state)๊ฐ ์์๋๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋๋ ๋๊น์ง ๋๊ธฐ๋ฅผ ํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ : https://chanhuiseok.github.io/posts/cs-2/
- ์ฌ์ค ์ด ๊ฐ์ ๋ฐฉ๋ฒ์ ์ต๋ ์์ ์๊ตฌ๋๋ ์์์ผํ๊ณ ํ ๋นํ ์ ์๋ ์์์๊ฐ ์ผ์ ํ๋ ๋ฑ ์ ์ฝ์กฐ๊ฑด์ด ๋ง๊ณ ์์์ด์ฉ๋ ํ๋ฝ๊ฐ์ ๋จ์ ์ด ์กด์ฌํ๋ค.
-
-
๋ฐ๊ฒฌ (๋ฐ ํ๋ณต)
๋จผ์ ์์คํ ์ด ๊ต์ฐฉ์ํ ์๋ฐฉ์ด๋ ํํผ๋ฒ์ ์ฌ์ฉํ์ง ์์์ ๋, ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ ์ฌ๊ธฐ์์ ํ์งํ๊ณ ํ๋ณตํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
- ํ์ง๊ธฐ๋ฒ(๋ฐ๊ฒฌ) : Allocation, Request, Available ๋ฑ์ผ๋ก ์์คํ ์ ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋์ง ์ฌ๋ถ๋ฅผ ํ์งํฉ๋๋ค. (์ํ์ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์๊ณผ ์ ์ฌํ๋ค๊ณ ํจ)
- ํ๋ณต๊ธฐ๋ฒ
- ๊ต์ฐฉ์ํ์ ๋น ์ง ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ์ค๋จ์ํค๊ธฐ : ๋ถ๋ถ ๊ฒฐ๊ณผ๊ฐ ํ๊ธฐ๋ ์์๋ ๋ถ์์ฉ ์กด์ฌ
- ํ๋ก์ธ์ค๋ฅผ ํ๋์ฉ ์ค๋จ์ํฌ ๋ ๋ง๋ค ํ์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ต์ฐฉ์ํ๋ฅผ ํ์งํ๋ฉด์ ํ๋ณต์ํค๋ ๋ฐฉ๋ฒ : ๋งค๋ฒ ํ์ง ์๊ณ ๋ฆฌ์ฆ์ ํธ์ถ ๋ฐ ์ํํด์ผ ํ๋ฏ๋ก ๋ถ๋ด์ด๋๋ ์์ ์ผ ์ ์์
-
๋ฌด์
์๋ฐฉ์ด๋ ํํผ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๊ธฐ ๋๋ฌธ์ ๊ต์ฐฉ์ํ ๋ฐ์ ํ๋ฅ ์ด ๋น๊ต์ ๋ฎ์ ๊ฒฝ์ฐ ๋ณ๋ค๋ฅธ ์กฐ์น๋ฅผ ์ทจํ์ง ์๋๋ค.
MySQLย MVCC์ ๋ฐ๋ฅธ ํน์ฑ ๋๋ฌธ์ ํธ๋์ญ์ ์์ ๊ฐฑ์ ์ฐ์ฐ(Insert, Update, Delete)๋ฅผ ์คํํ๋ฉด ์ ๊ธ์ ํ๋ํ๋ค. (๊ธฐ๋ณธ์ ํ์ ๋ํ ์ ๊ธ)
ํธ๋์ญ์ 1์ด ํ ์ด๋ธ B์ ์ฒซ๋ฒ์งธ ํ์ ์ ๊ธ์ ์ป๊ณ ํธ๋์ญ์ 2๋ ํ ์ด๋ธ A์ ์ฒซ๋ฒ์งธ ํ์ ์ ๊ธ์ ์ป์๋ค๊ณ ํ์.
`Transaction 1> create table B (i1 int not null primary key) engine = innodb; Transaction 2> create table A (i1 int not null primary key) engine = innodb;
Transaction 1> start transaction; insert into B values(1); Transaction 2> start transaction; insert into A values(1);`
ํธ๋์ญ์ ์ commit ํ์ง ์์์ฑ ์๋ก์ ์ฒซ๋ฒ์งธ ํ์ ๋ํ ์ ๊ธ์ ์์ฒญํ๋ฉด
Transaction 1> insert into A values(1); Transaction 2> insert into B values(1); ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
Deadlock ์ด ๋ฐ์ํ๋ค. ์ผ๋ฐ์ ์ธ DBMS๋ ๊ต์ฐฉ์ํ๋ฅผ ๋ ์์ ์ผ๋ก ๊ฒ์ถํด ๋ณด๊ณ ํ๋ค.
- ํธ๋์ญ์ ์ ์์ฃผ ์ปค๋ฐํ๋ค.
- ์ ํด์ง ์์๋ก ํ ์ด๋ธ์ ์ ๊ทผํ๋ค. ์์์ ํธ๋์ญ์ 1 ์ด ํ ์ด๋ธ B -> A ์ ์์ผ๋ก ์ ๊ทผํ๊ณ , ํธ๋์ญ์ 2 ๋ ํ ์ด๋ธ A -> B์ ์์ผ๋ก ์ ๊ทผํ๋ค. ํธ๋์ญ์ ๋ค์ด ๋์ผํ ํ ์ด๋ธ ์์ผ๋ก ์ ๊ทผํ๊ฒ ํ๋ค.
- ์ฝ๊ธฐ ์ ๊ธ ํ๋ (SELECT ~ FOR UPDATE)์ ์ฌ์ฉ์ ํผํ๋ค.
- ํ ํ ์ด๋ธ์ ๋ณต์ ํ์ ๋ณต์์ ์ฐ๊ฒฐ์์ ์์ ์์ด ๊ฐฑ์ ํ๋ฉด ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๋ค, ์ด ๊ฒฝ์ฐ์๋ ํ ์ด๋ธ ๋จ์์ ์ ๊ธ์ ํ๋ํด ๊ฐฑ์ ์ ์ง๋ ฌํ ํ๋ฉด ๋์์ฑ์ ๋จ์ด์ง์ง๋ง ๊ต์ฐฉ์ํ๋ฅผ ํํผํ ์ ์๋ค.


