View
๐ก ๋ฝ(Lock)์ด๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์ฌ์ฉ์๋ค์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ ๊ทผํ๋ ์ํฉ์์, ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์งํค๊ธฐ ์ํด ์ฌ์ฉ
๐ก ๋ฝ(Lock)์ ์ข ๋ฅ
ํฌ๊ฒ๋ ๊ณต์ ๋ฝ๊ณผ ๋ฐฐํ์ ๋ฝ์ผ๋ก ๋๋์ด์ง๊ธดํจ
๊ณต์ ๋ฝ(Shared Lock)
๊ณต์ ๋ฝ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ์ฝ๊ธฐ ๋ช ๋ น์ ๋ํด ์ฃผ์ด์ง๋ ๋ฝ์ผ๋ก Read Lock์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ Shared์ ์ ๊ธ์๋ฅผ ๋ฐ์ ์ฃผ๋ก S๋ก ํ๊ธฐํ๋ค
์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์๋ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์, ๊ณต์ ๋ฝ๋ผ๋ฆฌ๋ ๋์์ ์ ๊ทผ์ด ๊ฐ๋ฅ → ์ฆ, ๋ด๊ฐ ๋ณด๊ณ ์๋ ๋ฐ์ดํฐ๋ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์์ง๋ง, ๋ณ๊ฒฝํ ์๋ ์์
๋ฒ ํ ๋ฝ(Exclusive Lock)
๋ฒ ํ ๋ฝ์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ฐํ๋ ์ฐ๊ธฐ ๋ช ๋ น๋ค์ ๋ํด ์ฃผ์ด์ง๋ ๋ฝ์ผ๋ก Write Lock์ผ๋ก๋ ๋ถ๋ฆฌ๋ฉฐ, X๋ก ํ๊ธฐํ๋ค
๋ฒ ํ ๋ฝ์ ์ด๋ฆ์ฒ๋ผ ๋ค๋ฅธ ์ธ์ ์ด ํด๋น ์์์ ์ ๊ทผ(ex, SELECT, INSERT..) ํ๋ ๊ฒ์ ๋ง๋๋ค. ์ด๋ฌํ ์ ์์ ๋ฒ ํ ๋ฝ์ ๋ฉํฐ ์ฐ๋ ๋ฉ ํ๊ฒฝ์์, ์๊ณ ์์ญ์ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ์ฉ๋๋ ๋ฎคํ ์ค์ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ฒ ํ ๋ฝ์ ํธ๋์ญ์ ๋์ ์ ์ง → ์ฆ, ์ฝ๊ธฐ์ ์ฐ๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅ
์ ๋ฐ์ดํธ ๋ฝ(Update Lock)
์ ๋ฐ์ดํธ ๋ฝ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ธฐ ์ํด ๋ฒ ํ ๋ฝ(X)์ ๊ฑธ๊ธฐ ์ , ๋ฐ๋ ๋ฝ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฝ์ด๋ค
์ผ๋ฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ ๋ฝ์ UPDATE ์ฟผ๋ฆฌ์ ํํฐ(WHERE)๊ฐ ์คํ๋๋ ๊ณผ์ ์์ ์ ์ฉ๋๋ค
๋ด์ฌ ๋ฝ(Intent Lock)
๋ด์ฌ ๋ฝ์ ์์ ์๊ฐํ ๋ฝ๋ค๊ณผ ์ฌ๋ญ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ๋ค
๋ด์ฌ ๋ฝ์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ฒ์์ ๋ํ ๋ฝ(ex, ํ ์ด๋ธ ๋ฝ)์ ๊ฑธ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฝ์ด๋ค. ๋ด์ฌ ๋ฝ์ ๊ณต์ ๋ฝ๊ณผ ๋ฒ ํ ๋ฝ ์์ I ๊ธฐํธ๋ฅผ ๋ถ์ธ IS, IX, SIX ๋ฑ์ด ์๋ค
๐ก๋ธ๋กํน (Blocking)
: Lock ๊ฐ์ ๊ฒฝํฉ(Race Condition)์ด ๋ฐ์ํ์ฌ ํน์ Transaction์ด ์์ ์ ์งํํ์ง ๋ชปํ๊ณ ๋ฉ์ถฐ์ ์ํ๋ฅผ ๋งํ๋ค. ๊ณต์ ๋ฝ๋ผ๋ฆฌ๋ ๋ธ๋กํน์ด ๋ฐ์ํ์ง ์์ง๋ง, ๋ฒ ํ๋ฝ์ ๋ธ๋กํน์ ๋ฐ์์ํจ๋ค.
๋ธ๋กํน์ ํด์ํ๊ธฐ ์ํด์๋ ์ด์ ํธ๋์ญ์ ์ด ์๋ฃ(commit or rollback) ๋์ด์ผ ํจ!!
- ๋ค์ ๋ค์ด์จ ํธ๋์ญ์ ์ ์ด์ ํธ๋์ญ์ ์ด ๋ง๋ฌด๋ฆฌ๋์ด์ผ ์ดํ ์งํ์ด ๊ฐ๋ฅํ๋ค.
- ์ฑ๋ฅ์ ์ข์ง ์์ ์ํฅ์ ๋ฏธ์น๋ค. ๋ฐ๋ผ์ ๊ฒฝํฉ์ ์ต์ํ ํ ํ์ → ํธ๋์ญ์ ์ฒ๋ฆฌ ์๊ฐ์ ์งง๊ฒ
๐ก๊ต์ฐฉ์ํ (DeadLock)
: ๊ต์ฐฉ์ํ๋ ๋ ํธ๋์ญ์ ์ด ๊ฐ๊ฐ Lock์ ์ค์ ํ๊ณ ์๋ก์ Lock์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ป์ด์ค๋ ค๊ณ ํ ๋ ์ด๋ฏธ ๊ฐ๊ฐ์ ํธ๋์ญ์ ์ ์ํด Lock์ด ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ชฝ ํธ๋์ญ์ ๋ชจ๋ ์์ํ ์ฒ๋ฆฌ๊ฐ ๋์ง์๊ฒ ๋๋ ์ํ
์์ ๊ฐ์ด ๊ฐ๊ฐ์ ํธ๋์ญ์ ์ Lock์ ๊ฑธ๊ณ ์๋๋ฐฉ Lock์ ์ ๊ทผํ์ฌ ๋ฐํ ๋ฐ์ง ๋ชปํ๋ ์ํฉ์์ Dead Lock์ด ๋ฐ์ํ๊ฒ ๋๋ค
์ถ์ฒ: https://devfunny.tistory.com/668
(์ํฉ ์์)1) Shared Lock + Exclusive Lock
= ํธ๋์ญ์ A๊ฐ Shared Lock์ ์ค์ ํ๊ณ sleep ๋์์๋, ํธ๋์ญ์ B๊ฐ ํด๋น ๋ฐ์ดํฐ์ Exclusive Lock์ ๊ฑธ๋ ค๊ณ ํ๋ฉด ๋ฌด๊ธฐํ ๊ธฐ๋ค๋ ค์ผํ๋ ๊ต์ฐฉ์ํ์ ๋น ์ง๊ฒ๋๋ค.
2) Exclusive Lock + Exclusive Lock
= ํธ๋์ญ์ A์์ Exclusive Lock์ ๊ฑธ์์๋ ํธ๋์ญ์ B์์๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์ Exclusive Lock์ ๊ฑธ์๋ค. ์ด ๊ฒฝ์ฐ ์๋ก์ Lock๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ค๊ณ ํ ๋ ๊ธฐ์กด์ Lock์ด ํด์ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ๋๋ค.
๐ก๊ต์ฐฉ์ํ (DeadLock) ํด๊ฒฐ๋ฐฉ๋ฒ
1. Dead Lock์ด ๊ฐ์ง๋๋ฉด ๋ ์ค ํ๋์ ํธ๋์ญ์ ์ ๊ฐ์ ์ข ๋ฃํ๋ค
์ค์ ๋ก, Oracle ์์๋ ๋ฐ๋๋ฝ์ด ๊ฐ์ง๋๋ฉด ํ์ชฝ Transaction์ ๊ฐ์ ๋ก ํ์ด๋ฒ๋ฆฐ๋ค
์ด๋ ๊ฒ ๋๋ฉด ํ๋์ ํธ๋์ญ์ A์ ๋ง์ง๋ง ์คํ ๋ด์ฉ์ ์ค๋ฅ๊ฐ ๋ฐ์๋๊ณ ์ปค๋ฐ์ด ๋ฐ์๋๋๋ก ์ ์งํ๋ค
๋ ๋ค๋ฅธ ํธ๋์ญ์ B๋ ์์ง ๋๊ธฐ์ค์ด๋ฉฐ, ํธ๋์ญ์ A์ ์ปค๋ฐ์ ๊ธฐ๋ค๋ฆฐ๋ค
2. Dead Lock ๋ฐฉ์ง๋ฅผ ์ํด ์ ๊ทผ ์์๋ฅผ ๋์ผํ๊ฒ ํ๋ ๊ฒ์ด ์ค์ →์ ๊ทผ ์์ ๊ท์น์ ์ ํด์ผ ํจ
์ถ์ฒ ๋ฐ ์ฐธ๊ณ ์๋ฃ
'CS > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MySQL] View์์ฑ ๋ฐ ์ญ์ (0) | 2022.09.14 |
---|---|
[DB] JDBC ํ ์คํธ (0) | 2022.09.14 |
[MySQL] Mac์์ ์ดํด๋ฆฝ์ค MySQL ์ฐ๋ํ๊ธฐ (MySQL Connector Java) (0) | 2022.09.14 |
[DB] ๋งฅM1_MySQL ๋ค์ด Workbench (0) | 2022.09.12 |
[DB] ๐ก๋ ๋์ค(Redis)๋? (0) | 2022.09.08 |