๊ฐ๋
ํธ๋์ญ์ (Transaction)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๋ ํ๋์ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ ์์ ์ ๋จ์ ๋๋ ํ๊บผ๋ฒ์ ๋ชจ๋ ์ํ๋์ด์ผ ํ๋ ์ผ๋ จ์ ์ฐ์ฐ์ ์๋ฏธํ๋ค.
- ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ๋ณํ ์ ์ด ๋ฐ ํ๋ณต ์์ ์ ์ฒ๋ฆฌ๋๋ ์์ ์ ๋ ผ๋ฆฌ์ ๋จ์์ด๋ค.
- ์ฌ์ฉ์๊ฐ ์์คํ
์ ๋ํ ์๋น์ค ์๊ตฌ ์ ์์คํ
์ด ์๋ตํ๊ธฐ ์ํ ์ํ ๋ณํ ๊ณผ์ ์ ์์
๋จ์์ด๋ค.
- ์ํ๋ณํ : SQL์ง์์ด(SELECT | INSERT | UPDATE | DELETE)๋ฅผ ํตํด DB์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๊ฐ ๋ณํํ๋ ๊ฒ
- ์์ ๋จ์ : ์ผ๋ จ์ ์ฐ์ฐ(SQL ๋ช ๋ น๋ฌธ ์งํฉ). ์ฌ๋์ด ์ ํ๋ ๊ธฐ์ค(ํ๋์ ๋ ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ)์ ๋ฐ๋ผ ์ ์ํจ
ํ๋์ ํธ๋์ญ์ ์ค๊ณ๋ฅผ ์ ๋ง๋๋ ๊ฒ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋ง์ ์ด์ ์ ๊ฐ์ ธ๋ค์ค๋ค.
Lock ๊ณผ ํธ๋์ญ์
Lock
- ์ฌ๋ฌ Connection์์ ๋์์ ๋์ผํ ์์์ ์์ฒญํ ๊ฒฝ์ฐ, ํ ์์ ์ ํ๋์ Connection๋ง ๋ณ๊ฒฝํ ์ ์๋๋ก ํด์ฃผ๋ ์ญํ
- ๋์์ฑ ์ ์ด
ํธ๋์ญ์
- ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ์์ฒด๊ฐ 100% ์ ์ฉ๋๊ฑฐ๋ ์๋ฌด๊ฒ๋ ์ ์ฉ๋์ง ์์์ผํจ์ ๋ณด์ฅ
- ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅ
ํธ๋์ญ์ ํน์ง(ACID)
- ์์์ฑ(Atomicity)
- ํธ๋์ญ์ ์ด DB์ ๋ชจ๋ ๋ฐ์๋๊ฑฐ๋, ํน์ ์ ํ ๋ฐ์๋์ง ์์์ผ ๋๋ค. (= ํ๋์ ํธ๋์ญ์ ์ Commit๋๊ฑฐ๋ Rollback๋๋ค.)
- Commit : ํ๋์ ํธ๋์ญ์ ์ ์ํ๋ ์ฟผ๋ฆฌ๋ฌธ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์ด์ผ๋ง ํ๋์ ์์ (ํธ๋์ญ์ )์ด ์๋ฃ๋๋ ๊ฒ์ด๋ค.
- Rollback : ์์ ๋จ์์ ์ํ๋ ์ฟผ๋ฆฌ ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ๋ชจ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ทจ์ํ๊ณ ์ด์ ์ํ๋ก ๋๋ ค๋์์ผ ํ๋ค.
- ํ๋ณต
- ์ผ๊ด์ฑ(Consistency)
- ํธ๋์ญ์ ์ ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ ํญ์ ์ผ๊ด์ฑ ์์ด์ผ ํ๋ค.
- ๋์์ฑ ์ ์ด
- ๋
๋ฆฝ์ฑ(Isolation)
- ๋ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ ๋ณํ ์คํ๋๊ณ ์์ ๋, ์ด๋ค ํธ๋์ญ์ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ฐ์ฐ์ ๋ผ์ด๋ค ์ ์๋ค.
- ๋์์ฑ ์ ์ด
- ์ง์์ฑ(Durability)
- ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ผ๋ฉด, ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๋ค.
- ํ๋ณต
์ฐ์ฐ
ํ๋์ ํธ๋์ญ์ ์ Commit ๋๊ฑฐ๋ Rollback ๋์ด์ผ ํ๋ค.
Commit
ํ๋์ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ๊ณ , DB๊ฐ ์ผ๊ด์ฑ์๋ ์ํ์ผ ๋ ํธ๋์ญ์ ์ด ํํ ์ฐ์ฐ์ด ์๋ฃ๋ ๊ฒ์ ํธ๋์ญ์ ๊ด๋ฆฌ์์๊ฒ ์๋ ค์ฃผ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฐ์ฐ
Rollback
ํ๋์ ํธ๋์ญ์
์ฒ๋ฆฌ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข
๋ฃ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ๊นจ๋จ๋ ธ์ ๋, ํธ๋์ญ์
์ ์ผ๋ถ๊ฐ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์๋๋ผ๋, ์์์ฑ์ ๊ตฌํํ๊ธฐ ์ํด ์ด ํธ๋์ญ์
์ด ํํ ๋ชจ๋ ์ฐ์ฐ์ ์ทจ์(Undo)ํ๋ ์ฐ์ฐ์ด๋ค.
transaction์ด ์ ์์ ์ผ๋ก ์ข
๋ฃ๋์ง ์์์ ๋, last consistent state(ex. ํธ๋์ญ์
์ ์์ ์ํ)๋ก Rollback ํ ์ ์์.
ํธ๋์ญ์ ๋ด์์ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ rollback,
์์คํ ์ค๋ฅ์ ๊ฐ์ ํธ๋์ญ์ ์ธ๋ถ ์์ธ์ผ๋ก ์ธํด ์๋ฌ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ ํ๋ณต์ ํ๋ค.
ํธ๋์ญ์ ์ ์ํ
- ํ๋(Active) : ํธ๋์ญ์ ์ด ์คํ์ค์ธ ์ํ
- ์คํจ(Failed) : ํธ๋์ญ์ ์คํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์ค๋จ๋ ์ํ
- ์ฒ ํ(Aborted) : ํธ๋์ญ์ ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด Rollback ์ฐ์ฐ์ ์ํํ ์ํ
- ๋ถ๋ถ ์๋ฃ(Partially Committed) : ํธ๋์ญ์ ์ ๋ง์ง๋ง ์ฐ์ฐ๊น์ง ์คํํ์ง๋ง, Commit ์ฐ์ฐ์ด ์คํ๋๊ธฐ ์ง์ ์ ์ํ
- ์๋ฃ(Committed) : ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ข ๋ฃ๋์ด Commit ์ฐ์ฐ์ ์คํํ ํ์ ์ํ
ํธ๋์ญ์ ์ ์ฃผ์ํ ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค Connection ๊ฐ์๊ฐ ์ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ์ ๋ฒ์๋ฅผ ์ต์ํํด์ผ ํ๋ค.
- Conntection์ ์์ ํ๋ ์๊ฐ์ด ๊ธธ์ด์ง์๋ก ์ฌ์ฉ ๊ฐ๋ฅํ Connection ์๋ ์ค์ด๋ ๋ค.
๊ต์ฐฉ์ํ
๋ ๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ํน์ ์์์ ์ ๊ธ์ ํ๋ํ ์ฑ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ ํ๊ณ ์๋ ์ ๊ธ์ ์๊ตฌํ์ฌ ์๋ฌด๋ฆฌ ๊ธฐ๋ค๋ ค๋ ์ํฉ์ด ๋ฐ๋์ง ์๋ ์ํ
๊ต์ฐฉ์ํ์ ๋น๋๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ
- ํธ๋์ญ์ ์ ์์ฃผ Commit
- ์ ํด์ง ์์๋๋ก ํ
์ด๋ธ์ ์ ๊ทผ
- ํธ๋์ญ์ 1 ์ด ํ ์ด๋ธ B -> A ์ ์์ผ๋ก ์ ๊ทผํ๊ณ , ํธ๋์ญ์ 2 ๋ ํ ์ด๋ธ A -> B์ ์์ผ๋ก ์ ๊ทผํ๋ค. ํธ๋์ญ์ ๋ค์ด ๋์ผํ ํ ์ด๋ธ ์์ผ๋ก ์ ๊ทผํ๊ฒ ํ๋ค.
- ์ฝ๊ธฐ ์ ๊ธ ํ๋(SELECT ~ FOR UPDATE) ์ฌ์ฉ์ ํผํจ
- ํ
์ด๋ธ ๋จ์์ ์ ๊ธ์ ํ๋ํด ๊ฐฑ์ ์ ์ง๋ ฌํ
- ํ ํ ์ด๋ธ์ ๋ณต์ ํ์ ๋ณต์์ ์ฐ๊ฒฐ์์ ์์ ์์ด ๊ฐฑ์ ํ๋ฉด ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๋ค, ์ด ๊ฒฝ์ฐ์๋ ํ ์ด๋ธ ๋จ์์ ์ ๊ธ์ ํ๋ํด ๊ฐฑ์ ์ ์ง๋ ฌํ ํ๋ฉด ๋์์ฑ์ ๋จ์ด์ง์ง๋ง ๊ต์ฐฉ์ํ๋ฅผ ํํผํ ์ ์๋ค.
DBMS์ ๊ตฌ์กฐ
ํฌ๊ฒ ์ง์ ์ฒ๋ฆฌ๊ธฐ(Query Processor)์ ์ ์ฅ ์์คํ (Storage System) ๋ ๊ฐ์ง๋ก ๋๋๋ค.
- ์ ์ถ๋ ฅ ๋จ์๋ ๊ณ ์ ๊ธธ์ด์ ํ์ด์ง(Page)๋จ์๋ก ๋์คํฌ๋ฅผ ์ฝ๊ฑฐ๋ ์ด๋ค.
- ์ ์ฅ ๊ณต๊ฐ์ ๋นํ๋ฐ์ฑ ์ ์ฅ ์ฅ์น์ธ ๋์คํฌ๋ก ์ผ๋ถ๋ถ์ Main Memory์ ์ ์ฅํ๋ค.
Buffer ๊ด๋ฆฌ ์ ์ฑ
DBMS์ ์ ์ฅ ์์คํ (Storage System)์ ์ํ๋ ๋ชจ๋ ์ค ํ๋๋ก, Main Memory์ ์ ์งํ๋ ํ์ด์ง๋ฅผ ๊ด๋ฆฌํ๋ ๋ชจ๋
- Page Buffer Manager
- Buffer Manager
Buffer ๊ด๋ฆฌ ์ ์ฑ ์ ๋ฐ๋ผ undo ๋ณต๊ตฌ์, redo ๋ณต๊ตฌ๊ฐ ์๊ตฌ๋๊ฑฐ๋ ๊ทธ๋ ์ง ์๊ฒ ๋๋ฏ๋ก transaction ๊ด๋ฆฌ์ ๋งค์ฐ ์ค์ํ ๊ฒฐ์ ์ ๊ฐ์ ธ์จ๋ค.
ํ๋ณต(๋ณต๊ตฌ๋ฐฉ๋ฒ)
์์คํ ์ค๋ฅ์ ๊ฐ์ ํธ๋์ญ์ ์ธ๋ถ ์์ธ์ผ๋ก ์ธํด ์๋ฌ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ์ ํ๋ณต์ ํ๋ค.
์์คํ ์ค๋ฅ ๋๋ ๋ฌผ๋ฆฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์คํจ(failure)๋ผ๊ณ ํ๋ค.
UNDO : ์์ํ๋ก ๋๋๋ฆผ
์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ง ์์ transaction์ด ๋ณ๊ฒฝํ page๋ค์ ์์ ๋ณต๊ตฌ ๋์ด์ผ ํ๋๋ฐ, ์ด ๋ณต๊ตฌ๋ฅผ undo๋ผ๊ณ ํ๋ค.
Buffer ๊ต์ฒด๋ transaction๊ณผ๋ ๋ฌด๊ดํ๊ฒ Buffer์ ์ํ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์์ ๋ Page๊ฐ Buffer ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ์ ๋์คํฌ์ ์ถ๋ ฅ๋ ์ ์์.
∴ undo๋ก ๋ณต๊ตฌ
์์ ๋ ํ์ด์ง๋ฅผ ๋์คํฌ์ ์ฐ๋ ์์ ์ผ๋ก ๋ถ๋ฅ
- STEAL : ์์ ๋ ํ์ด์ง๋ฅผ ์ธ์ ๋ ์ง ๋์คํฌ์ ์ธ ์ ์๋ ์ ์ฑ
- UNDO ์์ ์ด ํ์ํ์ง ์์ง๋ง, ๋งค์ฐ ํฐ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๊ฐ ํ์ํจ.
- ¬STEAL : ์์ ๋ ํ์ด์ง๋ค์ EOT (End Of Transaction)๊น์ง๋ ๋ฒํผ์ ์ ์งํ๋ ์ ์ฑ
- ๋๋ถ๋ถ์ DBMS๊ฐ ์ฑํํ๋ Buffer ๊ด๋ฆฌ ์ ์ฑ
- UNDO logging๊ณผ ๋ณต๊ตฌ๋ฅผ ํ์๋ก ํจ.
- ์ฌ์ฉ์๊ฐ ํ๋ ์์ ์ ๋ฐ๋๋ก ์งํํด ์์ํ๋ก ๋๋๋ฆฐ๋ค.
REDO : ์ฌ๋ฐ์
์ด๋ฏธ commitํ transaction์ ์์ ์ ์ฌ๋ฐ์ํ๋ ๋ณต๊ตฌ ์์
Buffer ๊ด๋ฆฌ ์ ์ฑ ์ ์ํฅ์ ๋ฐ๋๋ค.
Transaction์ด ์ข ๋ฃ๋๋ ์์ ์ ํด๋น transaction์ด ์์ ํ page๋ฅผ ๋์คํฌ์ ์ธ ๊ฒ์ธ๊ฐ ์๋๊ฐ๋ก ๋ถ๋ฅ
- FORCE : ์์ ํ๋ ๋ชจ๋ ํ์ด์ง๋ฅผ Transaction commit ์์ ์ disk์ ๋ฐ์
- transaction์ด commit ๋์์ ๋ ์์ ๋ ํ์ด์ง๋ค์ด disk ์์ ๋ฐ์๋๋ฏ๋ก redo ํ์ ์์.
- ¬FORCE : commit ์์ ์ ๋ฐ์ํ์ง ์๋ ์ ์ฑ
- transaction์ด disk ์์ db์ ๋ฐ์๋์ง ์์ ์ ์๊ธฐ์ redo ๋ณต๊ตฌ๊ฐ ํ์.
- ๋๋ถ๋ถ์ DBMS ์ ์ฑ
- ์ด์ ์ํ๋ก ๋๋์๊ฐ ํ, ์คํจ๊ฐ ๋ฐ์ํ๊ธฐ ์ ๊น์ง์ ๊ณผ์ ์ ๊ทธ๋๋ก ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- redo๋ฅผ ํ๊ธฐ ์ํด์๋ ์ ์์ ์ผ๋ก ์คํ ๋๊ธฐ๊น์ง์ ๊ณผ์ ์ ๊ธฐ๋กํด์ผ ํ๋๋ฐ, ์ด๋ฅผ log๋ผ๊ณ ํ๋ค.
Check Point
- check point๋ก ์ค์ ํ ์ง์ ์ด์ ๊น์ง๋ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ์ด ๋ผ์ disk์ ํ์คํ ์ ์ฅ๋ ์ํ๋ฅผ ์๋ฏธํ๋ค.
- check point๋ฅผ ์ค์ ํ๋ ์ด์ ๋ ์์คํ ์ ํ๋ณตํ๊ธฐ ์ํด ๋๋์๊ฐ ๋, ๋๋ฌด ๋ง์ด ๋๋์๊ฐ์ง ์๋๋ก ํ๊ธฐ ์ํจ์ ๋๋ค.
- ๋ง์ฝ ์คํจ๊ฐ ๋ฐ์ํ์ฌ ํ๋ณต์ ํ ๋ check point๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด, redo๋ check point ์์ ๋ถํฐ log๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด์ ํธ๋์ญ์ ์ ์ํํ์ง๋ง, undo๋ log๋ฅผ ๋ฐ๋ผ๊ฐ์ง ์๊ณ ํธ๋์ญ์ ์ ์ฌ์ํ ํ๋ค.
์์
- ์์คํ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, undo ๋ฐ์ดํฐ๋ ๋ชจ๋ ๋ ์๊ฐ๋ค.
- ๊ฒฐ๊ตญ redo ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ ๋ง์ง๋ง Check Point๋ถํฐ ์ฅ์ ๊น์ง DB Buffer Cache๋ฅผ ๋ณต๊ตฌํ๊ฒ ๋๋ค.
- ๋ณต๊ตฌ๊ฐ ์๋ฃ๋๋ฉด undo๋ฅผ ์ด์ฉํ์ฌ Commit ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ Rollbackํจ์ผ๋ก์จ ๋ณต๊ตฌ๋ฅผ ์๋ฃํ๊ฒ ๋๋ค.
- ๊ฒฐ๊ตญ Redo๊ฐ Undo๋ฅผ ๋ณต๊ตฌํ๊ณ ์ต์ข ์ ์ผ๋ก Undo๊ฐ ๋ณต๊ตฌ๋ฅผ ํ๊ฒ ๋๋ค.
- ํธ๋์ญ์
T1
- check point ์ด์ ์ ์คํ์ด ์๋ฃ๋์์ผ๋ฏ๋ก failure ๋๋๋ผ๋ ์ด๋ฏธ disk์ ์ ์ฅ์ด ๋ ์ํ์ด๋ฏ๋ก ํ๋ณต์ ํ์ง ์์ต๋๋ค.
- ํธ๋์ญ์
T2
- check point ์ด์ ์ ์คํ๋ ๋ด์ฉ์ disk์ ๋ฐ์์ด ๋์์ผ๋ฏ๋ก check point ์ดํ์ ๋ด์ฉ์ log๋ฅผ ๋ฐ๋ผ๊ฐ๋ redo๋ฅผ ์ํํ๋ค.
- ํธ๋์ญ์
T3
- failure ์์ ์ ์คํ์ค์ด์์ผ๋ฏ๋ก check point ์์ ์ผ๋ก undoํ ํ, ํธ๋์ญ์ ์ ์ฌ์คํํ๋ค.
- ํธ๋์ญ์
T4
- check point ์ดํ์ ์คํ๋๊ณ failure ์์ ์ ์ ์คํ์ด ๋๋ฌ์ผ๋ฏ๋ก redo๋ฅผ ์ํํ๋ค.
- ํธ๋์ญ์
T5
- check point ์ดํ์ ์คํ๋๊ณ failure ์์ ์ ์คํ์ค์ด์์ผ๋ฏ๋ก ์์์ง์ ๊น์ง undoํ ํ, ํธ๋์ญ์ ์ ์ฌ์คํ
์ฐธ๊ณ
- gyoogle.dev/blog/computer-science/data-base/Transaction.html
- coding-factory.tistory.com/226
- brownbears.tistory.com/181
- d2.naver.com/helloworld/407507
- https://dheldh77.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction
- https://victorydntmd.tistory.com/130
'๐CS > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ํธ๋์ญ์ ์ ํ ์ค์ (0) | 2021.05.02 |
---|---|
[DB] ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค(Transaction Isolation Level) (0) | 2021.04.23 |
[DB] ์บ์, Redis (0) | 2021.04.18 |
[DB] Connection Pool (0) | 2021.04.18 |
[DB] ์ ๊ทํ (0) | 2021.04.11 |
๋๊ธ