๐ฅย Concurrency Control ๋์์ฑ ์ ์ด
- ํธ๋์ญ์
๋ค์ด ๋์์ ์ํ๋ ๋ ์ผ๊ด์ฑ์ ํด์น์ง ์๋๋ก ๋ฐ์ดํฐ ์ ๊ทผ์ ์ ์ดํ๋ DBMS ๊ธฐ๋ฅ
- ๊ฐ์ ๋ฐ์ดํฐ์ ๋ค๋ฅธ Read / Write ๊ฐ ์๋ค๋ฉด ์์์น ๋ชปํ ๋์ ๊ฐ๋ฅ์ฑ
- DB์์ ํ์ฉ ๊ฐ๋ฅํ ๋์์ฑ ์ ์ด ๊ธฐ์ =
Lock
NonSerializable
- ๊ฐ์ ๋ฐ์ดํฐ์ ๋ํ ์ฌ๋ฌ ํธ๋์ญ์
์ ๋์ ์ ๊ทผ์ผ๋ก ์๋์ ๊ฒฐ๊ณผ์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒ
- ์ฐ๋ฆฌ๋
Serializable
ํ DBํ๊ฒฝ์ ๋ง๋ค๊ธฐ ์ํด์ Lock ์ ์ฌ์ฉํจ
๐ย Lock
๐ย Optimistic Lock ๋๊ด์ ์ ๊ธ
์ ์
- ๋ฐ์ดํฐ
๊ฐฑ์ ์ ๊ฒฝํฉ์ด ๋ฐ์ํ์ง ์์ ๊ฒ
์ด๋ผ๊ณ ๋ด
Lock ๋ฐฉ์
- ํ ํธ๋์ญ์
์์
์
๋ฐ์ดํธ ์๋ฃ ์
, ๋์์ ์
๋ฐ์ดํธ ํ์ฝ์ ์๋ํ๋ ๋ค๋ฅธ ์ฌ์ฉ์๋ค์๊ฒ ์ถฉ๋ ์๋ฆผ
๋ฒ์ ์ฝ๊ธฐ
๋ก ์ถฉ๋ ๊ฐ์ง
โ ๋์์ฑ ์ ์ด
- Read, Write ์์ ์
๋ฒ์ ์ฝ๊ธฐ
- Read Version = Write Version โ
Version Update
- Read Version โ Write Version โ
Conflict
์ ์ฉ
- ๋์ ์
๋ฐ์ดํธ ๊ฑฐ์ ์๋ ๊ฒฝ์ฐ
๐งย Pessimistic Lock ๋น๊ด์ ์ ๊ธ
์ ์
๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์์ ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค
๊ณ ๋ด
Lock ๋ฐฉ์
- ๊ฐ ํธ๋์ญ์
์ ํ ํธ๋์ญ์
์ด ์
๋ฐ์ดํธ ํ์ฝ ํ ๋ ์ฝ๋
์ ๊ธ
์ ํด์ ํ ๋๊น์ง ๋๊ธฐ
ํด์ผ ํจ.
์ ๊ธ / ํด์
-> ๋์์ฑ ์ ์ด
Lock
- ํธ๋์ญ์
๋์ ํ์ํ ๋ ์ฝ๋์ ์ ๊ธ ์ค์
- ๋ค๋ฅธ ํธ๋์ญ์
์ ์ ๊ทผ ๊ฑฐ๋ถ
Unlock
- ํธ๋์ญ์
์ข
๋ฃํ์ฌ ํ์์น ์์ผ๋ฉด ํด์ ์ค์
- ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ๋ค๋ฅธ ํธ๋์ญ์
์ ๊ทผ ๋ฐ ์ ๊ธ ํ์ฉ
์ ์ฉ
- ๋์ ์
๋ฐ์ดํธ ๋น๋ฒํ ๊ฒฝ์ฐ
- ์ธ๋ถ ์์คํ
๊ณผ ์ฐ๋ํ ๊ฒฝ์ฐ
์ข
๋ฅ
- ๊ณต์ Lock
- ๋ฐฐํ Lock
- ์
๋ฐ์ดํธ Lock
- ๋ด์ฌ Lock
![์ฐํ
์ฝ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ ์ถ์ฒ](https://velog.velcdn.com/images/onetuks/post/65726b11-689a-411d-bf2a-31517e9ee780/image.png)
๊ณต์ฉ(Shared)
Lock : S-Lock
/ Read-Lock
Read ํ ๋ ์ฌ์ฉ
ํ๋ ๋ฝ
- ๋ค๋ฅธ ํธ๋์ญ์
์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ
read ํ๋ ๊ฒ์ ํ์ฉ
- ๋ฐ์ดํฐ ์ฌ์ฉ๊ถ์ ์ฌ๋ฌ ํธ๋์ญ์
์ด ํจ๊ป ๊ฐ์ง ์ ์์
- ์ฌ๋ฌ ํธ๋์ญ์
์ด
์ฝ๊ธฐ๋ง ๊ฐ๋ฅ
๋ฐฐํ(Exclusive)
Lock : X-Lock
/ Write-Lock
Read, Write ํ ๋ ์ฌ์ฉ
ํ๋ ๋ฝ
๋ฐฐํ Lock์ ๊ฑด ํธ๋์ญ์
๋ง
ํด๋น ๋ฐ์ดํฐ์ ๋ํ ๋
์ ๊ถ์ ๊ฐ์ง
- ๋ค๋ฅธ ํธ๋์ญ์
์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ
read/write ํ๋ ๊ฒ์ ํ์ฉํ์ง ์์
์
๋ฐ์ดํธ(Update)
Lock : U-Lock
/ Update-Lock
- Update ์ฟผ๋ฆฌ์
where ํํฐํ ๋ ์ฌ์ฉ
ํ๋ ๋ฝ
- ๋ฐฐํ ๋ฝ ์คํ ์
๋ฐ๋๋ฝ ๋ฐฉ์ง
๋ฅผ ์ํด ์ฌ์ฉ
๋ด์ฌ(Intent)
Lock : I-Lock
- ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ฒ์์ ๋ํ
๋ฝ์ ๊ฑธ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋น ๋ฅด๊ฒ ํ๋จํ๊ธฐ ์ํด ์ฌ์ฉ
ํ๋ ๋ฝ
๐ฐย lock ์ ๋จ์
![](https://velog.velcdn.com/images/onetuks/post/cf024930-3334-4c49-a2ea-6b70291881f1/image.png)
๐ณย Lock Escalation
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ ๊ด๋ จ
๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
๊ธฐ๋ฒ
- Lock ์ด ๊ฑธ๋ฆฌ๋ฉด, ๋ฝ์ด ๊ฑธ๋ฆฐ ๋์๊ณผ ๊ทธ ์์ ๋ฝ ๋จ์์ ๋ํด์ ๋ด์ฌ ๋ฝ์ด ํจ๊ป ์์ฑ๋จ.
- Lock ์์ฒด์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์์ ์๋ชจ๋จ.
- ํ
์ด๋ธ ๋ด ์ผ์ ๋น์จ ์ด์ ๋ฝ ์์ฑ ์ ๋ ์ฝ๋ ๋จ์๊ฐ ์๋, ํ
์ด๋ธ์ ๋ฝ ์ค์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ต์ ํ
๐ชซ Lock์ ์จ๋ ๋ฐ์ํ๋ ๋ฌธ์ ํด๊ฒฐ๋ฒ
- ๋ฝ ๊ฑธ๋ฆฌ๋ ์์ ์ ๋ฐ๋ฅธ ์ฐจ์ด
![์ฌ์ด์ฝ๋ ์ ํ๋ธ ์ถ์ฒ](https://velog.velcdn.com/images/onetuks/post/f4ca1737-806e-46ef-ac10-5004d0194862/image.png)
![](https://velog.velcdn.com/images/onetuks/post/38ec3220-9783-4134-baf1-e158edee5cf7/image.png)
- ์ด๋ ๊ฒ ๋ฝ์ ๊ฑฐ๋ ์์ ์ ๋ฐ๊พธ๊ธฐ๋ง ํด๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
2PL(2-Phase Locking) Protocol
- ํธ๋์ญ์
์์
๋ชจ๋ Locking Operation
์ด ์ต์ด์ Unlocking Operation ๋ณด๋ค ๋จผ์ ์ํ
๋๋๋ก ํ๋ ๊ฒ
๋ฐ๋๋ฝ ๋ฐ์
๊ฐ๋ฅ
![](https://velog.velcdn.com/images/onetuks/post/b25155b4-7b5f-4b02-a0c2-bcfb2d2f9c38/image.png)
Conservative 2PL
- ๋ชจ๋ Lock ์ทจ๋ํ ๋ค ํธ๋์ญ์
์์
- ๋ฐ๋๋ฝ ๋ฐ์ํ์ง ์์
- ์ค์ฉ์ ์ด์ง ์์
read_lock(x)
write_lock(y)
write_lock(z)
read(x)
unlock(x)
read(y)
read(z)
write(y = x+y+z)
unlock(y)
write(z = 2 * x)
unlock(z)
Strict 2PL (S2PL)
- Strict Schedule ๋ณด์ฅํ๋ 2PL
- Recoverability ๋ณด์ฅ
- ๋ฐฐํ ๋ฝ์ commit / rollback ํ ๋ ๋ฐํ
read_lock(x)
write_lock(y)
write_lock(z)
read(x)
unlock(x)
read(y)
read(z)
write(y = x+y+z)
write(z = 2 * x)
commit
unlock(y)
unlock(z)
Strong Strict 2PL (SS2PL / Rigorous 2PL)
- S2PL ํ์ฅํ
- ๊ณต์ ๋ฝ (read-lock), ๋ฐฐํ ๋ฝ (write-lock) ๋ชจ๋ commit / rollback ์ ๋ฐํ
- S2PL ๋ณด๋ค ์ฌ์ด ๊ตฌํ
- ๋ฝ ์์ ์ด ๊ธธ์ด์ง๋ฏ๋ก, ์ฑ๋ฅ ์
ํ
๐ชย Lock์ ์ฌ์ฉํด์ ๋ฐ์ํ๋ ๋ฌธ์
- ๊ฒฐ๋ก
- ๋ฝ ์๊ฐ ์ ํ, ๋ฝ ํฌ๊ธฐ ์ ํ, ํธ๋์ญ์
๋ฒ์ ์ถ์ ๋ฑ ๋ฝ์ ์ํ ์๋์น ์์ ์ํฉ์ ์ค์ผ ์ ์๋ ์ค๊ณ๋ฅผ ๊ณ ๋ คํ ๊ฒ
Blocking
Lock ๊ฐ ๊ฒฝํฉ
๋ฐ์ํด ํน์ ์ธ์
์ด ์์
์งํํ์ง ๋ชปํ๊ณ ๋ฉ์ถ ์ํ
๋ฐฐํ ๋ฝ ๊ฑธ๋ฆฌ๋ฉด ๋ค๋ฅธ ํธ๋์ญ์
์ ์ด๋ ํ lock ๋ ๋ชป ๊ฑธ๊ณ ๋๊ธฐ
ํ๊ธฐ ๋๋ฌธ
- ํธ๋์ญ์
commit ํน์ rollback ์์ ์ ๋ธ๋กํน ํด์
- ํด๊ฒฐ๋ฐฉ์
- ํธ๋์ญ์
์ ์งง๊ฒ ์ ์
- ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ ํธ๋์ญ์
์ด ๋์์ ์ํ๋์ง ์๋๋ก ์ค๊ณ
- lock timeout์ ์ด์ฉํ์ฌ ์ ๊ธํด์ ์๊ฐ ์กฐ์
Deadlock ๊ต์ฐฉ์ํ
- ํด๊ฒฐ๋ฐฉ์
- ํธ๋์ญ์
์งํ๋ฐฉํฅ์ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์ฒ๋ฆฌ
- ๋ธ๋กํน์ ๋ฐ์ํ ์ ์์ง๋ง ๋ฐ๋๋ฝ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์์ด์ง
- ํธ๋์ญ์
์ฒ๋ฆฌ์๋๋ฅผ ์ต์ํ
- lock timeout์ ์ด์ฉํ์ฌ ์ ๊ธํด์ ์๊ฐ์ ์กฐ์