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