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

Unfazedโ—๏ธ๐ŸŽฏ

DB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - ์žฅ์• ์™€ ํšŒ๋ณต(๊ทธ๋ฆผ์ž ํŽ˜์ด์ง•, ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ณต๊ตฌ) ๋ณธ๋ฌธ

Database (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)

DB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - ์žฅ์• ์™€ ํšŒ๋ณต(๊ทธ๋ฆผ์ž ํŽ˜์ด์ง•, ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ณต๊ตฌ)

9taetae9 2024. 4. 21. 16:28
728x90

1. ์žฅ์• ์™€ ํšŒ๋ณต

- ์žฅ์• (failure) : ์ •ํ•ด์ง„ ๋ช…์„ธ๋Œ€๋กœ ์‹œ์Šคํ…œ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ

- ํšŒ๋ณต(recovery) : ์žฅ์• (failure)๋กœ ์ธํ•ด ์†์ƒ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์†์ƒ๋˜๊ธฐ ์ด์ „์˜ ์ •์ƒ์ ์ธ ์ƒํƒœ(consistent state)๋กœ ๋ณต๊ตฌ์‹œํ‚ค๋Š” ์ž‘์—…

- ํšŒ๋ณต์˜ ์ฃผ์š”๊ธฐ๋ฒ•์€ ์žฅ์• ๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‚ด์šฉ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋คํ”„ํ•ด ๋ณด๊ด€ํ•˜๊ณ , ๋คํ”„ ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋ณ€๋™ ์‚ฌํ•ญ์€ ๋กœ๊ทธ์— ๊ธฐ๋กํ•ด ๋‘๋Š” ๊ฒƒ

 

2. ์žฅ์• ์˜ ์œ ํ˜•

2-1) ํŠธ๋žœ์žญ์…˜ ์‹คํŒจ(transaction failure)
๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜(logical errors) : ๋‚ด๋ถ€ ์˜ค๋ฅ˜ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ
์‹œ์Šคํ…œ ์˜ค๋ฅ˜(system errors) : ์—๋Ÿฌ(์˜ˆ: ๊ต์ฐฉ ์ƒํƒœ)๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์ด ํ™œ์„ฑ ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
2-2) ์‹œ์Šคํ…œ ์žฅ์• (system failure/crash)
ํœ˜๋ฐœ์„ฑ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ ์†์‹ค: ์ „์› ์žฅ์• ๋‚˜ ๋‹ค๋ฅธ ํ•˜๋“œ์›จ์–ด ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹œ์Šคํ…œ์ด ๋‹ค์šด
์‹คํŒจ ์ •์ง€ ๊ฐ€์ •: ๋น„ํœ˜๋ฐœ์„ฑ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์€ ์‹œ์Šคํ…œ ์žฅ์• ์— ์˜ํ•ด ์†์ƒ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •
2-3) ๋””์Šคํฌ ์žฅ์• (disk failure)
๋””์Šคํฌ ํ—ค๋“œ ๋ถ•๊ดด๋‚˜ ๋””์Šคํฌ ์ œ์–ด๊ธฐ ๊ณ ์žฅ์œผ๋กœ ์ธํ•ด ์ €์žฅ ์žฅ์น˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ผ๋ถ€ ๋˜๋Š” ์ „๋ถ€๊ฐ€ ์†์ƒ๋œ ์ƒํƒœ
๋””์Šคํฌ ๋“œ๋ผ์ด๋ธŒ๋Š” ์ฒดํฌ์„ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฅ์• ๋ฅผ ๊ฐ์ง€

 

3. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋ณต๊ตฌ ๋ฐฉ๋ฒ• (๊ทธ๋ฆผ์ž ํŽ˜์ด์ง•, ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ณต๊ตฌ)

3-1) ๊ทธ๋ฆผ์ž ํŽ˜์ด์ง•(shadow-paging) 

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

 

์ž‘๋™ ๋ฐฉ์‹

1. ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ทธ๋ฆผ์ž ๋ณต์‚ฌ๋ณธ์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค.

2. ํŠธ๋žœ์žญ์…˜์ด ๋ถ€๋ถ„์ ์œผ๋กœ ์ปค๋ฐ‹๋˜๊ณ  ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋œ ํŽ˜์ด์ง€๊ฐ€ ๋””์Šคํฌ์— ํ”Œ๋Ÿฌ์‹œ๋œ ํ›„, "DB_pointer"๋Š” ์—…๋ฐ์ดํŠธ๋œ ๊ทธ๋ฆผ์ž ๋ณต์‚ฌ๋ณธ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

3. "DB_pointer"๋Š” ํ•ญ์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ˜„์žฌ ์ผ๊ด€๋œ ๋ณต์‚ฌ๋ณธ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋งŒ์•ฝ ํŠธ๋žœ์žญ์…˜์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ, "DB_pointer"๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ด์ „์˜ ๋ณต์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋ฆผ์ž ๋ณต์‚ฌ๋ณธ์€ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, active ์ƒํƒœ์ธ ํŠธ๋žœ์žญ์…˜ T1 ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๋””์Šคํฌ์—๋Š” ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Db_pointer๋ผ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์œ ์ง€๋˜๊ณ  ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋Š” ํŠธ๋žœ์žญ์…˜ T1์€ ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์™„์ „ํ•œ ๋ณต์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•œ๋‹ค. ๋ชจ๋“  ํ›„์† ์ž‘์—…์€ ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ, ์›๋ž˜์˜ ๋ณต์‚ฌ๋ณธ์€ ๊ทธ๋Œ€๋กœ ๋‘๊ฒŒ ๋œ๋‹ค.
ํŠธ๋žœ์žญ์…˜์ด ์ค‘๋‹จ๋˜๋ฉด, ์‹œ์Šคํ…œ์€ ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์„ ์‚ญ์ œํ•˜๊ณ , ์˜ค๋ž˜๋œ ๋ณต์‚ฌ๋ณธ์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.
ํŠธ๋žœ์žญ์…˜ T1์ด ์„ฑ๊ณตํ•˜๋ฉด, OS๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต์‚ฌ๋ณธ์˜ ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ๋””์Šคํฌ์— ์“ฐ์—ฌ์ง€๋„๋ก ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์€ Db_pointer๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต์‚ฌ๋ณธ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•œ๋‹ค. ์ด์ œ ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ˜„์žฌ ๋ณต์‚ฌ๋ณธ์ด ๋˜๋ฉฐ, ์ด์ „ ๋ณต์‚ฌ๋ณธ์€ ์‚ญ์ œ๋œ๋‹ค. ํŠธ๋žœ์žญ์…˜ T1์€ ์—…๋ฐ์ดํŠธ๋œ Db-pointer๊ฐ€ ๋””์Šคํฌ์— ์“ฐ์—ฌ์ง€๋ฉด ์ปค๋ฐ‹๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.

 

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

์ง€์†์„ฑ(Durability) ์œ ์ง€ ๋ฐฉ๋ฒ• 
์‹œ์Šคํ…œ์ด ์—…๋ฐ์ดํŠธ๋œ ํฌ์ธํ„ฐ๊ฐ€ ๋””์Šคํฌ์— ์“ฐ์—ฌ์ง€๊ธฐ ์ „์— ์‹คํŒจํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์‹œ์Šคํ…œ์ด ๋‹ค์‹œ ์‹œ์ž‘๋˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํฌ์ธํ„ฐ(Db_pointer)๋ฅผ ์ฝ์œผ๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์›๋ž˜ ๋‚ด์šฉ์„ ๋ณด๊ฒŒ ๋œ๋‹ค. ํŠธ๋žœ์žญ์…˜ T1์˜ ์˜ํ–ฅ์€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. ํŠธ๋žœ์žญ์…˜ T1์€ Db_pointer๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งŒ ์„ฑ๊ณตํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ€์ •๋œ๋‹ค. ์‹œ์Šคํ…œ์ด Db_pointer ์—…๋ฐ์ดํŠธ ํ›„์— ์‹คํŒจํ•˜๋ฉด ๊ทธ ์ด์ „์— ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์˜ ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ๋””์Šคํฌ์— ์“ฐ์—ฌ์ง„ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ์ด ๋‹ค์‹œ ์‹œ์ž‘๋˜๋ฉด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต์‚ฌ๋ณธ์„ ์ฝ๋Š”๋‹ค.

 

๊ทธ๋ฆผ์ž ํŽ˜์ด์ง•์€ ํŠธ๋žœ์žญ์…˜์˜ ์›์ž์„ฑ๊ณผ ์ง€์†์„ฑ์„ ์ง€์›ํ•˜๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๊ธฐ์ˆ ์ด๋‹ค. ์žฅ๋‹จ์ ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์žฅ์ 

1. ๋™์‹œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ์–ด๋ ค์›€ : ์—ฌ๋Ÿฌ ๋™์‹œ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์„ ๊ฒฝ์šฐ, ๋„ˆ๋ฌด ๋งŽ์€ shadow(๋ณต์‚ฌ๋ณธ)๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋–„๋ฌธ์— ํšจ์œจ์  ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.

2. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งค์šฐ ๋น„ํšจ์œจ์  : ๊ทธ๋ฆผ์ž ํŽ˜์ด์ง•์€ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ๋ฐ์ดํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ง์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋ฅผ ์ค„์ด๋Š” ์„€๋„์šฐ ํŽ˜์ด์ง•์˜ ๋ณ€ํ˜•์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ํฐ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—๋Š” ์‹ค์šฉ์ ์ด์ง€ ์•Š๋‹ค.

์žฅ์ 

ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์— ์œ ์šฉ : ๊ทธ๋ฆผ์ž ํŽ˜์ด์ง•์€ ๊ฐ„๋‹จํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค. ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์—์„œ๋„ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์—์„œ ๋” ํšจ์œจ์ ์ธ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

3-2) ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ณต๊ตฌ(log-based recovery)

์ด ๋ฐฉ๋ฒ•์€ ์‹œ์Šคํ…œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉํ•˜๊ธฐ ์ „์— ์•ˆ์ •์ ์ธ ์ €์žฅ์†Œ(ex) ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ)์— ๋กœ๊ทธ ํ˜•ํƒœ๋กœ ๋จผ์ € ๊ธฐ๋กํ•œ๋‹ค. ์ด ๋กœ๊ทธ์—๋Š” ์ˆ˜์ •๋œ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ ์ด ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ˆœ ๋กœ๊น… : DBMS์—์„œ ํŠธ๋žœ์žญ์…˜์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ์  ๊ธฐ์ˆ 

๋‹จ์ˆœ ๋กœ๊น… ์ž‘๋™ ๋ฐฉ์‹

1. ์•ˆ์ •์ ์ธ ์ €์žฅ์†Œ์— ๋กœ๊ทธ ์œ ์ง€ : ๋กœ๊ทธ๋Š” ์•ˆ์ •์ ์ธ ์ €์žฅ ์žฅ์น˜์— ์œ ์ง€๋œ๋‹ค. ์ด ๋กœ๊ทธ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ด๋ฃจ์–ด์ง„ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ์˜ ์ˆœ์ฐจ์  ๋ชฉ๋ก์ด๋‹ค.

2. ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ : ํŠธ๋žœ์žญ์…˜(Ti)์ด ์‹œ์ž‘๋  ๋•Œ '<Ti start>' ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ๊ธฐ๋กํ•˜์—ฌ ๋กœ๊ทธ์— ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘์„ ์•Œ๋ฆฐ๋‹ค.

3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์“ฐ๊ธฐ์ „ ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ ์ž‘์„ฑ

ํŠธ๋žœ์žญ์…˜ Ti๊ฐ€ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ X์— ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— '<Ti, X, V1, V2>' ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. 

V1 : ์“ฐ๊ธฐ ์ž‘์—… ์ „ X์˜ ๊ฐ’, V2 : ์“ฐ๊ธฐ ์ž‘์—… ํ›„ X์˜ ๊ฐ’ 

<Ti, X, V1, V2> : ํŠธ๋žœ์žญ์…˜ Ti๊ฐ€ X๋ฅผ V1์—์„œ V2๋กœ ๋ณ€๊ฒฝํ–ˆ์Œ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ

4. ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹

๋ชจ๋“  ์ž‘์—…์„ ์™„๋ฃŒํ•œ ํ›„, ํŠธ๋žœ์žญ์…˜ Ti๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” <Ti commit> ๋ ˆ์ฝ”๋“œ๋ฅผ ๋กœ๊ทธ์— ์ž‘์„ฑํ•œ๋‹ค.

 

๋‹จ์ˆœ ๋กœ๊น… ํŠน์ง•

1. ๋™์‹œ์„ฑ 

์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์šด์˜๋  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์€ ๋™์ผํ•œ ๋””์Šคํฌ ๋ฒ„ํผ์™€ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” ๋ฒ„ํผ ๋ธ”๋ก์ด ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

2. ๋™์‹œ์„ฑ ์ œ์–ด (feat : Strict-2PL)

๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•ด ์—„๊ฒฉํ•œ 2๋‹จ๊ณ„ ์ž ๊ธˆ ๊ทœ์•ฝ์„ ๋”ฐ๋ฅธ๋‹ค. ์ฆ‰, ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์˜ ์˜ํ–ฅ์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๋ณด์ด์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, ํŠธ๋žœ์žญ์…˜ T1์ด ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ X๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ํŠธ๋žœ์žญ์…˜ T2๊ฐ€ X๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๊ณ , T1์ด ๋‚˜์ค‘์— ์ค‘๋‹จํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, T1์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ T2์˜ ์ปค๋ฐ‹๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๊ณ  ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์‹œ์Šคํ…œ์— ์žˆ์–ด์•ผ ํ•œ๋‹ค.

3. ๋กœ๊ทธ ๊ตฌ์กฐ

๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋กœ๊ทธ ๋‚ด์—์„œ ์„ž์ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์‹œ์Šคํ…œ ๋ณต๊ตฌ ์ ˆ์ฐจ ์ค‘์— ๊ฐ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ ์ ˆํ•œ ํŠธ๋žœ์žญ์…˜๊ณผ ์ •ํ™•ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ๋ฅผ ์„ธ์‹ฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. 

 

1. ๋‹จ์ˆœ ๋กœ๊น… ์‹œ์Šคํ…œ ํšŒ๋ณต ์ ˆ์ฐจ์˜ ๋ฌธ์ œ์ 
๋กœ๊ทธ ์ „์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋œ๋‹ค.
์ด๋ฏธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—…๋ฐ์ดํŠธ๋ฅผ ์ถœ๋ ฅ(output)ํ•œ ํŠธ๋žœ์žญ์…˜์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค์‹œ ์‹คํ–‰(redo)ํ•  ์ˆ˜ ์žˆ๋‹ค.
2. ํšŒ๋ณต ์ ˆ์ฐจ ๊ฐ„์†Œํ™”
ํšŒ๋ณต ์ ˆ์ฐจ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌ ํฌ์ธํŠธ๋ฅผ ์ˆ˜ํ–‰

3. ์ฒดํฌํฌ์ธํŠธ ๊ณผ์ •
1. ์ฃผ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์•ˆ์ •์ ์ธ ์ €์žฅ์†Œ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. (all log records) main emeory ==output  => stable storage(disk)
2. ์ˆ˜์ •๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฒ„ํผ ๋ธ”๋ก์„ ๋””์Šคํฌ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. (all modified data buffer blocks) buffer == output ==> stable storage(disk)
3. <checkpoint L> ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์•ˆ์ •์ ์ธ ์ €์žฅ์†Œ์— ์ž‘์„ฑํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ L์€ ์ฒดํฌํฌ์ธํŠธ ์‹œ์ ์—์„œ ํ™œ๋™ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜๋“ค์˜ ๋ชฉ๋ก์ด๋‹ค.

 

๋‹จ์ˆœ ๋กœ๊น… ํฌ๋ž˜์‹œ ๋ฐœ์ƒ์‹œ ๋ณต๊ตฌ ํ”„๋กœ์„ธ์Šค

1. ๋ณต๊ตฌ ์ค€๋น„
“undo-list”์™€ “redo-list”๋ฅผ ๋น„์–ด ์žˆ๋Š” ์ƒํƒœ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
๋กœ๊ทธ๋ฅผ ๋์—์„œ๋ถ€ํ„ฐ ๊ฑฐ๊พธ๋กœ ์Šค์บ”ํ•˜๋ฉด์„œ ์ฒซ ๋ฒˆ์งธ <checkpoint L> ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ง„ํ–‰

๊ฑฐ๊พธ๋กœ ์Šค์บ”ํ•˜๋Š” ๋™์•ˆ ๋ฐœ๊ฒฌ๋œ ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ
- ๋ ˆ์ฝ”๋“œ๊ฐ€ <Ti commit>์ธ ๊ฒฝ์šฐ, Ti๋ฅผ “redo-list”์— ์ถ”๊ฐ€
- ๋ ˆ์ฝ”๋“œ๊ฐ€ <Ti start>์ธ ๊ฒฝ์šฐ, Ti๊ฐ€ “redo-list”์— ์—†๋‹ค๋ฉด Ti๋ฅผ “undo-list”์— ์ถ”๊ฐ€
L์— ์žˆ๋Š” ๋ชจ๋“  Ti์— ๋Œ€ํ•ด, Ti๊ฐ€ redo-list์— ์—†์œผ๋ฉด Ti๋ฅผ “undo-list”์— ์ถ”๊ฐ€ (L : ์ฒดํฌ ํฌ์ธํŠธ ์‹œ์  ํ™œ๋™ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜ ๋ชฉ๋ก)
2. ๋ฆฌ์ŠคํŠธ ๊ตฌ์„ฑ
์ด ์‹œ์ ์—์„œ “undo-list”๋Š” ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋“ค์€ ์ทจ์†Œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
“redo-list”๋Š” ์™„๋ฃŒ๋œ ํŠธ๋žœ์žญ์…˜๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋“ค์€ ๋‹ค์‹œ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
3. ๋กœ๊ทธ ์Šค์บ” ๋ฐ ์ž‘์—… ์‹คํ–‰
๋กœ๊ทธ๋ฅผ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ ˆ์ฝ”๋“œ๋ถ€ํ„ฐ ๊ฑฐ๊พธ๋กœ ์Šค์บ”ํ•˜๋ฉฐ, undo-list์— ์žˆ๋Š” ๋ชจ๋“  Ti์˜ <Ti start> ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค.
์ด ์Šค์บ” ๋™์•ˆ, undo-list์— ์†ํ•œ ํŠธ๋žœ์žญ์…˜์˜ ๊ฐ ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ทจ์†Œ ์ž‘์—…(undo)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ์ตœ๊ทผ์˜ <checkpoint L> ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
<checkpoint L> ๋ ˆ์ฝ”๋“œ๋ถ€ํ„ฐ ๋กœ๊ทธ ๋๊นŒ์ง€ ๋กœ๊ทธ๋ฅผ ์ˆœ๋ฐฉํ–ฅ์œผ๋กœ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.
์ด ์Šค์บ” ๋™์•ˆ, redo-list์— ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๊ฐ ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์žฌ์‹คํ–‰ ์ž‘์—…(redo)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

๋‹จ์ˆœ ๋กœ๊น… ํŠธ๋žœ์žญ์…˜์˜ ์ฒ˜๋ฆฌ ์˜ˆ์‹œ 1

 

์ฒดํฌํฌ์ธํŠธ๋กœ ์ธํ•ด ๋””์Šคํฌ์— ์ด๋ฏธ ์ถœ๋ ฅ๋œ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ€์ง„ ํŠธ๋žœ์žญ์…˜(T1)์€ ํšŒ๋ณต ์ ˆ์ฐจ์—์„œ ๋ฌด์‹œ

ํŠธ๋žœ์žญ์…˜(T2์™€ T3)์€ ๋‹ค์‹œ ์‹คํ–‰(redo)
์™„๋ฃŒ๋˜์ง€ ์•Š๊ณ  ์ค‘๋‹จ๋œ ํŠธ๋žœ์žญ์…˜(T4)์€ ์ทจ์†Œ(undo)

 

๋‹จ์ˆœ ๋กœ๊น… ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ์˜ˆ์‹œ 2

๋กœ๊ทธ ๋ถ„์„

<T0 start>
<T0, A, 0, 10>
<T0 commit> /* ์ฒดํฌํฌ์ธํŠธ ์ด์ „์— ์ปค๋ฐ‹๋˜์—ˆ์œผ๋ฏ€๋กœ T0์€ ๋ณต๊ตฌ ํ›„ ์–ธ๋‘ ๋˜๋Š” ๋ฆฌ๋‘ ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋  ํ•„์š”๊ฐ€ ์—†๋‹ค. */
<T1 start>  /* UNDO goes up here */
<T1, B, 0, 10> /* T1 ๋ณ€์ˆ˜ B๋ฅผ 0์—์„œ 10์œผ๋กœ ์—…๋ฐ์ดํŠธ, T1์€ ์ฒดํฌํฌ์ธํŠธ ์‹œ์ ๊นŒ์ง€ ์ปค๋ฐ‹๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ undo_list์— ์ถ”๊ฐ€*/ 
<T2 start> 
<T2, C, 0, 10> /*T2 : ๋ณ€์ˆ˜ C๋ฅผ 0์—์„œ 10์œผ๋กœ ์ฒซ ์—…๋ฐ์ดํŠธํ•จ*/
<T2, C, 10, 20>  /* T2 : ๋ณ€์ˆ˜ C๋ฅผ 10์—์„œ 20์œผ๋กœ ๋‘ ๋ฒˆ์งธ ์—…๋ฐ์ดํŠธํ•จ */

/* T2๋„ ์ฒดํฌํฌ์ธํŠธ ์‹œ์ ๊นŒ์ง€ ์ปค๋ฐ‹๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ undo_list์— ํฌํ•จ */

<checkpoint {T1, T2}> /* REDO from here to the end */

<T3 start>
<T3, A, 10, 20> /* T3 : ๋ณ€์ˆ˜ A๋ฅผ 10์—์„œ 20์œผ๋กœ ๋‘ ๋ฒˆ์งธ ์—…๋ฐ์ดํŠธํ•จ */
<T3, D, 0, 10> /* T3 : ๋ณ€์ˆ˜ D๋ฅผ 0์—์„œ 10์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์—…๋ฐ์ดํŠธํ•จ */
<T3 commit> /* T3๋Š” ์ฒดํฌํฌ์ธํŠธ ์ดํ›„์— ์ปค๋ฐ‹๋˜์—ˆ์œผ๋ฏ€๋กœ redo_list์— ์ถ”๊ฐ€ */

 

undo_list = {T1, T2}

redo_list = {T3}

์–ธ๋‘ ๊ณผ์ •
undo_list์— ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜๋“ค(T1๊ณผ T2)์€ ํฌ๋ž˜์‹œ ์ด์ „์— ์ปค๋ฐ‹๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ทจ์†Œ๋˜์–ด์•ผ ํ•œ๋‹ค. 
T1์— ์˜ํ•ด B๊ฐ€ 0์—์„œ 10์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์—…๋ฐ์ดํŠธ์™€ T2์— ์˜ํ•ด C๊ฐ€ 0์—์„œ 10, ๊ทธ๋ฆฌ๊ณ  10์—์„œ 20์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—ญ์ˆœ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.
๋ฆฌ๋‘ ๊ณผ์ •
redo_list์— ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜(T3)์€ ์„ฑ๊ณต์ ์œผ๋กœ ์ปค๋ฐ‹๋˜์—ˆ์ง€๋งŒ ํฌ๋ž˜์‹œ ์ „์— ์™„์ „ํžˆ ์ง€์†๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
T3์— ์˜ํ•ด ๋ณ€๊ฒฝ๋œ A์™€ D์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹ค์‹œ ์ ์šฉํ•˜์—ฌ ์ปค๋ฐ‹๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์†์‹ค๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.


๊ฒฐ๋ก 
๋กœ๊ทธ์— ์žˆ๋Š” ์ฒดํฌํฌ์ธํŠธ๋Š” ๋ณต๊ตฌ ์‹œ ๋กœ๊ทธ๋ฅผ ์Šค์บ”ํ•ด์•ผ ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•จ์œผ๋กœ์จ ๋ณต๊ตฌ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. ์–ธ๋‘ ์ž‘์—…์€ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์˜ ์˜ํ–ฅ์„ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ผ๊ด€๋œ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๋ฐ ํ•„์š”ํ•˜๋ฉฐ, ๋ฆฌ๋‘ ์ž‘์—…์€ ์ปค๋ฐ‹๋œ ํŠธ๋žœ์žญ์…˜์˜ ์˜ํ–ฅ์„ ์žฌ์ ์šฉํ•˜์—ฌ ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ 

https://www.geeksforgeeks.org/how-to-implement-atomicity-and-durability-in-transactions-in-dbms/

 

How to Implement Atomicity and Durability in Transactions in DBMS? - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

728x90