์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- i-type
- ์ฐ๋ถํฌdb
- tcp ์ธ๊ทธ๋จผํธ
- xv6
- ์ค๋ธ์
- mariadb
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- 99ํด๋ฝ
- IEEE 802
- reducible
- tcp ํ๋กํ ์ฝ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์ค๋ฅ๊ฒ์ถ
- ๋น์ฃผ๊ธฐ์ ํธ
- ํ ํฐ ๋ฒ์ค
- ์์๋ฒํธ
- well known ํฌํธ
- ํญํด99
- ํ๋ ์ ๊ตฌ์กฐ
- ํ๋ก์ด๋์์
- ๊ฐ๋ฐ์์ทจ์
- ์ฝ๋ฉํ ์คํธ์ค๋น
- ์ค๋ฅ์ ์ด
- ์๋น์ค ํ๋ฆฌ๋ฏธํฐ๋ธ
- leetcode
- ๋ฐ์ดํฐ ์ ์ก
- ์ค๋ ๋
- til
- git merge
- ์ฃผ๊ธฐ์ ํธ
- Today
- Total
Unfazedโ๏ธ๐ฏ
DB ๋ฐ์ดํฐ๋ฒ ์ด์ค - ์ฅ์ ์ ํ๋ณต(๊ทธ๋ฆผ์ ํ์ด์ง, ๋ก๊ทธ ๊ธฐ๋ฐ ๋ณต๊ตฌ) ๋ณธ๋ฌธ
DB ๋ฐ์ดํฐ๋ฒ ์ด์ค - ์ฅ์ ์ ํ๋ณต(๊ทธ๋ฆผ์ ํ์ด์ง, ๋ก๊ทธ ๊ธฐ๋ฐ ๋ณต๊ตฌ)
9taetae9 2024. 4. 21. 16:281. ์ฅ์ ์ ํ๋ณต
- ์ฅ์ (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