2020. 6. 22. 20:29ใ์นดํ ๊ณ ๋ฆฌ ์์
๐ Warming Up - ํธ๋์ญ์ ์ด๋?
๐ ํธ๋์ญ์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ํ ์ฐ์ฐ๋ค์ ์งํฉ
ํ๋ณต๊ณผ ๋ณํ์ ์ด๋ฅผ ์๊ธฐ ์ํด์๋ ํธ๋์ญ์ ์ ๋จผ์ ์์์ผ ํ๋ค.
์ฝ๊ฒ ์๊ธฐํ๋ฉด ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ฉ์ ์ ์ฐจ์ ๊ด์ ์์ ๋ณธ ๊ฒ์ด๋ค.
ํธ๋์ญ์ ์ ์ต์ข ์ ์ผ๋ก COMMIT ๋๊ฑฐ๋ ROLLBACK ๋์ด์ผ ํ๋ค.
ํ๋์ ํธ๋์ญ์ ์์ ๋ง์ง๋ง ์ฐ์ฐ๊น์ง ์ ์์ ์ผ๋ก ์๋ฃ๋ ์ํ๋ฅผ "๋ถ๋ถ์๋ฃ"๋ผ๊ณ ํ๋๋ฐ, ์๋ฌด๋ฆฌ ๋ง์ง๋ง ์ฐ์ฐ๊น์ง ๋๋๋ค๊ณ ํด์ ์ ์ฒด ํธ๋์ญ์ ์ด ๋ค ์ฑ๊ณตํ๋ค๊ณ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋ง ์ค๋ฅ๊ฐ ์์ ์์๋ค๋ฉด COMMIT์ผ๋ก ํธ๋์ญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋ค.
ํ์ง๋ง "๋ถ๋ถ์๋ฃ" ์ํ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด "์คํจ" ๋จ๊ณ๋ก์ ROLLBACK์ ์คํํ์ฌ ํด๋น ํธ๋์ญ์ ์ด ์คํ๋๊ธฐ ์ ์ํ๋ก ๋๋๋ฆฐ๋ค.
๐ ํธ๋์ญ์ ์ ์ฑ์ง(4)
๐ ์์์ฑ(Atomicity)
ํธ๋์ญ์ ์ ์ค๋ฅ์์ด ์๋ฒฝํ๊ฒ ์๋ฃ๋๊ฑฐ๋, ์๋๋ฉด ์กฐ๊ธ์ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์์ ์คํ๋๊ธฐ ์ ๋จ๊ณ๋ก ๋ณต์๋์ด์ผ ํ๋ค. All or Nothing
์๋ฅผ ๋ค์ด, A -> B -> C ์์๋ก ์คํ๋๋ ํธ๋์ญ์ ์ด ์๋๋ฐ B์์ ์ค๋ฅ๊ฐ ๋ฌ๋ค๋ฉด, ํด๋น ํธ๋์ญ์ ์ ๋ชจ๋ ROLLBACK์ผ๋ก ์ ์ฒด์คํ์ทจ์๋์ด์ผ ํ๋ค.
๐ ์ผ๊ด์ฑ(Consistency)
๊ฐ์ ํธ๋์ญ์ ์ผ๋ก ์ฐ๊ด๋์ด ์๋ค๋ฉด, ์คํ ๊ฒฐ๊ณผ๋ ๋ชจ๋ ์ผ๊ด๋์ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, A๊ฐ B์๊ฒ ์ก๊ธ์ ํ๋ค๋ฉด ์ค๊ณ ๊ฐ๋ ๋์ ํฉ์ด ๊ฐ์์ผ ํ๋ค.
๐ ๊ฒฉ๋ฆฌ์ฑ(Isolation, ๋ ๋ฆฝ์ฑ)
ํ๋์ ํธ๋์ญ์ ์ด ์๋ฒฝํ ์คํ์ด ์๋ฃ๋ ๋๊น์ง, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ผ์ด๋ค์ง ๋ชปํ๋ค.
๐ ์์์ฑ(Durability, ์ง์์ฑ)
ํธ๋์ญ์ ์ ๊ฒฐ๊ณผ๋ ๋ฌด์จ ์ผ์ด ์๋๋ผ๋ ์์๋์ด์๋ ์๋๋ค.
์ํ ๊ฐ์ด ์ค์ํ ๊ณณ์ ์์์ฑ์ ์งํค๊ธฐ ์ํด ๋ค์ค ๋ฐฑ์ ์ ๊ฑฐ์น๋ค.
๐ ํ๋ณต์ด๋? - ํธ๋์ญ์ ์ ์คํํ๋ ๋์ค์ ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ DB๊ฐ ์์๋๋ฉด, ์์๋๊ธฐ ์ด์ ์ ์ ์ ์ํ๋ก๋ณต๊ตฌ์ํค๋ ๊ฒ
๐ ์๋ฌ์ ์ข ๋ฅ
๐ ์คํ์ฅ์
์์ฉํ๋ก๊ทธ๋จ ๋ด ์ฝ๋๋ก ๋ช ์๋์ด ์๋ ๊ฒฝ์ฐ๋ก, ์ฌ์ฉ์๊ฐ ROLLBACK ๋ช ๋ น์ ๋ด๋ ค ๊ณํ์ ์ผ๋ก ์ข ๋ฃ์ํจ ์ํ
๐ ํธ๋์ญ์ ์ฅ์
์ฐ์ฐ ์ค ๋ฐ์ํ ์ค๋ฅ๋ก, ๊ณํ๋์ง ์์ ๋น์ ์์ ์ธ ์ข ๋ฃ ์ํ
- ์๋ชป๋ ๋ฐ์ดํฐ์ ์ ๋ ฅ
- ๋ฐ์ดํฐ์ ๋ถ์ฌ
- ์ค๋ฒํ๋ก์ฐ
- ์์์ ํ๊ณ ์ด๊ณผ์์ฒญ
- 0์ผ๋ก ๋๋๋ ์ฐ์ฐ
๐ ์์คํ ์ฅ์
DB์๋ ์์์ ์ฃผ์ง ์์ง๋ง, CPU ๊ณ ์ฅ, ๋ฉ๋ชจ๋ฆฌ ๋๋ ์ํํธ์จ์ด ์ค๋ฅ๋ก ํธ๋์ญ์ ์ ์คํ์ ๋ฐฉํดํ๋ ์ํ
๐ ๋ฏธ๋์ด์ฅ์
ํ๋๋์คํฌ์ ์์์ผ๋ก DB์ ์์์ ์ฃผ๋ ์ํ
์ด๋ฌํ ์๋ฌ๋ค์ ํด๊ฒฐํ๋ ๊ฒ์ "ํ๋ณต"์ด๋ผ๊ณ ํ๋ค.
๐ ํ๋ณต์๋ ์ค๋ณต์ ์ฅ๊ธฐ๋ฒ์ผ๋ก ๋คํ & ๋ก๊ทธ๊ฐ ์๋ค
๐ ๋คํ
๋คํํธ๋ญ๋ง๋ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฒด๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํผ๋ค๊ฐ ๋ค๋ฅธ ์ ์ฅ์ฅ์น์ ๋ณต์ฌํด๋๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ณต์ฌ๋ณธ์ ์๋ณธ์ผ๋ก ๋ฎ์ด์์ฐ๋ ๊ธฐ๋ฒ์ผ๋ก, ๊ทธ๋ฆผ์ ํ์ด์ง์ ์ด์ฉํ๋ค.
๐ ๊ทธ๋ฆผ์ ํ์ด์ง(Shadow Paging)
ํธ๋์ญ์ ์ด ์คํ๋๋ ๋์ DB๋ฅผ ์ผ์ ํฌ๊ธฐ์ ํ์ด์ง(DB์ ์ฅ๋จ์)์ ๊ทธ ๋ณต์ฌ๋ณธ์ธ "๊ทธ๋ฆผ์ ํ์ด์ง"๋ก ๋ณด๊ดํ๋ ๋ฐฉ๋ฒ์ด๋ค.
DB์ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ธธ ๋๋ ์๋ณธ ํ์ด์ง๋ฅผ ์ฐ๊ณ , ํ๋ณต์ด ํ์ํ ๋๋ ๊ทธ๋ฆผ์ ํ์ด์ง๋ฅผ ์ด๋ค.
๐ ๋ก๊ทธ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ๊ฐ(์ ์ํ๊ณ ๊ฐํ ๋ชจ๋ ํ๋)์ ๋ก๊ทธํ์ผ์ ๊ธฐ๋กํด๋๊ณ , ์ค๋ฅ๊ฐ ๋๋ฉด ๋ก๊ทธํ์ผ์ ๋ถ์ํ์ฌ ์ด์ ๊ฐ์ ์ฐพ์๋
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ํธ๋์ญ์ ์ ๊ธฐ๋กํ ๋ก๊ทธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์.
<Ti, Start> : ํธ๋์ญ์ Ti์ ์คํ์ด ์์๋จ
<Ti, Xj, V1, V2> : Ti ์ค Xj ์ฐ์ฐ์ด ์คํ๋จ์ผ๋ก์จ V1๊ฐ V2๋ก ๋ณํจ
<Ti, Commit> : ํธ๋์ญ์ Ti๊ฐ ์ ์์๋ฃ๋์ด ์ปค๋ฐํจ
๋ง์ฝ ์๋ฌ ๋๋ ์์น ์์ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค๋ฉด, ์ฌ์ฉ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ก๊ทธํ์ผ์ ๋ถ์ํ์ฌ ์๋ DB์ํ๋ก "ํ๋ณต"ํ ์ ์๋ค.
๐ Redo์ Undo
- Redo(์ฌ์ํ) : ์ด๋ฏธ COMMIT์ ํ ํ์ DB์ ์์์ด ์ผ์ด๋ ๊ฒฝ์ฐ, V1์ด Xj๋ฅผ ๊ฑฐ์ณ V2๋ก ๋ฐ๋๋ ๊ฒ์ด ์ ์์ ์ธ ๊ฒ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ดํ์ ์ผ์ด๋ DB ์์์ ์ํฅ์ ๋ฐ์๋์ง ํด๋น ํธ๋์ญ์ ์ ๋ค์ ์ํํด๋ณด๋ ๊ฒ
- Undo(์ทจ์) : COMMIT๊น์ง ๋ชป๊ฐ๊ณ ๋์ค์ DB์ ์์์ด ์ผ์ด๋ ๊ฒฝ์ฐ, ํด๋น ํธ๋์ญ์ ์ด ์คํ๋๊ธฐ ์ ์ ์ํ๋ก ๋๋๋ฆฌ๋ ๊ฒ
๐ ์ฆ์๊ฐฑ์ : ํธ๋์ญ์ ์์ ์๋ ๊ฐ ์ฐ์ฐ์ด ๋๋ ๋๋ง๋ค ๋ก๊ทธํ์ผ์ ๊ธฐ๋ก๊ณผ ํจ๊ป DB์ ์ ์ฉ
ํธ๋์ญ์ ์ด COMMIT ๋๊ธฐ ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด, ์ด๋ฏธ ์ค๊ฐ์ค๊ฐ DB๊ฐ ๊ฐฑ์ ๋์ด์๊ธฐ ๋๋ฌธ์ ํด๋น ํธ๋์ญ์ ์ Undoํ๊ณ
ํธ๋์ญ์ ์ด COMMIT ๋ ํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋น ํธ๋์ญ์ ์ Redoํ๋ค.
๐ ์ง์ฐ๊ฐฑ์ : ํธ๋์ญ์ ์์ ์๋ ๊ฐ ์ฐ์ฐ์ด ๋๋๋ฉด ๋ก๊ทธํ์ผ์ ๊ธฐ๋ก๋ง ํ๊ณ , ํด๋น ํธ๋์ญ์ ์ ์ฒด๊ฐ COMMIT๋๋ฉด DB์ ์ ์ฉ
ํธ๋์ญ์ ์ด COMMIT ๋๊ธฐ ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด, ์์ง DB ๊ฐฑ์ ์ด ์ด๋ฃจ์ด์ง์ง ์์์ผ๋ฏ๋ก ๋ก๊ทธ๊ธฐ๋ก์ ์ญ์ ํ๊ณ
ํธ๋์ญ์ ์ด COMMIT ๋ ํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋น ํธ๋์ญ์ ์ Redoํ๋ค.
์ง์ฐ๊ฐฑ์ ์ ํธ๋์ญ์ ์ด COMMIT๋์ด์ผ ํธ๋์ญ์ ๋ด ๋ชจ๋ ์ฐ์ฐ์ ๋ก๊ทธ๊ธฐ๋ก์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์, ์ค๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด Undoํ ํ์์์ด ๋ก๊ทธ๊ธฐ๋ก๋ง ์ญ์ ํ๋ฉด ๋๋ค.
๊ทธ๋์ ์ง์ฐ๊ฐฑ์ ๊ธฐ๋ฒ์ "No-Undo"๊ธฐ๋ฒ์ด๋ผ๊ณ ๋ ํ๋ค.
๐ ๊ฒ์ฌ์์ ํ๋ณต : ์ฆ์๊ฐฑ์ ์ด๋ ์ง์ฐ๊ฐฑ์ ์ด๋ , ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์๋ฌ๋ฐ์ ์ด์ ์ COMMIT์ด ์ด๋ฏธ ๋๋ ํธ๋์ญ์ ๋ค์ ๋ชจ๋ Redo์ ๋์์ด ๋๋ค.
ํ์ง๋ง Redo์ ๋์์ด ์๋ฐฑ๊ฐ๋ผ๋ฉด ๊ต์ฅํ ๋นํจ์จ์ ์ผ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ๊ฒ์ฌ์์ (Check Point)์ ๋ง๋ค๊ณ , ์ด์์ด ์์๋ ๊ฒ์ฌ์์ ์ Redo ๋์์์ ์ ์ธํ๋ ๊ฒ์ด "๊ฒ์ฌ์์ ํ๋ณต" ๊ธฐ๋ฒ์ด๋ค.
๐ ๋ณํ์ ์ด๋? - ์ฌ๋ฌ ๋ช ์ด ๊ฐ์ DB๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฐ์ํ๊ฒ ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ
๐ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธธ๋?
๐ ๊ฐฑ์ ๋ถ์ค(Lost Update)
๋ ๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ๊ฐ์ ์๋ฃ๋ฅผ ๋์์ ๊ณต์ ํ์ฌ ์ ๋ฐ์ดํธ ํ ๋ ๊ฐฑ์ ๊ฒฐ๊ณผ์ ์ผ๋ถ๊ฐ ๋ถ์ค๋๋ ํ์
์๋ฅผ ๋ค์ด ํ ์ฌ๋์ A์ 100์ ๋ํ๊ณ ๋ค๋ฅธ ์ฌ๋์ A์ 50์ ๋ํ๋ค๋ฉด, ๋์ค์ ์ ๋ ฅ๋ ๊ฐ๋ง ์ ์ฉ๋๋ ํ์์ด๋ค.
๊ฐฑ์ ๋ถ์ค์ ํ๋์ ํธ๋์ญ์ ์ด ์์ ํ ๋๋๊ณ ๊ทธ ๋ค์ ํธ๋์ญ์ ์ ์คํํ๋ "์ง๋ ฌ ์ค์ผ์ฅด"๋ก ํด๊ฒฐํ ์ ์๋ค.
๐ ๋น์๋ฃ ์์กด์ฑ(Uncommitted Dependency)
ํ๋์ ํธ๋์ญ์ ์ํ์ด ์คํจ(๋๋ ROLLBACK)ํ๋๋ฐ ๊ทธ ํธ๋์ญ์ ์ด ํ๋ณต๋๊ธฐ ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์คํจ(๋๋ ์ทจ์)๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ๋ ํ์
๐ ๋ชจ์์ฑ(Inconsistency)
์๋ก ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ ๋, ๋ณ๊ฒฝ๋๊ธฐ ์ ์ ๊ฐ์ด ํ์ํ์ง๋ง ๋ค๋ฅธ ํธ๋์ญ์ ์ ๊ฒฐ๊ณผ ๋๋ฌธ์ ์ํฅ์ ๋ฐ๋ ํ์
๐ ์ฐ์๋ณต๊ท(Cascading Rollback)
๋ณํ ์ํ๋๋ ํธ๋์ญ์ ๋ค ์ค ํ๋์ ๋ฌธ์ ๊ฐ ์๊ฒจ ROLLBACK์ ๊ฑธ์๋๋ฐ, ๋ค๋ฅธ ํธ๋์ญ์ ๋ ๊ฐ์ด ROLLBACK๋๋ ํ์
์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ DB์ ์ ๊ทผํ๋ฉด ๋ง์ ํธ๋์ญ์ ์ด ๋ฐ์ํ๋๋ฐ, ๋์์ ์คํ๋๋ ํธ๋์ญ์ ๋ค์ ์ผ๊ด์ฑ ์๊ฒ ์ฒ๋ฆฌํ๊ณ ์ ๋ฌธ์ ๋ค์ ๋์ฒํ๊ธฐ ์ํด์๋ ํธ๋์ญ์ ๊ฐ ์ํธ์์ฉ์ ์ ์ดํด์ผ ํ๋ค.
๋ฐ๋ผ์ ๋ณํ์ ์ด๊ฐ ํ์ํ๋ค.
๐ ๋ณํ์ ์ด์๋ ์ด๋ค ๊ฒ์ด ์๋๊ฐ?
๐ ์ค์ผ์ฅด
๐ ์ง๋ ฌ ์ค์ผ์ฅด
ํธ๋์ญ์ ์ ์ฐ์ฐ์ ๋ชจ๋ ์์ฐจ์ ์ผ๋ก ์คํํ๋ ๊ฒ
๐ ๋น์ง๋ ฌ ์ค์ผ์ฅด
ํธ๋์ญ์ ๋ณ๋ ฌ ์ํํ๋ ์ค์ผ์ฅด, ์ธํฐ๋ฆฌ๋น๋ฐฉ์
๐ ๋กํน(Locking, ์๋ฌผ์ )
๊ณต์คํ์ฅ์ค์ฒ๋ผ ํ๋์ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์ค์ด๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ฌธ์ด ์ ๊ฒจ์์ด ๋ค์ด์ค์ง ๋ชปํจ.
ํ์ง๋ง ์ฌ์ฉ์ค์ธ ํธ๋์ญ์ ์ด ํด์ ๋์ง ์์ผ๋ฉด ๊ต์ฐฉ์ํ(Dead-Lock)์ ๋น ์ ธ ๋ฌดํ์ ๊ธฐ๋ค๋ ค์ผ ํจ.
- ์ฑ์ฅ(ํ์ฅ)๋จ๊ณ(Growing Phase) : ์ ๊ทธ๊ธฐ
- ์ถ์๋จ๊ณ(Shrinking Phase) : ์ ๊ธํด์
- ์ ์ฉ๋กํฌ : ์ฝ๊ธฐ + ์ฐ๊ธฐ ํ์ฉ
- ๊ณต์ฉ๋กํฌ : ์ฝ๊ธฐ๋ง ํ์ฉ
๐ ํ์์คํฌํ(Time-Stamp, ๋ฒํธํ)
์ํ์ฒ๋ผ ํธ๋์ญ์ ๋ค์๊ฒ ๋ฒํธํ๋ฅผ ๋ถ์ฌํ์ฌ ์์์ ๋ง๊ฒ ์คํํจ.
ํธ๋์ญ์ ์ด ์์คํ ์ ๋ค์ด์จ ์๊ฐ์์๋ก ๋ถ์ฌํ๊ฑฐ๋ ๋๋ ๊ทธ ์๊ฐ์ CPU ํด๋ญ์ฃผํ์๋ก ๋ถ์ฌํจ.