๊ด€๋ฆฌ ๋ฉ”๋‰ด

โœ๐Ÿป๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ

Transaction Isolation ๋ ˆ๋ฒจ ๋ณธ๋ฌธ

DB/RDBMS

Transaction Isolation ๋ ˆ๋ฒจ

์ฉ์‹œํ‚ด 2023. 1. 9. 19:41
728x90

ํŠธ๋žœ์žญ์…˜ Isolation์„ค๋ช…์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์šฉ์–ด๋ฅผ ๋จผ์ € ์ •๋ฆฌํ•˜์ž.

Transaction

  • ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ
  • db read, write์ž‘์—…์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ๋Š” ๋ฐฉ์‹
  • ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์€ ์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ฉด commit, ์‹คํŒจ ์‹œ rollback์„ ํ•˜๋ฏ€๋กœ ๋ถ€๋ถ„์„ฑ๊ณต, ๋ถ€๋ถ„ ์‹คํŒจ(Partial Update)์˜ ์œ„ํ—˜์ด ์—†์Œ

Lock

  • ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ
  • ์—ฌ๋Ÿฌ ์ปค๋„ฅ์…˜์—์„œ ๋™์‹œ์— ๋™์ผํ•œ ์ž์›์„ ์š”์ฒญํ•  ๊ฒฝ์šฐ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์—ญํ• 

Isolation level

  • ๋™์‹œ์— ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์ง„ํ–‰ ๋ ๋•Œ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ์ค€
  • ์ผ๋ฐ˜์ ์ธ ์„œ๋น„์Šค์—์„œ๋Š” Read Commited, Repeatable Read๋ฅผ ์‚ฌ์šฉ

Transaction Isolation

Read Commited

๋Œ€๋ถ€๋ถ„์˜ DBMS์—์„œ์˜ ๊ธฐ๋ณธ ์„ค์ •

  • ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์Œ
  • dirty read๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ
  • Non-Repeatable Read ๋ฐœ์ƒ ๊ฐ€๋Šฅ

Read Uncommited

  • postgresql์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์Œ
  • ๊ฐ ํŠธ๋žœ์žญ์…˜์—์„œ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด Commit, Rollback ์—ฌ๋ถ€ ์ƒ๊ด€์—†์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์กฐํšŒ๋จ
  • dirty read ๋ฐœ์ƒ ๊ฐ€๋Šฅ

Repeatable Read

  • Undo ์˜์—ญ์˜ ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋™์ผ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ฐ™์€ ๊ฒฐ๊ณผ ๋ณด์žฅ
  • MySql์˜ InnoDB ์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€
    • MVCC(Multi Version Concurrency Control)
      • InnoDB์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ํŠธ๋žœ์žญ์…˜์ด Rollback ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€๋น„ํ•ด ๋ณ€๊ฒฝ ์ „ ๋ ˆ์ฝ”๋“œ๋ฅผ Undo ๊ณต๊ฐ„์— ๋ฐฑ์—… ํ›„ ์‹ค์ œ ๋ ˆ์ฝ”๋“œ๊ฐ’ ๋ณ€๊ฒฝ
  • Read Commited๋„ Undo์˜์—ญ์˜ ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ์ง€๋งŒ, ๋‘˜์˜ ์ฐจ์ด๋Š” ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ ์ค‘ ์–ด๋–ค ์ด์ „ ๋ฒ„์ „์„ ๋ณด์—ฌ์ฃผ๋Š”์ง€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

Serializable

  • ๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€
  • ์ฝ๊ธฐ ์ž‘์—…๋„ ์ฝ๊ธฐ ์ž ๊ธˆ์„ ํš๋“ํ•ด์•ผ ํ•˜๋ฉฐ, ๋™์‹œ์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์€ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€

ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋ถ€์ •ํ•ฉ ํ˜„์ƒ

Non-Repeatable Read

  • ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ select ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š” ํ˜„์ƒ
  • ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์„ค์ • ์‹œ ๋”ฐ๋ผ์˜ค๋Š” ๋ถ€์ •ํ•ฉ ๋ชฉ๋ก

Dirty Read

  • ํŠธ๋žœ์žญ์…˜์—์„œ ์ฒ˜๋ฆฌํ•œ ์ž‘์—…์ด ์™„๋ฃŒ(Commit, Rollback)๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ํ˜„์ƒ

Phantom Read(Phantom Row)

  • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜ํ–‰ํ•œ ๋ณ€๊ฒฝ ์ž‘์—…์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ณด์˜€๋‹ค ์•ˆ ๋ณด์˜€๋‹ค ํ•˜๋Š” ํ˜„์ƒ
  • select ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์— ์“ฐ๊ธฐ ์ž ๊ธˆ์„ ๊ฑธ์–ด์•ผ ํ•˜์ง€๋งŒ, Undo์˜์—ญ ๋ ˆ์ฝ”๋“œ์—๋Š” ์ž ๊ธˆ์ด ๋ถˆ๊ฐ€
728x90
๋ฐ˜์‘ํ˜•

'DB > RDBMS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

B-Tree  (0) 2023.01.29
Mysql - InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์ž ๊ธˆ  (0) 2022.12.31
Transaction & Lock  (0) 2022.12.24
MySQL - InnoDB & MyISAM ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜  (0) 2022.12.05