๐ป [Theory] ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฝ(lock)
๐ป [Theory] ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฝ(lock)
์ด๋ฒ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฝ(lock)์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ฌ์ค locking ๊ธฐ๋ฒ์ ์ง์ ์ ์ผ๋ก db์ lock ์ ๊ฑธ์ง ์๊ณ Version์ ํ์ธํ์ฌ ๋์์ฑ์ ์ ์ดํ๋ ๋ฐฉ์์ธ
Optimistic Lock(๋๊ด์ ๋ฝ) ๊ธฐ๋ฒ๋ ์์ต๋๋ค. (์ ํ๋ฆฌ์ผ์ด์
๋จ์์์ lock)
ํ์ง๋ง ์ด๋ฒ ํฌ์คํธ์์ ๋ค๋ฃจ๋ lokc์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋จ์์ lock ํ๋ Pessimistic Lock(๋น๊ด์ ๋ฝ)์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
์ถํ ํฌ์คํธ์์ Optimistic Lock ๊ณผ Pessimistic Lock์ ๋ํด์ ๋ค์ ์์ธํ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ(lock)์ด๋ ๋ฌด์์ธ๊ฐ?
Record locking is the technique of preventing simultaneous access to data in a database, to prevent inconsistent results.
๋ ์ฝ๋ ์ ๊ธ์ ์ผ๊ด์ฑ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ์ ๋ํ ๋์ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํ๋ ๊ธฐ์ ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ์ ๊ฐ์ ์์์ ์ก์ธ์คํ๋ ๋ค์ค ํธ๋์ญ์ ํ๊ฒฝ์์ DB์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด ํธ๋์ญ์ ์ ์์ฐจ์ ์งํ์ ๋ณด์ฅํ๋ ์ง๋ ฌํ ๊ธฐ๋ฒ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ(lock)์ ์ข ๋ฅ
Lock์ ์ข ๋ฅ๋ ํฌ๊ฒ Shared Lock, Exclusive Lock๋ก ๋๋๋ค.
Shared Lock (๊ณต์ ๋ฝ)
- Read Lock ์ด๋ผ๊ณ ๋ ํ๋ค.
- ๊ณต์ Lock์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์ฌ์ฉ๋์ด์ง๋ Lock์ด๋ค.
- ๊ณต์ Lock ์ ๊ฐ์ ๊ณต์ Lock ๋ผ๋ฆฌ๋ ๋์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ํด์น์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๊ฐ ๋ฟ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
- ๋ฒ ํ Lock์ ๊ฑธ ์๋ ์๋ค.
Exclusive Lock (๋ฒ ํ ๋ฝ)
- Write Lock์ด๋ผ๊ณ ๋ ํ๋ค.
- ๋ฒ ํ Lock์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
- ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ง๋๋ค.
- ๋ฒ ํ Lock์ Lock์ด ํด์ ๋ ๋๊น์ง ๋ค๋ฅธ ํธ๋์ญ์ (์ฝ๊ธฐ ํฌํจ)์ ํด๋น ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ค.
- ๋ฒ ํ Lock๊ฐ ๋์ด์๋ ๋ฐ์ดํฐ์ ๋ํด์ ์ด๋ ํ Lock๋ ์ค์ ํ ์ ์๋ค.
Lock์ ์ค์ ๋ฒ์(Level)
- โป ํ(Row)
- ํ ์์ค์ Lock์ 1๊ฐ์ ํ(Row)๋ฅผ ๊ธฐ์ค์ผ๋ก Lock ์ค์ ์ ํ๋ค.
- DML์ ๋ํ Lock์ผ๋ก ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ Lock์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์์ lock์ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก lock ํ๋ ๊ฒ์ด๋ค.
- ์ฆ, 1๊ฐ์ ์ธ์ ๋ง์ด DB์ ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ํด๋น ๊ธฐ๋ฅ์ ์ผ๋ฐ์ ์ผ๋ก๋ ์ฌ์ฉํ์ง ์๋๋ค.
- ์ฌ์ฉํ๋ ๋๊ฐ ์๋ค๋ฉด DB์ ์ํํธ์จ์ด ๋ฒ์ ์ ์ฌ๋ฆฐ๋ค๋์ง ์ฃผ์ํ DB์ ์ ๋ฐ์ดํธ์ ์ฌ์ฉํ๋ค.
- ํ์ผ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ ๊ธฐ์ค์ผ๋ก lock์ ์ค์ ํ๋ค.
- ํ์ผ ์ด๋ ํ ์ด๋ธ, row ๋ฑ๊ณผ ๊ฐ์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ฐ์ฌ์ง๋ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ์์ด๋ค.
- ํด๋น ๋ฒ์์ Lock์ ์ ์ฌ์ฉ๋์ง๋ ์๋๋ค.
- ํ
์ด๋ธ
- ํ ์ด๋ธ ์์ค์ Lock์ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก Lock์ ์ค์ ํ๋ค.
- ์ด๋ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์ ๋ฐ์ดํธ ํ๋ ๋ฑ์ ์ ์ฒด ํ ์ด๋ธ์ ์ํฅ์ ์ฃผ๋ ๋ณ๊ฒฝ์ ์ํํ ๋ ์ ์ฉํ๋ค.
- ์ฆ, DDL(create, alter, drop ๋ฑ) ๊ตฌ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ DDL Lock์ด๋ผ๊ณ ๋ ํ๋ค.
- ํ์ด์ง์ ๋ธ๋ญ
- ํ์ผ์ ์ผ๋ถ์ธ ํ์ด์ง์ ๋ธ๋ก์ ๊ธฐ์ค์ผ๋ก Lock์ ์ค์ ํ๋ค. ์ ์ฌ์ฉ๋์ง๋ ์๋๋ค.
- ์ปฌ๋ผ
- ์ปฌ๋ผ ๊ธฐ์ค์ Lock์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก Lock์ ์ค์ ํ ์ ์๋ค.
- ํ์ง๋ง ์ด ํ์์ Lock ์ค์ ๋ฐ ํด์ ์ ๋ฆฌ์์ค๊ฐ ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ ์๋๋ค.
- ์ง์ํ๋ DBMS๋ ๋ง์ง ์๋ค.
##๋ธ๋กํน(Blocking)
- ๋ธ๋กํน์ Lock๊ฐ(๋ฒ ํ - ๋ฒ ํ, ๋ฒ ํ - ๊ณต์ )์ ๊ฒฝํฉ์ด ๋ฐ์ํ์ฌ ํน์ Transaction์ด ์์ ์ ์งํํ์ง ๋ชปํ๊ณ ๋ฉ์ถฐ์ ์ํ๋ฅผ ๋งํ๋ค.
- ๊ณต์ Lock ๋ผ๋ฆฌ๋ ๋ธ๋กํน์ด ๋ฐ์ํ์ง ์์ง๋ง ๋ฒ ํLock์ ๋ธ๋กํน์ ๋ฐ์์ํจ๋ค(์ ๊ทผ์ด ๋ถ๊ฐํ๊ธฐ ๋๋ฌธ).
- ๋ธ๋กํน์ ํด์ํ๊ธฐ ์ํด์๋ ์ด์ ์ ํธ๋์ญ์ ์ด ์๋ฃ(์ปค๋ฐ OR ๋กค๋ฐฑ)๋์ด์ผ ํ๋ค.
- ๋ค์ ๋ค์ด์จ ํธ๋์ญ์ ์ ์ด์ ํธ๋์ญ์ ์ด ๋ง๋ฌด๋ฆฌ๋์ด์ผ ์ดํ ์งํ์ด ๊ฐ๋ฅํ๋ค.
- ์ด๋ฐ ๊ฒฝํฉ์ ์ฑ๋ฅ์ ์ข์ง ์์ ์ํฅ์ ๋ฏธ์น๋ค.
- ๋ฐ๋ผ์ ๊ฒฝํฉ์ ์ต์ํ ํ ํ์๊ฐ ์๋ค.
Blocking ํด๊ฒฐ ๋ฐฉ์
- ํ ํธ๋์ญ์ ์ ๊ธธ์ด๋ฅผ ๋๋ฌด ๊ธธ๊ฒํ๋ ๊ฒ์ ๊ฒฝํฉ์ ํ๋ฅ ์ ๋์ธ๋ค.
- ๋์ผ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๋ณ๊ฒฝํ๋ ์์ ์ ๋ฐฐ์ ํ๋ค. ํธ๋์ญ์ ์ด ๋ง์ ์๊ฐ์๋ ๋์ฉ๋ ๊ฐฑ์ ์์ ์ ์์ ํด์ผ ํ๋ค.
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ถํ์ํ๊ฒ ์ํฅ ์กฐ์ ํ์ง ์๋๋ค.
- ์ฟผ๋ฆฌ๋ฅผ ์ค๋์๊ฐ ์ก์๋์ง ์๋๋ก ์ ์ ํ ํ๋์ ์งํํ๋ค.
- lock timeout์ ํตํด Lock์ ์ต๋ ์๊ฐ์ ์ง์ ํ ์ ๋ ์๋ฐ.
##๊ต์ฐฉ ์ํ(Dead Lock)
- ๊ต์ฐฉ์ํ๋ ๋ ํธ๋์ญ์ ์ด ๊ฐ๊ฐ Lock์ ์ค์ ํ๊ณ ๋ค์ ์๋ก์ Lock์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ป์ด์ค๋ ค๊ณ ํ ๋ ์ด๋ฏธ ๊ฐ๊ฐ์ ํธ๋์ญ์ ์ ์ํด Lock์ด ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ชฝ ํธ๋์ญ์ ๋ชจ๋ ์์ํ ์ฒ๋ฆฌ๊ฐ ๋์ง์๊ฒ ๋๋ ์ํ์ด๋ค.
์์ ๊ฐ์ด ๊ฐ๊ฐ์ ํธ๋์ญ์ ์ Lock์ ๊ฑธ๊ณ ์๋๋ฐฉ Lock์ ์ ๊ทผํ์ฌ ๋ฐํ ๋ฐ์ง ๋ชปํ๋ ์ํฉ์์ Dead Lock์ด ๋ฐ์ํ๊ฒ ๋๋ค.
Dead Lock ํด๊ฒฐ ๋ฐฉ์
- Dead Lock ์ํฉ์ด ๊ฐ์ง๋๋ฉด ์ผ๋ฐ์ ์ผ๋ก ํ๋๋ฅผ ๊ฐ์ ๋ก ์ค์ง์์ผ ํ ํธ๋์ญ์ ์ ์ ์์ ์ผ๋ก ์คํ๋๋ฉฐ ์ค์ง๋ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ ์๋ ์ํ๋ก ๋๋๋ ค ๋์ต๋๋ค.
- Dead Lock ๋ฐฉ์ง๋ฅผ ์ํด ์ ๊ทผ ์์๋ฅผ ๋์ผํ๊ฒ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ๊ทผ ์์ ๊ท์น์ ์ ํด์ผ ํฉ๋๋ค.
- SET LOCK_TIMEOUT๋ฌธ์ ์ด์ฉํ์ฌ ์ ๊ธํด์ ์๊ฐ์ ์กฐ์
๋
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ(lock)์ ๋ํด ์์๋ณด์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๐
Reference
http://wiki.gurubee.net/display/STUDY/1.Lock