Skip to content

Latest commit

ย 

History

History
256 lines (173 loc) ยท 12.3 KB

Transaction.md

File metadata and controls

256 lines (173 loc) ยท 12.3 KB

๐Ÿงพ Transaction

๐Ÿ“š Table of Content

Transaction ์ด๋ž€?

Transaction์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

ACID

Transaction ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ & ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์„ค์ • ์‹œ ๋ฌธ์ œ์ 

Transaction ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ DBMS์˜ ์ „๋žต


๐Ÿงพ Transaction ์ด๋ž€?

์ชผ๊ฐœ์งˆ ์ˆ˜ ์—†๋Š” ์—…๋ฌด์ฒ˜๋ฆฌ์˜ ๋‹จ์œ„

  • ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—…์˜ ๋‹จ์œ„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ , ํŠธ๋žœ์žญ์…˜์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์€ Commit, Rollback๋œ๋‹ค.

roll

  • Commit
    • ๋ชจ๋“  ๋ถ€๋ถ„์ž‘์—…์ด ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•œ๊บผ๋ฒˆ์— DB์— ๋ฐ˜์˜
  • Rollback
    • ๋ถ€๋ถ„ ์ž‘์—…์ด ์‹คํŒจํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ „์œผ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.
      • ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ผ๊ด€์„ฑ์„ ๊นจ๋œจ๋ ธ์„ ๋•Œ ํŠธ๋žœ์žญ์…˜์˜ ์ผ๋ถ€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋”๋ผ๋„ ํŠธ๋žœ์žญ์…˜์˜ ์›์ž์„ฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ด ํŠธ๋žœ์žญ์…˜์ด ํ–‰ํ•œ ๋ชจ๋“  ์—ฐ์‚ฐ์„ ์ทจ์†Œํ•œ๋‹ค.
    • SAVEPOINT
      • ์ผ๋ฐ˜์ ์œผ๋กœ rollback์„ ๋ช…์‹œํ•˜๋ฉด insert, delete, update ๋“ฑ์˜ ์ž‘์—… ์ „์ฒด๊ฐ€ ์ทจ์†Œ๋˜์ง€๋งŒ saveporint๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด๊ฐ€ ์•„๋‹Œ ํŠน์ • ๋ถ€๋ถ„์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์ทจ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
      • ์ทจ์†Œํ•˜๋ ค๋Š” ์ง€์ ์„ savepoint๋กœ ๋ช…์‹œํ•œ ๋’ค rollback to savepoint ์„ธ์ด๋ธŒํฌ์ธํŠธ๋ช…;์„ ํ•˜๋ฉด savepoint ์ง€์ ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•œ ์ž‘์—…์œผ๋กœ rollback๋œ๋‹ค.

Transaction์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

ํŠธ๋žœ์žญ์…˜์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ๋‹จ์œ„๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ฌถ์–ด์„œ ๋ฐ˜์˜๊ณผ ๋ณต๊ตฌ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ์˜ ๋ถ€์ •ํ•ฉ์ด ์ผ์–ด๋‚ฌ์„ ๊ฒฝ์šฐ ๋กค๋ฐฑ์„ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ถ€์ •ํ•ฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

ATM์œผ๋กœ ๊ณ„์ขŒ ์ด์ฒด๋ฅผ ํ•˜๋Š” ์ƒํ™”์œผ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด

1. A์€ํ–‰์—์„œ ์ถœ๊ธˆํ•˜์—ฌ B์€ํ–‰์œผ๋กœ ์†ก๊ธˆ
2-1/case1 ) ์†ก๊ธˆ ๋„์ค‘์— ์‹œ์Šคํ…œ ๋ฐ ์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ A์€ํ–‰ ๊ณ„์ขŒ์—์„œ 
๋ˆ์€ ๋น ์ ธ ๋‚˜๊ฐ”์ง€๋งŒ B์€ํ–‰์€ ๊ณ„์ขŒ์— ์ž…๊ธˆ๋˜์ง€ ์•Š์•˜์Œ
2-2/case2 ) ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  A, B ์€ํ–‰ ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ๋™์ž‘ํ•จ.(Commit)
3-1/case1 ) ์ด์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ๋ง‰๊ธฐ์œ„ํ•ด ๊ฑฐ๋ž˜๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ชจ๋‘ ๋๋‚˜์•ผ ์ด๋ฅผ ์™„์ „ํ•œ 
๊ฑฐ๋ž˜๋กœ ์Šน์ธํ•˜๊ณ , ๊ฑฐ๋ž˜ ๋„์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ์—๋Š” ์ด ๊ฑฐ๋ž˜๋ฅผ ๋ฌดํšจํ™”(Rollback)(๊ฑฐ๋ž˜ ์ด์ „ ์ƒํ™ฉ์œผ๋กœ)์‹œํ‚ด

๊ฑฐ๋ž˜์˜ ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๋ฐฉ๋ฒ• => ํŠธ๋žœ์žญ์…˜

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์˜จ ํ›„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ , ์‚ญ์ œํ•˜๋Š”๋ฐ ์ฒ˜๋ฆฌ ๋„์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์›์ƒํƒœ ๋กœ ๋ณต๊ตฌํ•œ๋‹ค.


๐Ÿงพ ACID

ํŠธ๋žœ์žญ์…˜์˜ ํŠน์ง•

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

๐Ÿงพ Trancsaction ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation level) & ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์„ค์ • ์‹œ ๋ฌธ์ œ์ 

Transaction ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฉ๋ฆฌ ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ์„œ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ์ด ๋‹ฌ๋ผ์ง„๋‹ค. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์„ MVCC(Multi Version Concurrency Consistency) ๋ผ๊ณ  ํ•จ.

DB lock

  1. Shared Lock(Read Lock)

๊ณต์œ  ๋ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” lock์ด๋‹ค. read lock ๋ผ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ํ•ด์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งŒ์•ฝ ํŠน์ • ๋ฐ์ดํ„ฐ์— exclusive lock์ด ๊ฑธ๋ฆฌ๋ฉด shared lock์„ ๊ฑธ ์ˆ˜ ์—†์ง€๋งŒ ์—ฌ๋Ÿฌ shared lock์€ ๋™์‹œ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

  1. Exclusive lock(write lock)

๋ฒ ํƒ€๋ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” lock์ด๋‹ค. ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ์œ ํšจํ•˜๋ฉฐ, ๋ฒ ํƒ€๋ฝ์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ์–ด๋– ํ•œ ์ ‘๊ทผ๋„ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. Exclusive lock์ด ๊ฑธ๋ฆฌ๋ฉด shared lock์„ ๊ฑธ ์ˆ˜ ์—†๋‹ค. exclusive ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด exclusive lock์„ ๊ฑธ ์ˆ˜ ์—†๋‹ค.

๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ๋ ˆ๋ฒจ

  • READ UNCOMMITTED(lv.0) (์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ฝ๊ธฐ)
  • READ COMMITTED(lv.1) (์ปค๋ฐ‹๋œ ์ฝ๊ธฐ)
  • REAPEATABLE READ(lv.2) (๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์ฝ๊ธฐ)
  • SERIALIZABLE(lv.3) (์ง๋ ฌํ™” ๊ฐ€๋Šฅ)

Read Uncommitted

  • select ๋ฌธ์žฅ์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— shared lock ์ด ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š” ๊ณ„์ธต
  • ํŠธ๋žœ์žญ์…˜์— ์ฒ˜๋ฆฌ์ค‘์ด๊ฑฐ๋‚˜, ์•„์ง commit๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ
  • dirty read ๋ฐœ์ƒ

ru

dirty read ๋ฐœ์ƒ
1. ํŠธ๋žœ์žญ์…˜ 1์„ ์‹œ์ž‘ํ•œ๋‹ค. 
2. ํŠธ๋žœ์žญ์…˜ 2๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. 
3. ํŠธ๋žœ์žญ์…˜ 1์ด ID = 1, VAL = 'MIN'์ธ ๋ฐ์ดํ„ฐ์˜ VAL์„ KIM์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. 
4. ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ID = 1์„ ์กฐํšŒํ•œ๋‹ค. VAL = 'KIM'์ด ์กฐํšŒ๋˜์—ˆ๋‹ค. 
5. ํŠธ๋žœ์žญ์…˜ 1, 2๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.

Read Committed

  • select ๋ฌธ์žฅ์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— shared lock์ด ๊ฑธ๋ฆฌ๋Š” ๊ณ„์ธต
  • ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†์–ด ๋Œ€๊ธฐํ•œ๋‹ค.
  • dirty read ๋ฐฉ์ง€
    • ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜์–ด ํ™•์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ DBMS๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋Š” ๊ฒฉ๋ฆฌ์ˆ˜์ค€์ด๋‹ค.
  • Commit๋œ ์ •๋ณด๋งŒ ์ฝ๋Š”๋‹ค.
  • Non-Repeatable Read ๋ฐœ์ƒ

rc

Non-repeatable read ex / ๋‚˜์ด๊ฐ€ ๋ฐ”๋€Œ์–ด์„œ ์ถœ๋ ฅ์ด๋˜๋ฉด ์•ˆ๋˜๋Š” ์ƒํ™ฉ์ž„.
1. ํŠธ๋žœ์žญ์…˜ 1 ์‹œ์ž‘
2. ํŠธ๋žœ์žญ์…˜ 1์ด id=1์ธ ๋ฐ์ดํ„ฐ์˜ value๋ฅผ kim์œผ๋กœ ๋ณ€๊ฒฝ
3. ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์‹œ์ž‘
4. ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ id=1์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ. min์ด ๊ฒ€์ƒ‰๋œ๋‹ค.
5. ํŠธ๋žœ์žญ์…˜ 1์ด ์ปค๋ฐ‹ํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.
6. ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ id=1์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค. kim์ด ๊ฒ€์ƒ‰๋œ๋‹ค.
7. ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์ปค๋ฐ‹์„ ํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.

Repeatable Read

  • ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋–„๊นŒ์ง€ select ๋ฌธ์žฅ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— shared lock์ด ๊ฑธ๋ฆฌ๋Š” ๊ณ„์ธต
  • ํŠธ๋žœ์žญ์…˜์ด ๋ฒ”์œ„ ๋‚ด์—์„œ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ ๋‚ด์šฉ์ด ํ•ญ์ƒ ๋™์ผํ•จ์„ ๋ณด์žฅ
  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ํŠธ๋žœ์žญ์…˜ ์˜์—ญ์— ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅ -> ์ž…๋ ฅ์€ ๊ฐ€๋Šฅ
  • MySQL DBMS์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • Non-Repeatable read ๋ถ€์ •ํ•ฉ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

rr

Non-Repeatable Read 
1. ํŠธ๋žœ์žญ์…˜ 1์„ ์‹œ์ž‘
2. ํŠธ๋žœ์žญ์…˜ 1์ด id=1์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
3. ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค.
4. ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ id=1์ธ ๋ฐ์ดํ„ฐ๋ฅผ kim์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
5. ํŠธ๋žœ์žญ์…˜ 1์ด id=1์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜ 2์˜ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
6. ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ id=2์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž… ํ›„ commitํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•œ๋‹ค.
7. ํŠธ๋žœ์žญ์…˜ 1์ด id=2์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ™•์ธ๋œ๋‹ค.

Serializable

  • ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ select ๋ฌธ์žฅ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— shared lock์ด ๊ฑธ๋ฆฌ๋Š” ๊ณ„์ธต
  • ๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ ์™„๋ฒฝํ•œ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•จ
  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ํŠธ๋žœ์žญ์…˜ ์˜์—ญ์— ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ˆ˜์ • ๋ฐ ์ž…๋ ฅ ๋ถˆ๊ฐ€๋Šฅ

MySQL : Repeatable Read Oracle : Read Committed

๊ฒฐ๋ก ์€ ๋ ˆ๋ฒจ์ด ๋†’์•„์งˆ์ˆ˜๋ก ํŠธ๋žœ์žญ์…˜๊ฐ„ ๊ณ ๋ฆฝ์ •๋„๊ฐ€ ๋†’์•„์ง€๋ฉฐ, ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ฉฐ, ์ผ๋ฐ˜์ ์ธ ์˜จ๋ผ์ธ ์„œ๋น„์Šค์—์„œ๋Š” READ COMIITTED๋‚˜ REPEATABLE READ ์ค‘์— ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

Transaction ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์„ค์ • ์‹œ ๋ฌธ์ œ์ 

Isolation level(๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ๋ ˆ๋ฒจ)์— ๋Œ€ํ•œ ์กฐ์ •์€ ๋™์‹œ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์—ฐ๊ด€๋˜์–ด์žˆ๋‹ค.

๋™์‹œ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด ๋™์‹œ์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

iso

๋ ˆ๋ฒจ์ด ๋‚ฎ์•„์งˆ์ˆ˜๋ก ๋™์‹œ์„ฑ์€ ๋†’์•„์ง€๊ณ  ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ๋‚ฎ์•„์ง„๋‹ค. ๋ ˆ๋ฒจ์ด ๋†’์•„์งˆ์ˆ˜๋ก ๋™์‹œ์„ฑ์€ ๋‚ฎ์•„์ง€๊ณ  ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ๋†’์•„์ง„๋‹ค.

๋‚ฎ์€ ๋‹จ๊ณ„ Isolation Level์„ ํ™œ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ๋“ค

  • Dirty Read
    • ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์—์„œ ์•„์ง ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ณด๊ฒŒ๋˜๋Š” ๊ฒฝ์šฐ
    • ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ˆ˜์ •์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
  • Non_repeatable Read
    • ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ทธ ์‚ฌ์ด์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ๊ฐ’์„ ์ˆ˜์ • ๋˜๋Š” ์‚ญ์ œํ•จ๋…€์„œ ๋‘ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์ดํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ์ผ๊ด€์„ฑ์ด ๊นจ์ง„ ํ˜„์ƒ
    • ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๋˜‘๊ฐ™์€ select๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” repeatable read ์ •ํ•ฉ์„ฑ์— ์–ด๊ธ‹๋‚จ
  • Phantom Read
    • ํ•œ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์ผ์ • ๋ฒ”์œ„์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ์ฝ์—ˆ์„ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ์—†๋˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ
    • ํŠธ๋žœ์žญ์…˜ ๋„์ค‘ ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…์„ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜ํƒ€๋‚จ

chrt


Transaction ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ DBMS์˜ ์ „๋žต

์ดํ•ด๊ฐ€ ํ•„์š”ํ•œ ๊ฐœ๋…

DBMS์˜ ๊ตฌ์กฐ

Buffer ๊ด€๋ฆฌ ์ •์ฑ…

DBMS์˜ ๊ตฌ์กฐ

DBMS ๊ตฌ์„ฑ์š”์†Œ :Query Processor (์งˆ์˜ ์ฒ˜๋ฆฌ๊ธฐ), Storage System(์ €์žฅ ์‹œ์Šคํ…œ)

์ž…์ถœ๋ ฅ ๋‹จ์œ„ :๊ณ ์ •๊ธธ์ด์˜ page ๋‹จ์œ„๋กœ disk์— ์ฝ๊ฑฐ๋‚˜ ์”€

์ €์žฅ ๊ณต๊ฐ„ : ๋น„ํœ˜๋ฐœ์„ฑ ์ €์žฅ ์žฅ์น˜์ธ disk์— ์ €์žฅ, ์ผ๋ถ€๋ถ„์„ main memory์— ์ €์žฅ

dbms

Page Buffer Manager or Buffer manager

DBMS์˜ storage system์— ์†ํ•˜๋Š” ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜๋กœ, main memory์— ์œ ์ง€ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ

Buffer ๊ด€๋ฆฌ ์ •์ฑ…์— ๋”ฐ๋ผ undo ๋ณต๊ตฌ์™€ redo ๋ณต๊ตฌ๊ฐ€ ์š”๊ตฌ๋˜๊ฑฐ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š๊ฒŒ ๋˜๋ฏ€๋กœ transaction ๊ด€๋ฆฌ์— ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฒฐ์ •์„ ๊ฐ€์ ธ์˜จ๋‹ค.

Undo

ํ•„์š”ํ•œ ์ด์œ  : ์ˆ˜์ •๋œ page๋“ค์ด buffer ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ์„œ ๋””์Šคํฌ์— ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ์Œ. Buffer ๊ต์ฒด๋Š” transaction๊ณผ๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ buffer์˜ ์ƒํƒœ์— ๋”ฐ๋ผ์„œ ๊ฒฐ์ •๋œ๋‹ค. ์ด๋กœ ์ธํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ transaction์ด ๋ณ€๊ฒฝํ•œ page๋“ค์€ ์›์ƒ ๋ณต๊ตฌ ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ undo๋ผ๊ณ  ํ•œ๋‹ค.

  • steal : ์ˆ˜์ •๋œ ํŽ˜์ด์ง€๋ฅผ ์–ธ์ œ๋“ ์ง€ ๋””์Šคํฌ์— ์“ธ ์ˆ˜ ์žˆ๋Š” ์ •์ฑ…
    • ๋Œ€๋ถ€๋ถ„์˜ dbms๊ฐ€ ์ฑ„ํƒํ•˜๋Š” buffer ๊ด€๋ฆฌ ์ •์ฑ…
    • undo logging๊ณผ ๋ณต๊ตฌ๋ฅผ ํ•„์š”๋กœ ํ•จ.
  • not steal : ์ˆ˜์ •๋œ ํŽ˜์ด์ง€๋“ค์„ EOT (End Of Transaction)๊นŒ์ง€๋Š” ๋ฒ„ํผ์— ์œ ์ง€ํ•˜๋Š” ์ •์ฑ…
    • undo ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ, ๋งค์šฐ ํฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ๊ฐ€ ํ•„์š”ํ•จ

Redo

์ด๋ฏธ commitํ•œ transaction์˜ ์ˆ˜์ •์„ ์žฌ๋ฐ˜์˜ํ•˜๋Š” ๋ณต๊ตฌ ์ž‘์—…

buffer๊ด€๋ฆฌ ์ •์ฑ…์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค. โ†’ transaction์ด ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์— ํ•ด๋‹น transaction์ด ์ˆ˜์ •ํ•œ page๋ฅผ ๋””์Šคํฌ์— ์“ธ ๊ฒƒ์ธ๊ฐ€ ์•„๋‹Œ๊ฐ€๋กœ ๊ธฐ์ค€

  • FORCE : ์ˆ˜์ •ํ–ˆ๋˜ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ Transaction commit ์‹œ์ ์— disk์— ๋ฐ˜์˜
    • transaction์ด commit ๋˜์—ˆ์„ ๋•Œ ์ˆ˜์ •๋œ ํŽ˜์ด์ง€๋“ค์ด disk ์ƒ์— ๋ฐ˜์˜๋˜๋ฏ€๋กœ redo ํ•„์š” ์—†์Œ
  • not FORCE :commit ์‹œ์ ์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋Š” ์ •์ฑ…
    • transaction์ด disk ์ƒ์˜ db์— ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ์— redo ๋ณต๊ตฌ๊ฐ€ ํ•„์š”(๋Œ€๋ถ€๋ถ„์˜ dbms์ •์ฑ…)



๐Ÿ“š ์ฐธ๊ณ 

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

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

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€1

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€2



โ‰๏ธ ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์˜ ์ข…๋ฅ˜๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๊ฒฉ๋ฆฌ ์ˆ˜์ค€์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜๋ฅผ ๋งํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค

Transaction์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Transaction์— ํŠน์„ฑ์ด ์žˆ๋Š”๋ฐ ๊ฐ๊ฐ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.