๊ตญ๋ฏผ๋ํ๊ต์์ "์ค๋ผํด๋ก ๋ฐฐ์ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ๋ก ๊ณผ ์ค์ต(2ํ)" ์ ์ด์ฉํ
์ ์ธ์ ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
1. ํธ๋์ญ์
ํธ๋์ญ์ ์ ๊ฐ๋
ํธ๋์ญ์ (transaction)
=> DBMS์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ๋จ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํธ๋์ญ์ ์ ์ ์ํ๋ ์ด์ ๋ก๋
1. DBMS์์ ์ฅ์ ๊ฐ ์ผ์ด๋ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ์์ ์ ๋จ์๊ฐ ๋จ
2. DBMS์์ ์ฌ๋ฌ ์์ ์ด ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์์ ์ ์๋ก ๋ถ๋ฆฌํ๋ ๋จ์๊ฐ ๋จ
ํธ๋์ญ์ ์ ์ ์ฒด๊ฐ ์ํ๋๊ฑฐ๋ ๋๋ ์ ํ ์ํ๋์ง ์์์ผ ํจ(all or nothing)
์๋ฅผ ๋ค์ด ์ดํด๋ณด๋ฉด
์ํ ์ ๋ฌด๋ฅผ ๋ณด๋๋ฐ A๊ณ์ข (๋ฐ์ง์ฑ)์์ B ๊ณ์ข(๊น์ฐ์)๋ก 10000์์ ์ด์ฒดํ ๊ฒฝ์ฐ
์ด๋ฐ์์ผ๋ก ํธ๋์ญ์ ์ด ์ํ๋๋๋ฐ
ํธ๋์ญ์ ์ ์ข ๋ฃ(COMMIT)๋ฅผ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์
1. โ -> โก -> โข -> โฃ -> COMMIT -> โค -> โฅ
2. โ -> โก -> โข -> โฃ -> โค -> โฅ -> COMMIT
(DBMS๋ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ์๋ต์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด 1๋ฒ ๋ฐฉ๋ฒ์ ์ ํ)
ํธ๋์ญ์ ์ ์ฑ์ง
ํธ๋์ญ์ ์ ACID ์ฑ์ง
1. ์์์ฑ(Atomicity) : ํธ๋์ญ์ ์ ํฌํจ๋ ์์ ์ ์ ๋ถ ์ํ๋๊ฑฐ๋ ์๋๋ฉด ์ ๋ถ ์ํ๋์ง ์์์ผ ํจ
=> ํธ๋์ญ์ ์ด ์์์ฒ๋ผ ๋ ์ด์ ์ชผ๊ฐ์ง์ง ์๋ ํ๋์ ํ๋ก๊ทธ๋จ ๋จ์๋ก ๋์ํด์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค
(์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ฒ์ ์ํ๋ก ๋ชจ๋ ๋๋๋ฆผ)
COMMIT ์ฐ์ฐ : ํธ๋์ญ์ ์ด ์ฐ์ฐ์ ์๋ฃ๋ ๊ฒ์ COMMIT ๋ฌธ์ฅ์ ํตํด ํธ๋์ญ์ ๊ด๋ฆฌ์์๊ฒ ์๋ ค ์ฃผ๋ ์ฐ์ฐ
ROLLBACK ์ฐ์ฐ : ํธ๋์ญ์ ์ด ํํ ๋ชจ๋ ์ฐ์ฐ์ ์ทจ์์ํค๊ฑฐ๋ ํธ๋์ญ์ ์ ์ฌ์์ํ๋๋ก ํจ
2. ์ผ๊ด์ฑ(Consistency) : ํธ๋์ญ์
์ ์ํํ๊ธฐ ์ ์ด๋ ์ํํ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํญ์ ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํด์ผ ํจ
=> ์ผ๊ด์ฑ์ ํ ์ด๋ธ ์์ฑ ์ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด(CREATE/ALTER ๋ฌธ)์ ํตํด ๋ช ์๋จ
3. ๊ณ ๋ฆฝ์ฑ(Isolation) : ์ํ ์ค์ธ ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ผ์ด๋ค์ด ๋ณ๊ฒฝ ์ค์ธ ๋ฐ์ดํฐ ๊ฐ์ ํผ์ํ๋ ์ผ์ด ์์ด์ผ ํจ
=> ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ณต์ ๊ฐ ๋ชฉ์ ์ด๋ฏ๋ก ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋๋ฉฐ, ์ด๋ฌํ ํธ๋์ญ์ ์ ์ํธ ์กด์ฌ๋ฅผ ๋ชจ๋ฅด๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋จ์ ์๋ฏธํ๋ค
(๊ณ ๋ฆฝ์ฑ์ ์ ์งํ๊ธฐ ์ํด์๋ ํธ๋์ญ์ ์ด ๋ณ๊ฒฝ ์ค์ธ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ๊ณ ์ธ ๋ ์ ์ด๊ฐ ํ์)
4. ์ง์์ฑ(Durability) : ์ํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ ํธ๋์ญ์
์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ ์ ์ฅํด์ผ ํจ
=> ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์๋ฃ(commit) ํน์ ๋ถ๋ถ์๋ฃ(partial commit)ํ ๋ฐ์ดํฐ๋ฅผ DBMS๊ฐ ์ฑ ์์ง๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋กํ๋ ์ฑ์ง
(ํธ๋์ญ์ ์ฑ๊ณต ๊ฒฐ๊ณผ ๊ฐ์ ์ฅ์ ๋ฐ์ ํ์๋ ๋ณํจ์์ด ๋ณด๊ด๋์ด์ผ ํจ)
ํธ๋์ญ์ ์ํ๋
1. ํ๋(active)
=> ํธ๋์ญ์ ์ด Begin_transaction์ผ๋ก๋ถํฐ ์คํ์ ์์ํ์๊ฑฐ๋ ํ์ฌ ์คํ ์ค์ธ ์ํ๋ฅผ ์๋ฏธ
(<ํ๋>์ ๋ค์ ์ํ๋ <๋ถ๋ถ ์๋ฃ> ๋ <์คํจ> ์ํ๋ก ์ ์ด)
2. ๋ถ๋ถ ์๋ฃ(partially committed)
=> ํธ๋์ญ์ ์ด ๋ง์ง๋ง ๋ช ๋ น๋ฌธ์ ์คํ์ํจ ์งํ์ ์ํ๋ฅผ ์๋ฏธ
(<๋ถ๋ถ ์๋ฃ>์ ๋ค์ ์ํ๋ <์คํจ> ๋ <์๋ฃ> ์ํ๋ก ์ ์ด)
3. ์คํจ(failed)
=> ํธ๋์ญ์ ์คํ ์ค์ ์ฅ์ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์ ์์ ์ธ ์คํ์ ๋ ์ด์ ํ ์ ์๋ ์ํ๋ฅผ ์๋ฏธ
(<์คํจ> ์ ๋ค์ ์ํ๋ ์ง๊ธ๊น์ง ์คํํ ๋ชจ๋ ์ฐ์ฐ์ <์ฒ ํ>ํ๋ ์ํ๋ก ์ ์ด)
4. ์๋ฃ(committed)
=> ํธ๋์ญ์ ์คํ์ด ์ฑ๊ณต์ ์ผ๋ก <์๋ฃ> ๋์ด COMMIT ์ฐ์ฐ์ ์ํํ ์ํ๋ฅผ ์๋ฏธ
5. ์ฒ ํ(aborted)
=> ํธ๋์ญ์ ์คํ์ <์คํจ> ํ์ฌ ROLLBACK ์ฐ์ฐ์ ์ํํ ์ํ๋ฅผ ์๋ฏธ
ํธ๋์ญ์ ๊ณผ DBMS
- DBMS๋ ์์์ฑ์ ์ ์งํ๊ธฐ ์ํด ํ๋ณต(๋ณต๊ตฌ) ๊ด๋ฆฌ์ ํ๋ก๊ทธ๋จ์ ์๋์ํด
- DBMS๋ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋์์ฑ ์ ์ด์ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ํ์ฉํจ
- DBMS๋ ๊ณ ๋ฆฝ์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์์ฑ ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์๋์ํด
- DBMS๋ ์ง์์ฑ์ ์ ์งํ๊ธฐ ์ํด ํ๋ณต ๊ด๋ฆฌ์ ํ๋ก๊ทธ๋จ์ ์ด์ฉํจ
2. ๋์์ฑ ์ ์ด
๋์์ฑ ์ ์ด ๊ฐ๋
๋์์ฑ ์ ์ด (๋ณํ ์ ์ด : currency control)
=> ๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์์ ๋ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋ ๋, ์ผ๊ด์ฑ์ ํด์น์ง ์๋๋ก ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ ์ ํ ์ ์ดํด ์ฃผ๋ ๊ฒ
(๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์ ์ง์ํ๋ DBMS์ ๊ฒฝ์ฐ, ๋ฐ๋์ ์ง์ํด์ผ ํ๋ ๊ธฐ๋ฅ)
์ฐ๊ธฐ/ ์ฐ๊ธฐ ์ ๋ฌด์ ์ด ๋ณํ ์ํ์ ๋ฌธ์ ์ ์ ์์ธํ ์ดํด๋ณด์
=> ๋ ๊ฐ์ ํธ๋์ญ์ ์ด ํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๊ฐฑ์ (update)ํ ๋ ๋ฐ์
๊ฐฑ์ ์์ค
๊ฐฑ์ ์์ค(lost update)
=> ํ๋์ ํธ๋์ญ์ ์ด ๊ฐฑ์ ํ ๋ด์ฉ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฎ์ด์์ผ๋ก์จ ๊ฐฑ์ ์ด ๋ฌดํจํ๊ฐ ๋๋ ๊ฒ์ ์๋ฏธ
๋ชจ์์ฑ
๋ชจ์์ฑ(Inconsistency)
=> ๋ค๋ฅธ ํธ๋์ญ์ ๋ค์ด ํด๋น ํญ๋ชฉ ๊ฐ์ ๊ฐฑ์ ํ๋ ๋์, ํ ํธ๋์ญ์ ์ด ๋ ๊ฐ์ ํญ๋ชฉ ๊ฐ ์ค ์ด๋ค ๊ฒ์ ๊ฐฑ์ ๋๊ธฐ ์ ์ ๊ฐ์ ์ฝ๊ณ , ๋ ๋ค๋ฅธ ๊ฒ์ ๊ฐฑ์ ๋ ํ์ ๊ฐ์ ์ฝ๊ฒ ๋์ด ๋ฐ์ดํฐ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ ์ํฉ
์ฐ์ ๋ณต๊ท
์ฐ์ ๋ณต๊ท(cascading rollback)
=> ํ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ๋ค์ ์คํจํ์ฌ rollback ์ฐ์ฐ์ ์ํํ๋ ๊ณผ์ ์์, ๊ฐฑ์ ๊ณผ rollback ์ฐ์ฐ์ ์คํํ๊ณ ์๋ ์ฌ์ด์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์
ํธ๋์ญ์ ์ค์ผ์ค
๋์์ฑ ์ ์ด
=> ๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์์ ๋ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ ์ ์ํ์ฌ ํด๋น ์ฐ์ฐ์ ์ํํ ๋, ๋ฌธ์ ์ ์ด ์ ํ ๋ฐ์ํ์ง ์๋๋ก ํธ๋์ญ์ ์ ์ํ์ ์ ์ ํ ์ ์ดํด ์ฃผ๋ ๊ฒ
ํธ๋์ญ์ ์ค์ผ์ค
=> ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ ๊ตฌ์ฑํ๋ ์ฐ์ฐ๋ค์ ์คํ ์์๋ฅผ ์๋ฏธ
1. ์ง๋ ฌ ์ค์ผ์ค (serial schedule)
=> ํธ๋์ญ์ ์ ์ฐ์ฐ์ ๋ชจ๋ ์์ฐจ์ ์ผ๋ก ์คํํ๋ ์ ํ์ ์๋ฏธ
(ํธ๋์ญ์ ์ํ ์์์ ๋ง์ถฐ ์ง๋ ฌ ์ค์ผ์ค ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง)
2. ๋น์ง๋ ฌ ์ค์ผ์ค(nonserial schedule)
=> ํธ๋์ญ์ ์ง๋ ฌ ์ํ ์์์ ์๊ด์์ด ๋ณํ ์ํํ๋ ์ค์ผ์ค์ ์๋ฏธ
=> ์ด๋ฐ์์ผ๋ก๋ ๋น์ง๋ ฌ ์ค์ผ์ค์ด ๊ฐ๋ฅ
3. ์ง๋ ฌ ๊ฐ๋ฅ ์ค์ผ์ค(serializable schedule)
=> ์ง๋ ฌ ์ค์ผ์ค๊ณผ ๋๋ฑํ(Equivalent) ๋น์ง๋ ฌ ์ค์ผ์ค์ ์ง๋ ฌ ๊ฐ๋ฅ ์ค์ผ์ค์ด๋ผ๊ณ ๋งํจ
1. ๋ง์ฝ ๋ ๊ฐ์ ํธ๋์ญ์ ์ด read ์ฐ์ฐ๋ง์ ์ํํ ๊ฒ์ด๋ผ๋ฉด, ์ํธ ๊ฐ์ญ์ด ๋ฐ์๋์ง ์์ผ๋ฉฐ, ์ฐ์ฐ์ ์์๋ ์ค์ X
2. ๋ง์ฝ ๋ ๊ฐ์ ํธ๋์ญ์ ์ด ๊ฐ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์ ๊ทผํ์ง ์๋๋ค๋ฉด ์ํธ ๊ฐ์ญ์ด ๋ฐ์๋์ง ์์ผ๋ฉฐ, ์ฐ์ฐ์ ์์๋ ์ค์ X
3. ๋ง์ฝ ํธ๋์ญ์ T_01์ด ๋ฐ์ดํฐ ํญ๋ชฉ X์ write ์ฐ์ฐ์ ํ๊ณ , ํธ๋์ญ์ T_02๊ฐ ๋ฐ์ดํฐ ํญ๋ชฉ X์ read ์ฐ์ฐ์ด๋ write ์ฐ์ฐ์ ํ๋ค๋ฉด, ์คํ ์์๊ฐ ์ค์ํจ
๋ฝ
๊ฐฑ์ ์์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋ ๊ท์น์ด ํ์ํจ
=> ๋ฝ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ค์ด๋ผ๋ ์ฌ์ค์ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ ๊ธ์ฅ์น์
๋ฝํน(locking) ๊ธฐ๋ฒ
=> ํธ๋์ญ์ ๋ค์ด ๋์ผํ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด ์์์ ์ธ ๋ณํ ์ ๊ทผ์ ํ์ง ๋ชปํ๋๋ก ์ ์ดํจ
๋ฝํน์ ๊ธฐ๋ณธ ๊ฐ๋
1. ํธ๋์ญ์ T๊ฐ ๋ฐ์ดํฐ ํญ๋ชฉ x์ ๋ํด read(x)๋ write(x) ์ฐ์ฐ์ ์ํํ๋ ค๋ฉด, ๋ฐ๋์ lock(x) ์ฐ์ฐ์ ์ํํด์ผํจ
2. ํธ๋์ญ์ T๊ฐ ์คํํ lock(x)์ ๋ํด์๋ ํด๋น ํธ๋์ญ์ ์ด ๋ชจ๋ ์คํ์ ์ข ๋ฃํ๊ธฐ ์ ๋ฐ๋์ unlock(x) ์ฐ์ฐ์ ์ํํด์ผํจ
3. ํธ๋์ญ์ T๊ฐ x์ lock์ ๊ฑธ์ง ์์๋ค๋ฉด, unlock(x)๋ฅผ ์ํ์ํค์ง ๋ชปํจ
4. ํธ๋์ญ์ T๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ์ด๋ฏธ lock์ด ๊ฑธ๋ ค ์๋ x์ ๋ํด ๋ค์ lock(x)๋ฅผ ์ํ์ํค์ง ๋ชปํ๋ค.
๋ฝ์ ๊ฐ๋
๋ฝ์ ์ ํ
๋ฝ์ ํธ๋์ญ์ ์ด ์ฝ๊ธฐ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ ๋ฝ์ธ ๊ณต์ ๋ฝ(LS, shared lock)๊ณผ ์ฝ๊ณ ์ฐ๊ธฐ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ ๋ฐฐํ๋ฝ (LX, exclusive lock)์ผ๋ก ๋๋จ
๊ณต์ ๋ฝ๊ณผ ๋ฐฐํ๋ฝ์ ์ฌ์ฉํ๋ ๊ท์น
โช ๋ฐ์ดํฐ์ ๋ฝ์ด ๊ฑธ๋ ค์์ง ์์ผ๋ฉด ํธ๋์ญ์
์ ๋ฐ์ดํฐ์ ๋ฝ์ ๊ฑธ ์ ์๋ค
โช ํธ๋์ญ์
์ด ๋ฐ์ดํฐ X๋ฅผ ์ฝ๊ธฐ๋ง ํ ๊ฒฝ์ฐ LS(X)๋ฅผ ์์ฒญํ๊ณ , ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ๋ฅผ ํ ๊ฒฝ์ฐ LX(X)๋ฅผ ์์ฒญํ๋ค
โช ๋ค๋ฅธ ํธ๋์ญ์
์ด ๋ฐ์ดํฐ์ LS(X)์ ๊ฑธ์ด๋ ๊ฒฝ์ฐ, LS(X)์ ์์ฒญ์ ํ์ฉํ๊ณ LX(X)๋ ํ์ฉํ์ง ์๋๋ค
โช ๋ค๋ฅธ ํธ๋์ญ์
์ด ๋ฐ์ดํฐ์ LX(X)์ ๊ฑธ์ด๋ ๊ฒฝ์ฐ, LS(X)์ LX(X) ๋ชจ๋ ํ์ฉํ์ง ์๋๋ค
โช ํธ๋์ญ์
์ด ๋ฝ์ ํ์ฉ๋ฐ์ง ๋ชปํ๋ฉด ๋๊ธฐ ์ํ๊ฐ ๋๋ค
2๋จ๊ณ ๋ฝํน
๋ฝํน ๋จ์
=> ๋ฝํน ๊ธฐ๋ฒ์์ ์ฌ์ฉํ๋ lock ์ฐ์ฐ์ ๋์
2๋จ๊ณ ๋ฝํน ๊ธฐ๋ฒ(2PLP : two-phase locking protocol)
=> ๋ฝ์ ๊ฑธ๊ณ ํด์ ํ๋ ์์ ์ ์ ํ์ ๋์ง ์์ผ๋ฉด ๋ ๊ฐ์ ํธ๋์ญ์ ์ด ๋์์ ์คํ๋ ๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๊นจ์ง ์ ์์ด ์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ
(์ง๋ ฌ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฅ)
1. ํ์ฅ ๋จ๊ณ(growing phase)
=> ํธ๋์ญ์ ์ ์๋ก์ด lock ์ฐ์ฐ๋ง ์คํํ ์ ์๊ณ , unlock ์ฐ์ฐ์ ์คํํ ์ ์๋ ๋จ๊ณ์ด๋ค
2. ์ถ์ ๋จ๊ณ(shrinking phase)
=> ํธ๋์ญ์ ์ unlock ์ฐ์ฐ๋ง ์คํํ ์ ์๊ณ , lock ์ฐ์ฐ์ ์คํํ ์ ์๋ ๋จ๊ณ์ด๋ค
๋ฐ๋๋ฝ
๋ฐ๋๋ฝ(deadlock)
=> ๋ ๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ๊ฐ๊ฐ ์์ ์ ๋ฐ์ดํฐ์ ๋ํ์ฌ ๋ฝ์ ํ๋ํ๊ณ ์๋๋ฐฉ ๋ฐ์ดํฐ์ ๋ํ์ฌ ๋ฝ์ ์์ฒญํ๋ฉด ๋ฌดํ ๋๊ธฐ ์ํ์ ๋น ์ง ์ ์๋ ํ์ (๊ต์ฐฉ์ํ๋ผ๊ณ ๋ ํจ)
์ผ๋ฐ์ ์ผ๋ก ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ฉด DBMS๋ T1ํน์ T2์ ์์ ์ค ํ๋๋ฅผ ๊ฐ์ ๋ก ์ค์ง์ํด
=> ๊ทธ ๊ฒฐ๊ณผ ๋๋จธ์ง ํธ๋์ญ์ ์ ์ ์์ ์ผ๋ก ์คํ๋จ
(์ด๋ ์ค์ง์ํค๋ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ ์๋ ์ํ๋ก ๋๋๋ ค ๋์)
3. ํธ๋์ญ์
๊ณ ๋ฆฝ ์์ค
ํธ๋์ญ์ ๋์ ์คํ ๋ฌธ์
์ฝ๊ธฐ(read)/์ฐ๊ธฐ(write) ์ ๋ฌด์ ์ด ๋ณํ ์ํ์ ๋ฌธ์ ์
- ์ค์ ์ฝ๊ธฐ(dirty read)
- ๋ฐ๋ณต๋ถ๊ฐ๋ฅ ์ฝ๊ธฐ(non-repeatable read)
- ์ ๋ น ๋ฐ์ดํฐ ์ฝ๊ธฐ(phantom read)
์ค์ ์ฝ๊ธฐ(dirty read)
์ฝ๊ธฐ ์์ ์ ํ๋ ํธ๋์ญ์ 1์ด ์ฐ๊ธฐ ์์ ์ ํ๋ ํธ๋์ญ์ 2๊ฐ ์์ ํ ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์
=> ์์
์ค์ธ ํธ๋์ญ์
2๊ฐ ์ด๋ค ์ด์ ์์ ์ฒ ํ(ROLLBACK)ํ ๊ฒฝ์ฐ ํธ๋์ญ์
1์ ๋ฌดํจ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋๊ณ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ํ์
๋ฐ๋ณต๋ถ๊ฐ๋ฅ ์ฝ๊ธฐ(non-repeatable read)
ํธ๋์ญ์ 1์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํธ๋์ญ์ 2๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ (๊ฐฑ์ , UPDATE) ํธ๋์ญ์ 1์ด ๋ค์ ํ ๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์๊ธฐ๋ ๋ฌธ์
=> ํธ๋์ญ์ 1์ด ์ฝ๊ธฐ ์์ ์ ๋ค์ ํ ๋ฒ ๋ฐ๋ณตํ ๊ฒฝ์ฐ ์ด์ ์ ๊ฒฐ๊ณผ์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ํ์
์ ๋ น๋ฐ์ดํฐ ์ฝ๊ธฐ
ํธ๋์ญ์ 1์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํธ๋์ญ์ 2๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ (์ฝ์ , INSERT) ํธ๋์ญ์ 1์ด ๋ค์ ํ ๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์๊ธฐ๋ ๋ฌธ์
=> ํธ๋์ญ์ 1์ด ์ฝ๊ธฐ ์์ ์ ๋ค์ ํ ๋ฒ ๋ฐ๋ณตํ ๊ฒฝ์ฐ ์ด์ ์ ์๋ ๋ฐ์ดํฐ(์ ๋ น ๋ฐ์ดํฐ)๊ฐ ๋ํ๋๋ ํ์
๋ฐ๋ณต๋ถ๊ฐ๋ฅ ์ฝ๊ธฐ๋ UPDATE, ์ ๋ น๋ฐ์ดํฐ ์ฝ๊ธฐ๋ INSERT๋ก ๋ค๋ฅด๊ฒ ๊ตฌ๋ถํด์ผํจ!
ํธ๋์ญ์ ๊ณ ๋ฆฝ ์์ค ๋ช ๋ น์ด(transaction isolation level instruction)
=> DBMS๊ฐ ํธ๋์ญ์ ์ ๋์์ ์คํ์ํค๋ฉด์ ๋ฝ๋ณด๋ค ์ข ๋ ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๊ณตํ๋ ๋ช ๋ น์ด
1. READ UNCOMMITTED (Level = 0)
- ๊ณ ๋ฆฝ ์์ค์ด ๊ฐ์ฅ ๋ฎ์ ๋ช
๋ น์ด๋ก, ์์ ์ ๋ฐ์ดํฐ์ ์๋ฌด๋ฐ ๊ณต์ ๋ฝ์ ๊ฑธ์ง ์๋๋ค
(๋ฐฐํ๋ฝ์ ๊ฐฑ์ ์์ค ๋ฌธ์ ๋๋ฌธ์ ๊ฑธ์ด์ผํจ) - ๋ค๋ฅธ ํธ๋์ญ์
์ ๊ณต์ ๋ฝ๊ณผ ๋ฐฐํ๋ฝ์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํ์ง ์๊ณ ์ฝ๋๋ค
- ๋ค๋ฅธ ํธ๋์ญ์
์ด COMMIT ํ์ง ์์ ๋ฐ์ดํฐ๋ ์ฝ์ ์ ์๋ค
=> ์ด ๋๋ฌธ์ ์ค์(dirty) ํ์ด์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋๋ค - ์ด ๋ช ๋ น์ด๋ SELECT ์ง์์ ๋์์ด ๋๋ ํ ์ด๋ธ์ ๋ํด์ ๋ฝ์ ์ค์ ํ์ง ์์ ๊ฒ(NOLOCK)๊ณผ ๊ฐ๋ค
2. READ COMMITTED (Level = 1)
=> ์ค์(dirty) ํ์ด์ง์ ์ฐธ์กฐ๋ฅผ ํผํ๊ธฐ ์ํด ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋์ ๊ณต์ ๋ฝ์ ๊ฑธ์ง๋ง ํธ๋์ญ์ ์ด ๋๋๊ธฐ ์ ์๋ผ๋ ํด์ง๊ฐ ๊ฐ๋ฅํจ
- ๋ค๋ฅธ ํธ๋์ญ์
๋ฐ์ดํฐ๋ ๋ฝ ํธํ์ฑ ๊ท์น์ ๋ฐ๋ผ ์งํํจ
- ์ด ์ต์ ์ ์ค๋ผํด์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์๋ฌด๋ฐ ์ค์ ์ ํ์ง ์์ผ๋ฉด READ COMMITTED ๋ฐฉ์์ผ๋ก ์ํ๋จ
3. REPEATABLE READ (Level = 2)
=> ์์ ์ ๋ฐ์ดํฐ์ ์ค์ ๋ ๊ณต์ ๋ฝ๊ณผ ๋ฐฐํ๋ฝ์ ํธ๋์ญ์
์ด ์ข
๋ฃํ ๋๊น์ง ์ ์งํ์ฌ ๋ค๋ฅธ ํธ๋์ญ์
์ด ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ (UPDATE)ํ ์ ์๋๋ก ํจ
- ๋ค๋ฅธ ํธ๋์ญ์
๋ฐ์ดํฐ๋ ๋ฝ ํธํ์ฑ ๊ท์น์ ๋ฐ๋ผ ์งํํจ
- ๋ค๋ฅธ ๊ณ ๋ฆฝํ ์์ค์ ๋นํด ๋ฐ์ดํฐ์ ๋์์ฑ(concurrency)์ด ๋ฎ์ ํน๋ณํ์ง ์์ ์ํฉ์ด๋ผ๋ฉด ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์
4. SERIALIZABLE (Level = 3)
=> ๊ณ ๋ฆฝ ์์ค์ด ๊ฐ์ฅ ๋์ ๋ช ๋ น์ด๋ก, ์คํ ์ค์ธ ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ผ๋ก๋ถํฐ ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ
- ๋ฐ์ดํฐ ์งํฉ์ ๋ฒ์๋ฅผ ์ง์ด ์ ๊ธ์ ์ค์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ ํธ๋์ญ์
์ ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌํ ์ ์์
- ์ด ๋ช
๋ น์ด๋ ๋ค ๊ฐ์ง ๊ณ ๋ฆฝํ ์์ค ์ค ์ ํ์ด ๊ฐ์ฅ ์ฌํ๊ณ ๋ฐ์ดํฐ์ ๋์์ฑ๋ ๋ฎ์
- ์ด ๋ช ๋ น์ด๋ SELECT ์ง์์ ๋์์ด ๋๋ ํ ์ด๋ธ์ ๋ฏธ๋ฆฌ ๋ฐฐํ๋ฝ์ ์ค์ ํ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋
4. ํ๋ณต
์์คํ ์ฅ์
=> H/W ์์คํ ์์ฒด์์ ๋ฐ์ํ ์ ์๋ ์๋ฌ ์ํฉ
1. ํ๋์จ์ด์ ์๋ชป๋ ์๋์ผ๋ก ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์๋ ์ ๋ณด ์์ค
2. ๊ต์ฐฉ ์ํ์ ๋ฐ์์ผ๋ก ๋ ์ด์ ํธ๋์ญ์ ์์ ์ด ์ํ๋ ์ ์๋ ์ํฉ
๋ฏธ๋์ด ์ฅ์
=> ๋์คํฌ ์์ฒด์ ์์์ผ๋ก ๋ฐ์ํ ์ ์๋ ์๋ฌ ์ํฉ
๋์คํฌ ๋ธ๋ก ๋ด์ ์๋ ์ ๋ณด๋ ๋ฐ์ดํฐ ์ ์ก ๋์ค ๋์คํฌ ํค๋ ์์์ด๋ ๊ณ ์ฅ์ผ๋ก ์ธํด, ์ ์ฅ ์ฅ์น ๋ด์ ์๋ ์ ๋ณด๊ฐ ์ผ๋ถ ๋๋ ์ ๋ถ ์์๋ ์ ์๋ ์ํ
ํธ๋์ญ์ ๊ณผ ํ๋ณต
ํ๋ณต(recovery)
=> ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ์ด์ ์ ์ํ๋ก ๋ณต๊ตฌ์์ผ์ ์ผ๊ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ฅผ ๋ง๋๋ ๊ฒ
๋ก๊ทธ ํ์ผ
๋ก๊ทธ ํ์ผ(log file)
=> ํธ๋์ญ์ ์ด ๋ฐ์ํ ๋ชจ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋กํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๊ธฐ๋กํด๋๋ ๋ณ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
=> DBMS๋ ํธ๋์ญ์ ์ด ์ํ ์ค์ด๊ฑฐ๋ ์ํ์ด ์ข ๋ฃ๋ ํ ๋ฐ์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ค์ ๋ฐฉ์งํ๊ธฐ ์ํด ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ก์ ์ถ์ ํ๋ ๋ก๊ทธํ์ผ์ ์ฌ์ฉ
(์์ ํ ํ๋๋์คํฌ์ ์ ์ฅ๋๋ฉฐ ์ ์๊ณผ ๊ด๊ฒ์์ด ๊ธฐ๋ก์ด ๋จ์์์)
๋ก๊ทธ ํ์ผ์ ์ ์ฅ๋ ๋ก๊ทธ์ ๊ตฌ์กฐ
=> '๋ก๊ทธ์ ํ์ '์ ํธ๋์ญ์ ์ ์ฐ์ฐ ํ์ ์ผ๋ก START, INSERT, UPDATE, DELETE, ABORT, COMMIT ๋ฑ
=> '์์ ์ ๊ฐ'์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ์ ๊ฐ์, '์์ ํ ๊ฐ'์ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ก ๋ณ๊ฒฝ๋ ๊ฐ์ ๋ํ๋
๋ก๊ทธ ํ์ผ์ ์ด์ฉํ ํ๋ณต
=> ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๊ธฐ๋ก์ ์ ์ฅํด ๋ ๋ก๊ทธ ํ์ผ์ ์ด์ฉํ๋ฉด ์์คํ ์ฅ์ ๋ ๋ณต๊ตฌ ๊ฐ๋ฅ
์์คํ ์ด์ ์ค ์ฅ์ ๊ฐ ๋ฐ์ํ์ฌ ์์คํ ์ด ๋ค์ ๊ฐ๋๋์์ ๋
=> DBMS๋ ๋ก๊ทธ ํ์ผ์ ๋ณด๊ณ ํธ๋์ญ์ ์ด ์ข ๋ฃ๋์๋์ง ํน์ ์ค๋จ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จ
- ์ข ๋ฃ๋ ํธ๋์ญ์ ์ ์ข ๋ฃ๋ฅผ ํ์ ํ๊ธฐ ์ํ์ฌ ์ฌ์คํ(REDO)์ ์งํ
- ์ค๋จ๋ ํธ๋์ญ์ ์ ์๋ ์ผ๋ก ๋๋๋ฆฌ๊ธฐ ์ํด ์ทจ์(UNDO)๋ฅผ ์คํ
ํธ๋์ญ์ ์ ์ฌ์คํ(REDO)
- ๋ก๊ทธ ํ์ผ์ ํธ๋์ญ์
์์(START)์ด ์๊ณ ์ข
๋ฃ(COMMIT)๊ฐ ์๋ ๊ฒฝ์ฐ
- COMMIT ์ฐ์ฐ์ด ๋ก๊ทธ์ ์๋ค๋ ๊ฒ์ ํธ๋์ญ์
์ด ๋ชจ๋ ์๋ฃ๋์๋ค๋ ์๋ฏธ
- ๋ค๋ง ๋ณ๊ฒฝ ๋ด์ฉ์ด ๋ฒํผ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ก๋์ง ์์์ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌ
=> ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด์ ํธ๋์ญ์ ์ด ๋ณ๊ฒฝํ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ ๊ธฐ๋กํ๋ ๊ณผ์ ์ด ํ์ํจ
ํธ๋์ญ์ ์ ์ทจ์(UNDO)
- ๋ก๊ทธ ํ์ผ์ ํธ๋์ญ์
์ ์์(START)๋ง ์๊ณ ์ข
๋ฃ(COMMIT)๊ฐ ์๋ ๊ฒฝ์ฐ
- COMMIT ์ฐ์ฐ์ด ๋ก๊ทธ์ ๋ณด์ด์ง ์๋๋ค๋ ๊ฒ์ ํธ๋์ญ์
์ด ์๋ฃ๋์ง ๋ชปํ๋ค๋ ์๋ฏธ
- ํธ๋์ญ์
์ด ํ ์ผ์ ๋ชจ๋ ์ทจ์ํด์ผํจ
=> ์๋ฃํ์ง ๋ชปํ๋๋ผ๋ ๋ฒํผ์ ๋ณ๊ฒฝ ๋ด์ฉ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ก๋์ด ์์ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด์ ํธ๋์ญ์ ์ด ๋ณ๊ฒฝํ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์๋ณต๊ตฌ์์ผ์ผ ํจ
ํธ๋์ญ์ ๋ก๊ทธ์ ํ๋ณต ๋ฐฉ๋ฒ
1. ์ฆ์ ๊ฐฑ์ (immediate update) ๋ฐฉ๋ฒ
๋ฒํผ(๊ฐฑ์ ๋ฐ์ดํฐ) -> ๋ก๊ทธ, ๋ฒํผ -> ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ด ๋ถ๋ถ์๋ฃ ์ ์ ๋์์ ์งํ๋ ์ ์์
=> ๋ถ๋ถ์๋ฃ๊ฐ ๋๋ฉด ๊ฐฑ์ ๋ฐ์ดํฐ๋ ๋ก๊ทธ์ ๊ธฐ๋ก์ด ๋๋ ์ํ
(์์คํ ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ถ๋ ฅ ์ฐ์ฐ์ด ์ฆ๊ฐํ๋ ๋จ์ ์ด ์กด์ฌ)
2. ์ง์ฐ ๊ฐฑ์ (deferred update) ๋ฐฉ๋ฒ
๋ฒํผ(๊ฐฑ์ ๋ฐ์ดํฐ) -> ๋ก๊ทธ๊ฐ ๋๋ ํ ๋ถ๋ถ์๋ฃ๋ฅผ ํ๊ณ ๋ฒํผ -> ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ด ์งํ๋๋ ๋ฐฉ๋ฒ
=> ๋ถ๋ถ์๋ฃ ์ ์๋ ๊ฐฑ์ ๋ด์ฉ์ด ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์์ด ๋์ง ์์ ์ํ
(์์คํ ๋ณต๊ตฌ ์ ๋ณต๊ตฌ์๊ฐ์ด ๋ ๊ฑธ๋ฆฌ๋ ๋จ์ ์ด ์กด์ฌ)
์ฒดํฌํฌ์ธํธ๋ฅผ ์ด์ฉํ ํ๋ณต
์ฒดํฌํฌ์ธํธ(checkpoint, ํน์ ๊ฒ์ฌ์ )
- ๋ก๊ทธ๋ ๊ทธ๋๋ก ๊ธฐ๋ก ์ ์งํ๋ฉด์, ํ๋ณต ๊ด๋ฆฌ์๊ฐ ์ ํ๋ ์ผ์ ํ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๊ฒ์ฌ์ง์ ์ ์์ฑํ๋ ๊ฒ
- ํ๋ณต ์ ๋ง์ ์์ ๋ก๊ทธ๋ฅผ ๊ฒ์ํ๊ณ ๊ฐฑ์ ํ๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํจ
- ์ฒดํฌํฌ์ธํธ๊ฐ ์์ผ๋ฉด ๋ก๊ทธ๋ฅผ ์ด์ฉํ ํ๋ณต ๊ธฐ๋ฒ์ ๋ ๊ฐ๋จํด์ง
์ฒดํฌํฌ์ธํธ ์์ ์๋
1. ์ฃผ๊ธฐ์ต์ฅ์น์ ๋ก๊ทธ ๋ ์ฝ๋๋ฅผ ๋ชจ๋ ํ๋๋์คํฌ์ ๋ก๊ทธ ํ์ผ์ ์ ์ฅ
2. ํธ๋์ญ์ ์ํ ์ค์ ๋ณ๊ฒฝ๋ ๋ฒํผ ๋ด์ ๋ด์ฉ์ ํ๋๋์คํฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ
3. ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ก๊ทธ ํ์ผ์ ํ์
(<Checkpoint T_List> : T_list๋ ํ์ฌ ์ํ ์ค์ธ ํธ๋์ญ์ ์ ๋ฆฌ์คํธ)
์ ๊ฐ์ ์์ ๋ค์ ์งํํ๋ค
์ ๊ทธ๋ฆผ์์
์ฆ์ ๊ฐฑ์ ๋ฐฉ๋ฒ ์ฌ์ฉ
โช T2, T3๋ ์๋ฌด ์์
์ด ํ์ ์๊ณ , T4, T5๋ REDO, T1, T6๋ UNDO๊ฐ ํ์ํจ
์ง์ฐ ๊ฐฑ์ ๋ฐฉ๋ฒ ์ฌ์ฉ
โช T2, T3๋ ์๋ฌด ์์
์ด ํ์ ์๊ณ , T4, T5๋ REDO๊ฐ ํ์ํจ. T1, T6๋ ์๋ฌด ์์
์ด ํ์ ์์
'๐ซง Database > ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Chapter 07. ์ ๊ทํ (0) | 2024.05.17 |
---|---|
Chapter 06. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง (0) | 2024.05.15 |
Chapter 05. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ (1) | 2024.04.16 |
Chapter 04. SQL ๊ณ ๊ธ (1) | 2024.04.15 |
Chapter 03. SQL ๊ธฐ์ด (1) | 2024.04.14 |