๐Ÿ“Œ ํŠธ๋žœ์žญ์…˜๊ณผ MVCC

Tina Jeongยท2024๋…„ 10์›” 14์ผ
1
post-thumbnail

ํŠธ๋žœ์žญ์…˜๊ณผ MVCC์— ๋Œ€ํ•ด์„œ ์• ๋งคํ•˜๊ฒŒ ๋„˜์–ด๊ฐ”๋˜ ๋ถ€๋ถ„์„ ์ •๋ฆฌํ•˜๊ณ , ํ›„๋ฃจ๋ฃฉ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ธฐ ์œ„ํ•ด ์ •๋ฆฌํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ์˜ ํŠธ๋žœ์žญ์…˜์€ ์ž‘์—…์˜ ์ตœ์†Œ ๋‹จ์œ„๋‹ค.
ํŠธ๋žœ์žญ์…˜์€ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ์ž‘์—…์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณตํ•˜๋ฉด ๋ชจ๋“  ์ž‘์—…์ด ๋ฐ˜์˜(commit)๋˜๊ณ , ์‹คํŒจํ•˜๋ฉด ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ„๋‹ค.(rollback)

ACID? ์•ก์‹œ๋“œ?

์ด๋ฅผ ์œ„ํ•ด ACID๋ผ๋Š” ๋„ค ๊ฐ€์ง€ ํŠน์ง•์„ ์ถฉ์กฑํ•ด์•ผ ํ•œ๋‹ค.
๋ฌด์ง€์„ฑ์œผ๋กœ DB๋ฅผ ๋ฏฟ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐœ๋ฐœ์ž๋„ ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

  1. ์›์ž์„ฑ(Atomicity): ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ์ž‘์—…์ด ์ „๋ถ€ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ์ „๋ถ€ ์‹คํŒจํ•ด์•ผ ํ•œ๋‹ค. (DBMS๊ฐ€ ๋ณด์žฅ)
  2. ์ผ๊ด€์„ฑ(Consistency): ํŠธ๋žœ์žญ์…˜ ์ „ํ›„์— ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์ด ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค. (๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด์žฅ)
  3. ๊ฒฉ๋ฆฌ์„ฑ(Isolation): ๊ฐ ํŠธ๋žœ์žญ์…˜์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์ค‘๊ฐ„ ์ƒํƒœ๋ฅผ ๋ณด์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. (๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด์žฅ)
  4. ์˜์†์„ฑ(Durability): ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณตํ•˜๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋Š” ์‹œ์Šคํ…œ ์˜ค๋ฅ˜์—๋„ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค. (DBMS๊ฐ€ ๋ณด์žฅ)

๊ทธ๋Ÿฌ๋‚˜ ACID ํŠน์„ฑ์ด ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ ๋ณด์žฅ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
Serializable ์ˆ˜์ค€์—์„œ๋งŒ ๋ชจ๋“  ํŠน์„ฑ์ด ์™„๋ฒฝํžˆ ์ง€์ผœ์ง€๊ณ , ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ๋Š” ์„ฑ๋Šฅ๊ณผ ๋™์‹œ์„ฑ์„ ์œ„ํ•ด ์ผ๋ถ€ ํŠน์„ฑ์„ ์–‘๋ณดํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ์‹œ
Read Committed : Dirty Read X , Non-Repeatable Read(NRR)์™€ Phantom Read(PR) O
๊ฐœ๋ฐœ์ž๋Š” NRR, PR ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€๊ณผ ์ด์ƒ ํ˜„์ƒ(Anomaly)

์š”์•ฝ. ์™ธ์šฐ์ž.

  • Read Uncommitted: Dirty Read, NRR, PR ๊ฐ€๋Šฅ
  • Read Committed: Dirty Read ๋ฐฉ์ง€, NRR, PR ๊ฐ€๋Šฅ
  • Repeatable Read: Dirty Read, NRR ๋ฐฉ์ง€, PR ๊ฐ€๋Šฅ
  • Serializable: ๋ชจ๋“  ์ด์ƒ ํ˜„์ƒ ๋ฐฉ์ง€

Serializable์ด ๊ฐ€์žฅ ๋†’์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€, ์„ฑ๋Šฅ ์ €ํ•˜์™€ ๋ฐ๋“œ๋ฝ ์œ„ํ—˜์ด ๋†’๋‹ค.
๋ฐ˜๋ฉด, Read Committed๋Š” ์„ฑ๋Šฅ์€ ๋›ฐ์–ด๋‚˜์ง€๋งŒ ์ผ๊ด€์„ฑ ๋ณด์žฅ์ด ์•ฝํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ถ”๊ฐ€๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

MVCC์™€ ๋™์‹œ์„ฑ ์ œ์–ด

๋‹ค์ค‘ ๋ฒ„์ „ ๋™์‹œ์„ฑ ์ œ์–ด(MVCC)๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ณด๋‹ค ์šฐ์•„ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์ด๋‹ค.
MVCC๋Š” ๋ฐ์ดํ„ฐ์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ์œ ์ง€ํ•ด ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ์ถฉ๋Œ์„ ํ”ผํ•œ๋‹ค.
ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ, ํ˜„์žฌ ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์‹œ์ ์˜ ์Šค๋ƒ…์ƒท์„ ์ฐธ์กฐํ•œ๋‹ค.
๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

Non-Repeatable Read/ Phantom Read ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ,
์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

MySQL๊ณผ MariaDB๋Š” Repeatable Read ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ MVCC๋ฅผ ์‚ฌ์šฉํ•ด ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋™์‹œ์„ฑ ์ œ์–ด์™€ Lock

๊ทธ๋Ÿฌ๋ฉด ๊ฐœ๋ฐœ์ž๋Š”๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋‚™๊ด€์  ๋ฝ(Optimistic Lock)๊ณผ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock)์ด๋‹ค.

  • ๋‚™๊ด€์  ๋ฝ: ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ๋Š” ๋ฝ์„ ๊ฑธ์ง€ ์•Š์ง€๋งŒ, ๋ณ€๊ฒฝ์„ ์‹œ๋„ํ•  ๋•Œ ๋ฝ์„ ๊ฑฐ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋น„๊ด€์  ๋ฝ: ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ๋ถ€ํ„ฐ ๋ฝ์„ ๊ฑธ์–ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•œ๋‹ค. ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์ƒํ™ฉ์—์„œ ์ ํ•ฉํ•˜๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฝ์„ ์„ ํƒํ•ด ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ์„ฑ๋Šฅ์„ ์ด์œ ๋กœ ๋ฝ์„ ๊ฑธ์ง€ ์•Š๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŠนํžˆ, ์Šต๊ด€์ ์œผ๋กœ ์“ฐ๋Š” MSSQL์˜ WITH (NOLOCK)์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋‚จ์šฉํ•˜๋ฉด, Dirty Read ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
Keep exploring, ๊ณ„์† ํƒ์ƒ‰ํ•˜์„ธ์š”.

0๊ฐœ์˜ ๋Œ“๊ธ€