Shared/Exclusive Lock
Lock
Lock์ DBMS์์ ๋์์ฑ ์ ์ด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ์ปค๋์ฆ ์ค ํ๋์ด๋ฉฐ, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
ํธ๋์ญ์
์ ์์ํ ๋, ๋ณ๊ฒฝ ๋์ row์ lock์ ์ค์ ํ๋ค. ๋ง์ฝ ๋ณ๊ฒฝ ๋์ row์ lock์ด ๊ฑธ๋ ค์๋ค๋ฉด lock์ ํ๋ํ ํธ๋์ญ์
์ด ๋ฐ๋ฉํ๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ํธ๋์ญ์
์ ๋๊ธฐ ํ๊ฒ๋๋ค. ๋๊ธฐํ๋ ์๊ฐ์ ๋ํด โlock timeoutโ์ ์ค์ ํ ์ ์์ผ๋ฉฐ ๊ทธ ์๊ฐ์ด ์ง๋๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
lock์ ํ๋ํ๋ ์ฃผ์ฒด๋ โ์ธ์
โ์ด๋ฉฐ, ๋จ์ํ ๋ฐ์ดํฐ ์กฐํ(select)์๋ lock์ ์ค์ ํ ํ์๊ฐ ์์ง๋ง, ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ DB์ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์กฐํ ์ lock์ด ์์ผ๋ฉด โdirty readโ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ณต์ ๋ฝ (Shared Lock, s-lock)
๊ณต์ ๋ฝ์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋๋ก ํ์ฉํ๋ค. ํ์ง๋ง ์ฐ๊ธฐ(write) ์์ ์ ํ๊ธฐ ์ํด์๋ ๋๊ธฐํด์ผ ํ๋ค.
table lock๊ณผ row๋ฝ ๋ชจ๋ ์ ์ฉ ๊ฐ๋ฅํ๊ณ s lock์ด ๊ฑธ๋ ค์์ด๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด s lock์ ๊ฑธ ์ ์๋ค.
table lock์ ๋ชจ๋ row์ ๋ํ์ฌ lock์ ์ค์ ํ๋ค.
lock ์ค์ ๋ฐฉ๋ฒ
# Mysql v5.7
SELECT .. FROM .. WHERE .. LOCK IN SHARE MODE;
# Mysql v8.0
SELECT .. FROM .. WHERE .. FOR SHARE;
LOCK TABLE TABLE_NAME READ; // table lock
UNLOCK TABLES;ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ์ํด์ ๋จผ์ auto commit ์ต์ ์ ๋์.

ํ ์ด๋ธ ์์ฑ ๋ฐ row๋ฅผ ์ถ๊ฐํ๊ณ s lock์ ์ค์ ํ๋ค. ๋ค๋ฅธ session์์ write ์์ ์ ํ๋ ค๋ฉด ๋๊ธฐํด์ผ ํ๊ณ , ๋๊ธฐ์๊ฐ์ ์ด๊ณผํ๋ฉด timeout ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค. lock์ ํ๋ํ ํธ๋์ญ์ ์์ commit์ ์ํํ๋ฉด ๋๊ธฐํ๋ ํธ๋์ญ์ ์ lock์ ํ๋ํ๊ณ write ์์ ์ ํ ์ ์๋ค.
๋ฒ ํ ๋ฝ (Exclusive Lock, x-lock)
๋ฒ ํ ๋ฝ์ read/write์ ๋ํ lock์ด๋ค. ํธ๋์ญ์ ์ด x lock์ ํ๋ํด์ผ์ง๋ง read/write๊ฐ ๊ฐ๋ฅํ๋ค.
Row Level Lock, ํน์ row๋ฅผ ๋ณ๊ฒฝ ๋๋ ์ญ์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
Write Lock์ด๋ผ๊ณ ๋ ํ๋ค.ํ๋์ row์ ํ๋์ x lock์ ์ค์ ํ ์ ์๋ค.
x lock์ด ์ค์ ๋ row๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น row์ ๋ํด์ s/x lock์ ๊ฑธ ์ ์๋ค.
lock ์ค์ ๋ฐฉ๋ฒ

ํ ์ธ์ ์ด ํธ๋์ญ์ ์ ์์ํ๊ณ x lock์ ์ค์ ํ๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์์ lock ์์ฒญ์ ํ๊ฒ๋๋ฉด ๋ชจ๋ ๋๊ธฐํ๊ฒ ๋๋ค.
Last updated