etc/์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
[์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ] ํ๋ณต, ๋ณํ ์ ์ด
minzhen
2022. 7. 29. 10:17
Recovery(ํ๋ณต)
ํธ๋์ญ์ ๋ค์ ์ํํ๋ ๋์ค ์ฅ์ ๊ฐ ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์๋์์ ๋, ์์๋๊ธฐ ์ด์ ์ ์ ์ ์ํ๋ก ๋ณต๊ตฌํ๋ ์์
- ์์์ฑ ์ฃผ์ ๊ธฐ๋ฒ
1. ๋ก๊ทธ ๊ธฐ๋ฐ ํ๋ณต ๊ธฐ๋ฒ
Deferred Update (์ฐ๊ธฐ(์ง์ฐ) ๊ฐฑ์ ๊ธฐ๋ฒ)
ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ๋๊น์ง DB์ ๋ํ ์ค์ง์ ๊ฐฑ์ ์ ์ฐ๊ธฐ
- ํธ๋์ญ์ ์ด ์ํ๋๋ ๋์์ ๊ฐฑ์ ์ ์ผ๋จ log์ ๋ณด๊ด
- ํธ๋์ญ์ ์ ๋ถ๋ถ ์๋ฃ ์์ ์ log์ ๋ณด๊ดํ ๊ฐฑ์ ๋ด์ฉ์ ์ค์ DB์ ๊ธฐ๋กํจ
- Redo ์์ ๋ง ๊ฐ๋ฅ
Immediate Update (์ฆ๊ฐ ๊ฐฑ์ ๊ธฐ๋ฒ)
ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ฉด, ํธ๋์ญ์ ์ด ๋ถ๋ถ ์๋ฃ๋๊ธฐ ์ ์ด๋ผ๋ ์ฆ์ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์
- ์ฅ์ ๊ฐ ๋ฐ์ํ์ฌ ํ๋ณต ์์ ์ ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๊ฐฑ์ ๋ ๋ด์ฉ์ ๋ชจ๋ Log์ ๋ณด๊ด์ํด
- Redo์ Undo ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํจ
2. ๊ฒ์ฌ์ ํ๋ณต ๊ธฐ๋ฒ
Check Point (์ฒดํฌํฌ์ธํธ ๊ธฐ๋ฒ)
ํธ๋์ญ์ ์คํ ์ค, ๋์ค์ ์ฌ์คํํ ์ ์๋๋ก ํน์ ๋จ๊ณ์์ ์ฒดํฌํฌ์ธํธ๋ฅผ log์ ๋ณด๊ดํด๋๊ณ , ์ฅ์ ๋ฐ์์ ์ฒดํฌํฌ์ธํธ๋ถํฐ ํ๋ณต ์์ ์ํ
- ์ฅ์ ๋ฐ์ ์ ํธ๋์ญ์ ์ ์ฒด๋ฅผ ์ฒ ํํ์ฌ ํ๋ณตํ๋ ๊ฒ๋ณด๋ค ํ๋ณต ์๊ฐ์ด ์ ์ฝ๋จ
- ์ฒดํฌํฌ์ธํธ์๋ ๊ฐฑ์ ๋ด์ฉ, ์์คํ ์ ๋ํ ์ํฉ ๋ฑ์ ์ ๋ณด๊ฐ ํฌํจ๋จ
3. ๊ทธ๋ฆผ์ ํ์ด์ง ํ๋ณต ๊ธฐ๋ฒ
Shadow Paging (๊ทธ๋ฆผ์ ํ์ด์ง ๋์ฒด ๊ธฐ๋ฒ)
ํธ๋์ญ์ ์ํ ์ ๋ณต์ ๋ณธ์ ์์ฑํด๋๊ณ , DB ์ฅ์ ์ ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ณต๊ตฌํ๋ ๋ฐฉ๋ฒ
- ๊ฐฑ์ ์ด์ ์ DB๋ฅผ ์ผ์ ํฌ๊ธฐ ํ์ด์ง ๋จ์๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ ํ์ด์ง๋ง๋ค ๋ณต์ฌ๋ณธ์ธ ๊ทธ๋ฆผ์ ํ์ด์ง๋ฅผ ๋ณ๋ ๋ณด๊ด
- ํธ๋์ญ์ ์์ Rollback์ ๊ฐฑ์ ํ ๋ถ๋ถ์ ๊ทธ๋ฆผ์ํ์ด์ง๋ก ๋์ฒดํ์ฌ ํ๋ณต
Concurrency Control (๋ณํ ์ ์ด)
๋ค์ค ํ๋ก๊ทธ๋จ์ ์ด์ ์ ํ์ฉํ์ฌ ๋์์ ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ์ ๋ณํ ์ํํ ๋, ๋์์ ์คํ๋๋ ํธ๋์ญ์ ๋ค์ด DB์ ์ผ๊ด์ฑ์ ํ๊ดดํ์ง ์๋๋ก ํธ๋์ญ์ ๊ฐ์ ์ํธ์์ฉ์ ์ ์ดํ๋ ๊ฒ
- ๋ณํ ์ ์ด ์ ํจ → DB์ ์ฌ๋ฌ ํธ๋์ญ์ ๋์ ์ ๊ทผ ํ์ฉ → ๊ฐฑ์ ๋ถ์ค, ๋น์๋ฃ ์์กด์ฑ, ๋ชจ์์ฑ, ์ฐ์ ๋ณต๊ท ๋ฑ ๋ฌธ์ ๋ฐ์
- ์ผ๊ด์ฑ ์ฃผ์ ๊ธฐ๋ฒ
Locking (๋กํน)
ํธ๋์ญ์ ์ด ์ด๋ค ๋กํน ๋จ์์ ์ก์ธ์คํ๊ธฐ ์ ์ Lock์ ์์ฒญ → Lock์ด ํ๋ฝ ๋์ด์ผ๋ง ๊ทธ ๋กํน ๋จ์๋ฅผ ์ก์ธ์คํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฒ
- ํธ๋์ญ์ ์๋ฃ๊น์ง ์ถ๊ฐ์ ์ธ ์ ๊ทผ์ ์ ํ ⇒ ์ฃผ์ ๋ฐ์ดํฐ์ ์ก์ธ์ค๋ฅผ ์ํธ ๋ฐฐํ์ ์ผ๋ก ํ๊ฒ ๋จ
- ๋กํน ๋จ์ (Locking Granularity) : ํ๊บผ๋ฒ์ ๋กํนํ ์ ์๋ ๊ฐ์ฒด์ ํฌ๊ธฐ
- DB, ํ์ผ, ๋ ์ฝ๋, ํ๋ ๋ฑ์ด ๋จ์๊ฐ ๋ ์ ์์
- ๋กํน ๋จ์ ํผ → ๋กํฌ ์๊ฐ ์์ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ but ๋ณํ์ฑ ์์ค ์ ํ
- ๋กํน ๋จ์ ์์ → ๋กํฌ ์ ๋ง์ ๊ด๋ฆฌ๊ฐ ๋ณต์ก but ๋ณํ์ฑ ์์ค ํฅ์
Time Stamp Ordering (ํ์ ์คํฌํ ์์)
ํธ๋์ญ์ ๊ณผ ์ฝ์/๊ฐฑ์ ๋ ๋ฐ์ดํฐ์ ๋ํด ํ์ ์คํฌํ๋ฅผ ๋ถ์ฌํด ํธ๋์ญ์ ์ ์ฒ๋ฆฌ ์์๋ฅผ ๋ถ์ฌํ๋ ๊ธฐ๋ฒ
- ์ง๋ ฌ์ฑ ์์๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ํธ๋์ญ์ ๊ฐ ์ฒ๋ฆฌ ์์๋ฅผ ๋ฏธ๋ฆฌ ์ ํํ๋ ๊ธฐ๋ฒ ์ค ๊ฐ์ฅ ๋ณดํธ์ ์ธ ๋ฐฉ๋ฒ์
OCC (๋๊ด์ ๋ณํ ์ ์ด, Optimistic concurrency control)
๋ณํ ์ํํ๊ณ ์ ํ๋ ๋๋ถ๋ถ์ ํธ๋์ญ์ ์ด ํ๋ ์ ์ฉ(Read Only) ํธ๋์ญ์ ์ผ ๊ฒฝ์ฐ, ํธ๋์ญ์ ๊ฐ์ ์ถฉ๋๋ฅ ์ด ๋งค์ฐ ๋ฎ๋ค๋ ์ ์ ์ด์ฉํ ๊ธฐ๋ฒ
- = ์ต์ ๋ณํ ์ํ = ๋๊ด์ ๊ฒ์ฆ ๊ธฐ๋ฒ
- ์ผ๋จ ํธ๋์ญ์ ์ ์ํํ ํ, conflict๊ฐ ๋ฐ์ํ๋ค๋ฉด ํธ๋์ญ์ ์ abortํ๊ฑฐ๋ repairํ๋ ๋ฐฉ๋ฒ
MVCC (๋ค์ค ๋ฒ์ ๋์์ฑ ์ ์ด, Multi Version Concurrency Control)
ํ์ ์คํฌํ๋ฅผ ๋น๊ตํด ์ง๋ ฌ ๊ฐ๋ฅ์ฑ์ด ๋ณด์ฅ๋๋ ์ ์ ํ ๋ฒ์ ์ ์ ํํ์ฌ ์ ๊ทผํจ
- = ๋ค์ค ๋ฒ์ ์คํฌํ ๊ธฐ๋ฒ
- ํ์ ์คํฌํ ๊ธฐ๋ฒ์ ํธ๋์ญ์ ๋ฐ ๋ฐ์ดํฐ์ ์ด์ฉ ์๊ฐ์ ์๊ฐํ๋ก ๊ด๋ฆฌ ↔ ๋ค์ค ๋ฒ์ ๊ธฐ๋ฒ์ ๊ฐฑ์ ๋ ๋๋ง๋ค์ ๋ฒ์ ์ ๋ถ์ฌํ์ฌ ๊ด๋ฆฌ