Skip to content

Latest commit

ย 

History

History
93 lines (64 loc) ยท 3.63 KB

Transation_Isolation_Level.md

File metadata and controls

93 lines (64 loc) ยท 3.63 KB

ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Transaction Isolation Level)


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

๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ( ANSI/ISO SQL standard( SQL192 ) ):lock:

  • SERIALIZABLE
  • REPEATABLE READ
  • READ COMMITTED
  • READ UNCOMMITED

ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ๊ฒฉ๋ฆฌ(๊ณ ๋ฆฝ) ์ˆ˜์ค€์ด ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ
SERIALIZABLE -> REPEATABLE READ -> READ COMMITTED -> READ UNCOMMITED

SERIALIZABLE

  • ๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€
  • ์‹ ํ˜• ํŠธ๋žœ์žญ์…˜์ด ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ›„ํ–‰ ํŠธ๋žœ์žญ์…˜์ด ๊ฐฑ์‹ ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜์ง€ ๋ชปํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ค‘๊ฐ„์— ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฐ์ž…ํ•˜๋Š” ๊ฒƒ๋„ ๋ง‰์•„์ฃผ๋Š” ๊ฒฉ๋ฆฌ์ˆ˜์ค€
  • ํŠธ๋žœ์žญ์…˜ ์ˆœ์ฐจ์  ์ฒ˜๋ฆฌ๋กœ ์ธํ•œ ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ (๋งค์šฐ)์ €ํ•˜

Serializable์€ ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ •์„ฑ์„ ์œ„๋ฐฐํ•˜๋Š” ์–ด๋–ค ๊ฒƒ๋„ ๋ฐœ์ƒํ• 
์ˆ˜ ์—†์„ ์ •๋„๋กœ ๋†’์€ ๊ณ ๋ฆฝ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋กœ ์ธํ•ด ๋™์‹œ์„ฑ์ด ๋งŽ์ด ๋–จ์–ด์ง„๋‹ค.๊ทธ๋ž˜์„œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์— READ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์–ด๋–ค DML๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†์–ด์„œ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•œ๋‹ค.

๊ทธ๋ž˜์„œ  ๋Œ€๋ถ€๋ถ„์˜ RDBMS๋Š” Read Commited๋‚˜ Repeatable Read๋กœ
๊ณ ๋ฆฝ์„ฑ์„ ์œ ์ง€ํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•œ๋‹ค.

Repeatable Read

  • ์„ ํ–‰ ํŠธ๋žœ์žญ์…˜์ด ์ฝ์€ ๋ฐ์ดํ„ฐ๋Š” ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ๊ฐ€์ง€ ํ›„ํ–‰ ํŠธ๋žœ์žญ์…˜์ด
    ๊ฐฑ์‹ ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ๋ถˆํ—ˆํ•จ์œผ๋กœ์จ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‘ ๋ฒˆ ์ฟผ๋ฆฌํ–ˆ์„ ๋•Œ
    ์ผ๊ด€์„ฑ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • Phantom Read ํ˜„์ƒ์€ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•จ.( InnoDB๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ)
  • MySQL ์˜ InnoDB ์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฉ๋ฆฌ์ˆ˜์ค€.
  • DB2, SQL Server์˜ ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝํ™” ์ˆ˜์ค€์€ Repeatable Read๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ฝ์€ ๋ฐ์ดํ„ฐ์— ๊ฑธ๋ฆฐ ๊ณต์œ  Lock์„
    ์ปค๋ฐ‹ํ•  ๋•Œ๊นŒ์ง€ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•จ.
  • Oracle์€ ์ด ๋ ˆ๋ฒจ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ for update ์ ˆ์„ ์ด์šฉํ•ด ๊ตฌํ˜„๊ฐ€๋Šฅ. SQL Server ๋“ฑ์—์„œ๋„ for update์ ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ปค์„œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ• ๋•Œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ.



Read Committed

  • Dirty Read ๋ฐฉ์ง€ : ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜์–ด ํ™•์ •๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ
  • ์˜ค๋ผํด ๊ฐ™์€ DBMS๊ฐ€ ๊ธฐ๋ณธ๋ชจ๋“œ๋กœ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋Š” ๊ฒฉ๋ฆฌ์ˆ˜์ค€
  • Non-Repeatable Read, Phantom Read ํ˜„์ƒ์€ ์—ฌ์ „ํžˆ ๋ฐœ์ƒ
  • DB2, SQL Server, Sybase์˜ ๊ฒฝ์šฐ ์ผ๊ธฐ ๊ณต์œ  Lock์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„, ํ•˜๋‚˜์˜
    ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ Lock์„ ์„ค์ •ํ•˜๊ณ  ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ๋น ์ ธ ๋‚˜๊ฐ€๋Š” ์ˆœ๊ฐ„ Lock ํ•ด์ œ
  • Oracle์€ Lock์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฟผ๋ฆฌ์‹œ์ž‘ ์‹œ์ ์˜ Undo ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„



Read Uncommitted

  • ํŠธ๋žœ์žญ์…˜์—์„œ ์ฒ˜๋ฆฌ ์ค‘์ธ, ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ
  • Dirty Read, Non-Repeatable Read, Phantom Read ํ˜„์ƒ ๋ฐœ์ƒ
  • Oracle์€ ์ด ๋ ˆ๋ฒจ์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ




level Dirty Read Non-Repeatable Read Phantom Read
READ UNCOMMITED ๋ฐœ์ƒ ๋ฐœ์ƒ ๋ฐœ์ƒ
READ COMMITTED ์—†์Œ ๋ฐœ์ƒ ๋ฐœ์ƒ
REPEATABLE READ ์—†์Œ ์—†์Œ ๋ฐœ์ƒ(MySQL์€ ๊ฑฐ์˜์—†์Œ)
SERIALIZABLE ์—†์Œ ์—†์Œ ์—†์Œ

ref

https://mangkyu.tistory.com/299
https://hyeyul-k.tistory.com/18