Transaction
ํธ๋์ญ์ (Transaction): DBMS๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ๋, ์ฌ์ฉํ๋ ์์ (ํ๋ก๊ทธ๋จ) ๋จ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด ACID(์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ) ์ฑ์ง์ ๊ฐ์ง๋ค.
DBMS๋ ์ด ์ฑ์ง์ ์ ์งํ ์ ์๋๋ก ์ง์ํ๋ค.
01. ํธ๋์ญ์
01) ๊ฐ๋
ํธ๋์ญ์ ์ด๋, DBMS์์ ๋ค๋ฃจ๋ ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ๋จ์์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํธ๋์ญ์ ์ ์ ์ํ๋ ์ด์
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ๋ ์ฅ์ ๊ฐ ์ผ์ด๋๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ์์ ์ ๋จ์๊ฐ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ฌ ์์ ์ด ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋, ์ด ์์ ์ ์๋ก ๋ถ๋ฆฌํ๋ ๋จ์๊ฐ ๋๋ค.
ํธ๋ ์ญ์ ์ ์ ์ฒด๊ฐ ์ํ๋๊ฑฐ๋, ๋๋ ์ ํ ์ํ๋์ง ์์์ผ ํ๋ค. (all or nothing)
์์
transaction์ ์์ํ๋ฉด, ๋์คํฌ์ ์ ์ฅ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ์ฃผ๊ธฐ์ต์ฅ์น(๋ฉ๋ชจ๋ฆฌ) ๋ฒํผ ์์ญ์ ์ฌ๋ ค๋๋ค.
๋ฒํผ ์์ญ์์ 1,2๋ฒ SQL๋ฌธ์ ์ํํ๊ณ ์ ์ฅ.
DBMS๊ฐ ์ฑ ์์ง๊ณ ๋ฒํผ์์ ๋์คํฌ์์ญ์ ์ ์ฅ์ํ๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ, DBMS๊ฐ ๋์์ ๋ง์ ํธ๋์ญ์ ์ ์ํํ ๋, ํธ๋์ญ์ ์ด ํ๋๋์คํฌ์ ๊ฐ๋ณ ์ ๊ทผํ๋ ๊ฒ์ ํผํ๊ณ , ์ผ๊ด์ ์ผ๋ก ๋์คํฌ์ ์ ๊ทผ ์ฒ๋ฆฌ ํจ์ผ๋ก์จ, ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ์๋ต์ฑ์ ๋ณด์ฅํ ์๊ฐ ์๋ค.
02) ACID
์์์ฑ(Atomicity): ํธ๋์ญ์ ์ ํฌํจ๋ ์์ ์ ์ ๋ถ ์ํ๋๊ฑฐ๋, ์๋๋ฉด ์ ๋ถ ์ํ๋์ง ์์์ผํ๋ค. (all or nothing)
์ผ๊ด์ฑ(Consistency): ํธ๋์ญ์ ์ ์ํํ๊ธฐ ์ , ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํญ์ ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํด์ผํ๋ค.
๊ณ ๋ฆฝ์ฑ(Isolation): ์ํ์ค์ธ ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ผ์ด๋ค์ด ๋ณ๊ฒฝ ์ค์ธ ๋ฐ์ดํฐ ๊ฐ์ ํผ์ํ๋ ์ผ์ด ์์ด์ผํ๋ค.
์ง์์ฑ(Durability): ์ํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ ํธ๋์ญ์ ์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ ์ ์ฅํด์ผํ๋ค. ์ ์ฅ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ ์ ์ฅ ์งํ ํน์ ์ด๋ ๋๋ ๋ฐ์ํ ์ ์๋ ์ฅ์ , ์ค๋ฅ, ์ ์ ๋ฑ์ ์ํฅ์ ๋ฐ์ง ์์์ผํ๋ค.
์์์ฑ
ํธ๋์ญ์ ์ด ์์์ฒ๋ผ ๋์ด์ ์ชผ๊ฐ์ง์ง ์๋ ํ๋์ ํ๋ก๊ทธ๋จ ๋จ์๋ก ๋์ํด์ผํ๋ค๋ ์๋ฏธ.
์ฆ, ์ผ๋ถ๋ง ์ํ๋๋ ์ผ์ด ์๋๋ก ์ ๋ถ ์ํ๋๊ฑฐ๋ ์์ ์ํ๋์ง ์์์ผํ๋ค.
Transaction control language (TCL)
ํ์ค๋ช ๋ น์ด
๋ฌธ๋ฒ
์ค๋ช
START TRANSACTION
START TRANSACTION
ํธ๋์ญ์ ์์
COMMIT
COMMIT
ํธ๋์ญ์ ์ข ๋ฃ
ROLLBACK
ROLLBACK {TO }
ํธ๋์ ์ ์ ์ ์ฒด ํน์ ๊น์ง ๋ฌดํจํ
SAVE
SAVEPOINT
๋ฅผ ๋ง๋ฌ
ํธ๋์ญ์ ์์๊ณผ ๋
์์์ ํ ๋ฆฌ๋ ํ์ค ๋ช ๋ น์ด: START TRANSACTION
MySQL์์๋
SET TRANSACTION NAME <์ด๋ฆ>
๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ SQL๋ฌธ์ด ๋์ค๋ฉด ์๋์ผ๋ก ํธ๋์ญ์ ์ด ์์๋จ.
์ข ๋ฃ
COMMIT ํน์ ROLLBACK
DDL (CREATE. ALTER. DROP. RENAME. TRUNCATE...) ๋ง๋๋ฉด ์๋์ข ๋ฃ
์ผ๊ด์ฑ
ํธ๋์ญ์ ์ํ ์ ๊ณผ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํญ์ ์ผ๊ด๋ ์ํ์ฌ์ผํ๋ค.
ํ ์ด๋ธ ์์ฑ ์, CREATE ๋ฌธ๊ณผ ALTER๋ฌธ์ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ํตํด ๋ช ์๋๋ค.
๊ณ ๋ฆฝ์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ณต์ ๊ฐ ๋ชฉ์ ์ด๋ฏ๋ก ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์ ์ํ๋๋ค.
์ด ๋, ๊ฐ ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ฐฉํด๋ฐ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ ์ํํ๋ค.
์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋ ๋, ์ํธ๊ฐ์ญ์ด๋ ๋ฐ์ดํฐ ์ถฉ๋์ด ์ผ์ด๋์ง ์๋ ํ์.
๋ณ๊ฒฝ์ค์ธ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ๊ฑฐ๋ ์ฐ๋ คํ ๋ ์ ์ดํ๋ ์์ ์ด ํ์ํ๋ค.
์ ๊ทธ๋ผ์ฒ๋ผ, t1 ์๊ฐ์ ํธ๋์ญ์ 2, 3์ด ๋์ ์ ๊ทผํ ํ ์ด๋ธ B์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ํผ์ํ์ง ์๋๋ก ์ ์ดํ๋ ์์ ์ด ํ์ํ๋ฉฐ, ์ด ์์ ์ ๋์์ฑ์ ์ด(concurrency control)์ด๋ผ๊ณ ํ๋ค.
๋์์ฑ ์ ์ด๋ณด๋ค ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํธ๋์ญ์ ๊ณ ๋ฆฝ ์์ค์ ๋ฐ๋ผ ์ํธ๊ฐ์ญ์ ์ํ์ํค๋ ๋ฐฉ๋ฒ๋ ์๋ค.
์ง์์ฑ
ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์๋ฃ ํน์ ๋ถ๋ถ ์๋ฃํ ๋ฐ์ดํฐ๋ ๋ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ก๋์ด์ผํ๋ค.
DBMS ๋ณต๊ตฌ ์์คํ ์ ํธ๋์ญ์ ์ด ์์ ํ ๋ด์ฉ์ ์์๋ก log ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋กํ๋ค๊ฐ, ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ก๊ทธํ์ผ์ ์ด์ฉํด์ ๋ณต๊ตฌ์์ ์ ์ํํ๋ค. ์์คํ ์ด ๋ฉ์ถ๋๋ผ๋ ํธ๋์ญ์ ์ํ์ผ๋ก ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋์คํฌ์ ๊ธฐ๋ก๋๋ค.
ํธ๋์ญ์ ์ํ๋
DBMS๋ ๋ถ๋ถ์๋ฃ ์ํ์์ ์์ ๋ด์ฉ(๋ฒํผ ๋ด์ฉ)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๊ณ
์คํจ์ํ์์๋ ์์ ๋ด์ฉ์ ์ทจ์ํ๋ค.
03) ํธ๋์ญ์
๊ณผ DBMS
DBMS๋ ํธ๋์ญ์ ์ด ACID๋ฅผ ์ ์งํ ์์๋๋ก ์ง์ํ๋ค.
์์์ฑ ์ ์งํ๊ธฐ ์ํด
ํ๋ณต(๋ณต๊ตฌ) ๊ด๋ฆฌ์ ํ๋ก๊ทธ๋จ ์๋.
DB๊ฐ ๋ณ๊ฒฝํ ๋ด์ฉ์ ๋ก๊ทธ๋ก ๊ธฐ๋กํ๊ณ ์๋ค๊ฐ, ํธ๋์ญ์ ์ ๋ฌธ์ ๋ฐ์์ ์๋ ์ํ๋ก ๋๋๋ฆฐ๋ค.
์ผ๊ด์ฑ ์ ์ง ์ํด
ํธ๋์ญ์ ์ํ์, ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ๊ฐํด์ง ๋ ๋ฏธ๋ฆฌ ์ ์ํด๋ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ๊ฒ์ฌํ์ฌ ์ผ๊ด์ฑ์ด ๊นจ์ง๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
๋๊ฐ์ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋ ๋ ํธ๋์ญ์ ๊ฐ์ ๊ฐ์ญ์ผ๋ก ์ผ๊ด์ฑ์ด ๊นจ์ง๋ ํ์์ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ผ๋ก ํด๊ฒฐ ๋ถ๊ฐ๋ฅํ๊ณ , ์ง์์๊ฒ ์ ๊ทผํ ์ ์๋๋ก '๋์์ฑ ์ ์ด(Locking) ์๊ณ ๋ฆฌ์ฆ'์ ์๋์์ผ์ผํ๋ค.
๊ณ ๋ฆฝ์ฑ ์ ์ง ์ํด
๋์์ฑ ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์๋์์ผ์, ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ๋ ๋ง์น ํ ํธ๋์ญ์ ์ฉ ์์๋๋ก ์ ๊ทผํ๋ ๊ฒ ์ฒ๋ผ ์ ์ดํ๋ค.
์์์ฑ ์ ์ง ์ํด
ํ๋ณต ๊ด๋ฆฌ์ ํ๋ก๊ทธ๋จ์ผ๋ก ํธ๋์ญ์ ์ ๋ฌธ์ ๋ฐ์์ ๊ธฐ๋กํด๋ ๋ก๊ทธ๋ฅผ ํ์ธํ๊ณ ์๋ ์ํ๋ก ๋๋๋ฆฐ๋ค.
02. ๋์์ฑ ์ ์ด
ํธ๋์ญ์ ์ด ๋์ ์ํ๋ ๋, ์ผ๊ด์ฑ์ ํค์น์ง ์๋๋ก ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ ์ดํ๋ DBMS์ ๊ธฐ๋ฅ
๋๊ฐ์ ํธ๋์ญ์ ์ด ๋์์ ํ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ ๋ฐ์ํ ์ ์๋ ์๋๋ฆฌ์ค
์ํฉ
ํธ๋์ญ์ 1
ํธ๋์ญ์ 2
๋ฐ์๋ฌธ์
๋์์ ๊ทผ
์ํฉ1
์ฝ๊ธฐ
์ฝ๊ธฐ
๋ฌธ์ ์์
ํ์ฉ
์ํฉ2
์ฝ๊ธฐ
์ฐ๊ธฐ
์ ๋ น๋ฐ์ดํฐ ์ฝ๊ธฐ, ๋ฐ๋ณต ๋ถ๊ฐ๋ฅ ์ฝ๊ธฐ, ์ค์์ฝ๊ธฐ
ํ์ฉ ํน์ ๋ถ๊ฐ
์ํฉ3
์ฐ๊ธฐ
์ฐ๊ธฐ
๊ฐฑ์ ์์ค (์ ๋ ํ์ฉ X)
ํ์ฉ ๋ถ๊ฐ (LOCK)์ฌ์ฉ
01)๊ฐฑ์ ์์ค (lost update)
ํ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๋ ํธ๋์ญ์ ์ด ๊ฐฑ์ (์ฐ๊ธฐ, ์ฐ๊ธฐ)ํ ๋ ๋ฐ์.
์
ํธ๋์ญ์ T1, T2๊ฐ ์๊ณ ๊ณ์ข X(1000์๋ณด์ ) ์์ T1์ 100์์ ์ธ์ถํ๊ณ , T2๋ 100์์ ์ ๊ธํ๋ ์์ . ๊ทธ๋ผ ๊ทธ ๊ฒฐ๊ณผ๋ 1000์ด ๋์ด์ผํ๋๋ฐ,
๋๊ฐ์ ํธ๋์ญ์ ์ด ๋์์ ์คํ์ด ๋๋ค๋ฉด, buffer ์์ญ์์
T1์ด ์ธ์ถํด์ X๊ฐ 900์์ด ๋ ๊ฒ์ disk์ ๊ฐฑ์ ์ด ํ๊ธฐ ์ ์ T2๊ฐ ๋์์ buffer ์์ญ์์ ์คํ๋์ด X๊ฐ 1100์์ด ๋จ.
๊ทธ๋์ T1์ด ์์ ํ ๋ด์ฉ์ disk์ ์ ๋ ฅ๋ ๋ค, T2๊ฐ ๋ด์ฉ์ ๋ฎ์ด์ ๊ฒฐ๊ณผ๊ฐ 1100์ด ๋จ.
T1-> T2 ํน์ T2-> T1์์ผ๋ก ์คํํ๋ฉด ๋ด์ฉ์ด ๋ฎํ๋๊ฑด ๋ฐฉ์งํ ์ ์์ง๋ง, ์๋ต์๋๊ฐ ๋๋ ค์ง. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด '๋ฝ'์ ์ฌ์ฉํจ
02) ๋ฝ(Lock)
ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์์ ํ ๋, ๋ฐ์ดํฐ์ ํ์ํ๋ ์ ๊ธ ์ฅ์น์ด๋ค.
๋ฝ์ ์ด์ฉํ์ฌ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทธ๋ฉด, ๋ค๋ฅธ ํธ๋์ ์ ์์ ์ ๊ธ์ด ํ๋ฆด ๋๊น์ง ๊ธฐ๋ค๋ ค์ผํ๋ค. (wait)
๋ฝ์ ์ ํ
์ฝ๊ธฐ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ ๊ณต์ ๋ฝ(LS, Shared Lock)
์ฝ๊ณ ์ฐ๊ธฐ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ ๋ฐฐํ๋ฝ(LX, Exclusive Lock)
ํธ๋์ญ์ ์ด LS, LX๋ฅผ ์ฌ์ฉํ๋ ๊ท์น
๋ฐ์ดํฐ์ ๋ฝ์ด ๊ฑธ๋ ค์์ง ์์ผ๋ฉด ํธ๋์ญ์ ์ ๋ฐ์ดํฐ์ ๋ฝ์ ๊ฑธ ์ ์๋ค.
ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ X๋ฅผ ์ฝ๊ธฐ๋ง ํ ๊ฒฝ์ฐ LS(X)๋ฅผ ์์ฒญํ๊ณ , ์ฝ๊ฑฐ๋ ์ธ ๊ฒฝ์ฐ LX(X)๋ฅผ ์์ฒญํ๋ค.
๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ์ LS(X)๋ฅผ ๊ฑธ์ด๋ ๊ฒฝ์ฐ, LS(X)์์์ฒญ์ ํ์ฉํ๊ณ LX(X)๋ ํ์ฉํ์ง ์๋๋ค.
๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ์ LX(X)๋ฅผ ๊ฑธ์ด๋ ๊ฒฝ์ฐ, LS(X)์ LX(X) ๋ชจ๋ ํ์ฉํ์ง ์๋๋ค.
ํธ๋์ญ์ ์ด ๋ฝ์ ํ์ฉ๋ฐ์ง ๋ชปํ๋ฉด ๋๊ธฐ ์ํ๊ฐ ๋๋ค.
2๋จ๊ณ ๋ฝํน
๋ฐ์ดํฐ์ ๋ฝ์ ๊ฑธ์๋ค ํ๊ณ ๋ค์ ๊ฑฐ๋ ์ค๊ฐ ๊ณผ์ ์ ๋ฝ์ ํด์ง ์ํ๊ฐ ์๊ธฐ๋ฉด์, ๋ค๋ฅธ ํธ๋์ญ์ ์๊ฒ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์์ผ๋ก์จ, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๊นจ์ง์ ์์. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด 2๋จ๊ณ ๋ฝํน ๊ธฐ๋ฒ์ ์ฌ์ฉ.
ํ์ฅ๋จ๊ณ: ํธ๋์ญ์ ์ด ํ์ํ ๋ฝ์ ํ๋ํ๋ ๋จ๊ณ. ์ด ๋จ๊ณ์์๋ ์ด๋ฏธ ํ๋ํ ๋ฝ์ ํด์ ํ์ง ์๋๋ค.
์์ถ๋จ๊ณ: ํธ๋์ญ์ ์ด ๋ฝ์ ํด์ ํ๋ ๋จ๊ณ๋ก, ์๋ก์ด ๋ฝ์ ํ๋ํ์ง ์๋๋ค.
๋ฐ๋๋ฝ
2๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ๊ฐ๊ฐ ์์ ์ ๋ฐ์ดํฐ์ ๋ํด ๋ฝ์ ํ๋ํ๊ณ , ์๋๋ฐฉ ๋ฐ์ดํฐ์ ๋ํ์ฌ ๋ฝ์ ์์ฒญํ๋ฉด ๋ฌดํ ๋๊ธฐ ์ํ์ ๋น ์ง ์ ์์.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ฉด, ์์ ์ค ํ๋๋ฅผ ๊ฐ์ ๋ก ์ค์ง์ํจ๋ค. ์ด ๋, ์ค์ง ์ํจ ํธ๋์ ์ ์์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ ์๋ ์ํ๋ก ๋๋๋ ค ๋๋๋ค.
03. Transaction Isolation level (ํธ๋์ญ์
๊ณ ๋ฆฝ(๊ฒฉ๋ฆฌ) ์์ค)
๋๊ฐ์ ํธ๋์ญ์ (T1, T2) ์ค, T1์ ์ฝ๊ธฐ์์ ์, T2๋ ์ฐ๊ธฐ ์์ ์ ํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ด ๋, ๋์์ฑ์ ์ด์์ ๋ดค๋ '๋ฝ'์ ๊ฑฐ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ wait๋ฅผ ํ ์๋ ์๊ฒ ์ง๋ง, ๋์ ์งํ ์ ๋๋ฅผ ๊ณผ๋ํ๊ฒ ๋ง๋ ๊ฒ์ด๊ธฐ๋ ํ๋ค. ๊ทธ๋์ ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋์๋ค. Isolation level ์ ์กฐ์ ์ ํตํด ๋์์ฑ์ ์ฆ๊ฐ์ํค๋ฉด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ณ , ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ คํ๋ฉด ๋์์ฑ์ด ๋จ์ด์ง ์ ์๋ค.
1) Transaction ๋์ ์คํ ๋ฌธ์
dirty read (uncommitted, ์ค์์ฝ๊ธฐ)
์ฝ๊ธฐ ์์ ์ ํ๋
ํธ๋์ญ์ 1
์ด ์ฐ๊ธฐ ์์ ์ ํ๋ํธ๋์ญ์ 2
๊ฐ ์์ ํ ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์ ์์ ์ค
ํธ๋์ญ์ 2
๊ฐ ์ด๋ค ์ด์ ๋ก ์์ ์ ์ฒ ํ(ROLLBACK) ํ ๊ฒฝ์ฐ,ํธ๋์ญ์ 1
์ ๋ฌดํจํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋์ด ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋๋ฐ, ์ด ํ์์dirty read
(์ค์์ฝ๊ธฐ) ๋๋uncommitted
๋ผ๊ณ ํ๋ค.์ฝ๊ธฐ ์์ ์ ํ๋ ๋์ ํด๋น ๋ฐ์ดํฐ์ shared lock์ด ๊ฑธ๋ฆฌ์ง ์์ ์๊ธด ๋ฌธ์ .
non-repeatable read (๋ฐ๋ณต ๋ถ๊ฐ๋ฅ)
ํธ๋์ญ์ 1
์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ,ํธ๋์ญ์ 2
๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ (update, ๊ฐฑ์ ) commit,ํธ๋์ ์ 1
์ด ๋ค์ ํ ๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์๊ธฐ๋ ๋ฌธ์ ์ฆ, ์ฝ๊ธฐ์์ ์ ๋ค์ ํ ๋ฒ ๋ฐ๋ณตํ ๊ฒฝ์ฐ ์ด์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ณต๋์ง ์๋ ํ์
phantom read(์ ๋ น ์ฝ๊ธฐ)
ํธ๋์ญ์ 1
์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ,ํธ๋์ญ์ 2
๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ (insert, ์ฝ์ ),ํธ๋์ญ์ 1
์ด ๋ค์ ํ ๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์๊ธฐ๋ ๋ฌธ์ ํธ๋์ญ์
์ด ๋ค์ํ๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ฉด, ์ด์ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ํ๋๋ ํ์๋จ, MySQL์์๋ ๋ฐ์ํ์ง ์๋๋ค. MySQL์ REPEATABLE READ๋ ํธ๋์ ์ ์ด ์ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ๋, SNAPSHOT์ ๊ตฌ์ถํด์ ์๋ฃ๋ฅผ ๊ฐ์ ธ์ค๋ฏ๋ก, ๋ค๋ฅธ ์ธ์ ์ ์๋ฃ๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
2) Transaction Isolation level ๋ช
๋ น์ด
์ฌ์ฉ์๊ฐ ์ ํํด์ ํธ๋์ญ์ ์ ์ ์ดํ๋ค.
์ฝ๊ธฐ/์ฐ๊ธฐ์ ๋ํ ํธ๋์ญ์ ๊ฐ์ ๊ณ ๋ฆฝ์์ค์ ๊ฒฐ์
SQL ํ์ค์์๋ 4๊ฐ์ง ๊ณ ๋ฆฝ(isolation) ์์ค์ ์ ์ํ๊ณ ์๊ณ , DBMS๋ณ๋ก ์ง์ํ๋ ๋ชจ๋, ๋์ ๋ฐฉ์, ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๋ค.
SQL ํ์ค์ผ๋ก ์ ๋ฆฌ
READ UNCOMMITED(Level 0)
๊ณ ๋ฆฝ์์ค์ด ๊ฐ์ฅ ๋ฎ์ ๋ช ๋ น์ด๋ก ์์ ์ ๋ฐ์ดํฐ์ ์๋ฌด๋ฐ shared lock(๊ณต์ ๋ฝ) ์ ๊ฑธ์ง ์๋๋ค.
๋ฒ ํ๋ฝ์ ๊ฐฑ์ ์์ค ๋ฌธ์ ๋๋ฌธ์ ๊ฑธ์ด์ผํจ.
๋ค๋ฅธ ํธ๋์ญ์ ์ ๊ณต์ ๋ฝ๊ณผ ๋ฐฐํ๋ฝ์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํ์ง ์๊ณ ์ฝ๋๋ค. ๋ค๋ฅธ ํธ๋์ญ์ ์ด commitํ์ง ์์ ๋ฐ์ดํฐ๋ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ dirty read ํ ๊ฐ๋ฅ์ฑ์ด ์๊ธด๋ค.
SELECT ์ง์์ NO LOCK ํ ๊ฒ๊ณผ ๊ฐ๋ค.
READ COMMITED (Level 1)
dirty read ๋ฅผ ํผํ๊ธฐ ์ํด, ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋์ shared lock์ ๊ฑธ์ง๋ง, ํธ๋์ ์ ์ด ๋๋๊ธฐ ์ ์๋ ํด์ง ๊ฐ๋ฅ.
๋ค๋ฅธ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ ๋ฝ ํธํ์ฑ ๊ท์น์ ๋ฐ๋ผ ์งํ
REPEATABLE READ (Level 2)
์์ ์ ๋ฐ์ดํฐ์ shared lock, ๋ฒ ํ lock์ ํธ๋์ญ์ ์ด ์ข ๋ฃํ ๋๊น์ง ์ ์ฌํด์, ๋ค๋ฅธ ํธ๋์ญ์ ์ ์์ ์ ๋ฐ์ดํฐ๋ฅผ updateํ์ง ์๋๋ก ํ๋ค.
๋ค๋ฅธ ๊ณ ๋ฆฝํ ์์ค์ ๋นํด ๋์์ฑ์ด ๋ฎ๋ค. ๋ํ, MySQL์ ๊ณต์ ๋ฝ์ ๊ฑธ์ง ์๊ณ , ์ต์ด ํธ๋์ญ์ SELECT ์ํ์ SNAPSHOT์ ๋ง๋ ํ, ์ด SNAPSHOT์ผ๋ก select๋ฅผ ์ํํ์ฌ ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ์์๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ง ํ๋ค.
SERIALIZABLE (Level3)
๊ณ ๋ฆฝ์์ค์ด ๊ฐ์ฅ ๋๊ณ , ์คํ์ค์ธ ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ผ๋ก๋ถํฐ ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌ๋๋ค.
๋ฐ์ดํฐ ์งํฉ์ ๋ฒ์๋ฅผ ์ง์ด ์ ๊ธ ์ค์ ์ ํ ์ ์๊ณ , ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํธ๋์ญ์ ์ ์๋ฒฝํ ๋ถ๋ฆฌํ ์ ์๋ค.
๋ฐ์ดํฐ์ ๋์์ฑ์ด ๋ฎ๊ณ , SELECT ์ง์์ ๋ฒ ํ๋ฝ์ ์ค์ ํ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ๋ฅผ ๋ธ๋ค.
04. ํ๋ณต
๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ฅ์ ๋ฐ์์, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ผ๊ด์ฑ ์๋ ์ํ๋ก ๋๋๋ฆฌ๋ DBMS ๊ธฐ๋ฅ
DB system์์ ๋ฐ์๊ฐ๋ฅ ํ ์ฅ์ ์ ํ
์์คํ ์ถฉ๋: HW, SW ์ ์ค๋ฅ๋ก ์ฃผ๊ธฐ์ต์ฅ์น๊ฐ ์์ค๋์ด ์ฒ๋ฆฌ์ค์ธ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ์ ์ผ๋ถ ํน์ ์ ๋ถ๊ฐ ์์ค๋จ.
๋ฏธ๋์ด ์ฅ์ : ํค๋ ์ถฉ๋์ด๋, ์ฝ๊ธฐ ์ฅ์ ๋ก ๋ณด์กฐ๊ธฐ์ต์ฅ์น๊ฐ ์์ค
์์ฉ ์ํํธ์จ์ด ์ค๋ฅ: DB์ ์ ๊ทผํ๋ SW์ ๋ ผ๋ฆฌ์ ์ธ ์ค๋ฅ๋ก ํธ๋์ญ์ ์ํ ์คํจ
์์ฐ์ฌํด: ์์ฐ์ฌํด๋ก ์ปดํจํฐ ์์คํ ์ด ์์
๋ถ์ฃผ์ ํน์ ์๋์ ์ธ ์์
ํฌ๊ฒ 2๊ฐ์ง๋ก ์์ฝ: ๋ณ๊ฒฝ์ค์ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ฃผ๊ธฐ์ต์ฅ์น ์์ค ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์ฅ๋ ํ๋๋์คํฌ๊ฐ ์์ค.
01) ํธ๋์ญ์
ํ๋ณต
ํธ๋์ญ์ ์ DB ํ๋ณต ๋จ์์ด๊ธฐ๋ ํจ.
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ๋ด์ฉ์ ํ์๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ์ ์ฅํ๋ ๊ฒ์ด ์๋!
์ผ๋จ ๋ณ๊ฒฝํ ๋ด์ฉ(buffer์ ์์)์ ๋ก๊ทธ(์์ ๋์คํฌ)์ ๊ธฐ๋ก ํ ํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์์ ํจ.
DBMS์ ํ๋ณต ๊ด๋ฆฌ์๋ ํธ๋์ญ์ ์ ACID์ค ์์์ฑ(A), ์ง์์ฑ(D) ๋ฅผ ๋ณด์ฅํ์ฌ ์ฅ์ ๋ก๋ถํฐ DB๋ฅผ ๋ณดํธํ๋ค.
์ฅ์ ๋ฐ์ ์ ๋ก๊ทธ ๋ด์ฉ์ ์ฐธ์กฐํด์, ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ชจ๋ ๋ฐ์ํ๊ฑฐ๋ ์๋๋ฉด ์์ ๋ฐ์ํ์ง ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์์์ฑ์ ๋ณด์ฅํ๋ค.
์ผ๋จ ํธ๋์ญ์ ์ด commit ํ ๋ด์ฉ์ ๋ก๊ทธ๋ฅผ ์ด์ฉํด์ ๋ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
02) ๋ก๊ทธํ์ผ
DBMS๋ ํธ๋์ญ์ ์ด ์ํ์ค์ด๊ฑฐ๋, ์ํ์ด ์ข ๋ฃ๋ ํ ๋ฐ์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ค์ ๋ฐฉ์งํ๊ธฐ ์ํด
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ก์ ์ถ์ ํ๋ ๋ก๊ทธํ์ผ์ ์ฌ์ฉํ๋ค.
๋ก๊ทธ ํ์ผ์ ํธ๋์ญ์ ์ด ๋ฐ์ํ ๋ชจ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋กํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๊ธฐ๋กํด๋๋ ๋ณ๋์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค.
์์ ํ ํ๋๋์คํฌ์ ์ ์ฅ๋๋ฉฐ, ์ ์๊ณผ ๊ด๊ณ์์ด ๊ธฐ๋ก์ด ๋จ์์์.
๋ก๊ทธ ํ์ผ์ ์ ์ฅ๋ ๋ก๊ทธ ๊ตฌ์กฐ
<ํธ๋์ญ์ ๋ฒํธ, ๋ก๊ทธํ์ , ๋ฐ์ดํฐ ํญ๋ชฉ ์ด๋ฆ, ์์ ์ ๊ฐ, ์์ ํ ๊ฐ>
๋ก๊ทธํ์ : ํธ๋์ญ์ ์ ์ฐ์ฐ ํ์ (ex, start, insert, delete, update, abort, commit, ...)
์์ ์ ๊ฐ: ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ๊ฐ
์์ ํ ๊ฐ: ์ฐ์ฐ ๊ฒฐ๊ณผ๋ก ๋ณ๊ฒฝ๋ ๊ฐ
03) ๋ก๊ทธํ์ผ์ ์ด์ฉํ ํ๋ณต
์์คํ ์ด์ ์ค ์ฅ์ ๊ฐ ๋ฐ์ํ์ฌ ์์คํ ์ด ๋ค์ ๊ฐ๋ ๋์์ ๋, DBMS๋ ๋จผ์ ๋ก๊ทธํ์ผ์ ์ดํ๋ค.
DBMS๋ ํธ๋์ญ์ ์ด ์ข ๋ฃ๋์๋์ง, ์ค๋จ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๊ณ
์ข ๋ฃ๋ ํธ๋์ญ์ ์ ์ข ๋ฃ๋ฅผ ํ์ ํ๊ธฐ ์ํด ์ฌ์คํ(REDO)๋ฅผ ์งํ
์ค๋จ๋ ํธ๋์ญ์ ์ ์๋ ์ผ๋ก ๋๋๋ฆฌ๊ธฐ ์ํด ์ทจ์(UNDO)๋ฅผ ์งํ
์ฌ์คํ(REDO)
์ฅ์ ๋ฐ์ ํ, ์์คํ ์ ๋ค์ ๊ฐ๋ํ์ ๋, ๋ก๊ทธ ํ์ผ์ ํธ๋์ญ์ ์ ์์(START) ๊ณผ, ์ข ๋ฃ(commit) ์ด ์๋ ๊ฒฝ์ฐ.
commit ์ฐ์ฐ์ด ๋ก๊ทธ์ ์๋ค => ํธ๋์ญ์ ์ด ๋ชจ๋ ์๋ฃ๋จ.
๋ณ๊ฒฝ ๋ด์ฉ์ด ๊ธฐ๋ก ๋์ง ์์์ ๊ฐ๋ฅ ์ฑ์ด ์์ผ๋ฏ๋ก, ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด์ ํธ๋์ญ์ ์ด ๋ณ๊ฒฝํ ๋ด์ฉ์ DB์ ๋ค์ ๊ธฐ๋กํ๋ ๊ณผ์ ์ด ํ์.
์ทจ์(UNDO)
์ฅ์ ๋ฐ์ ํ, ์์คํ ์ ๋ค์ ๊ฐ๋ํ์ ๋, ๋ก๊ทธ ํ์ผ์ ํธ๋์ญ์ ์ ์์(START) ๋ง ์๊ณ , ์ข ๋ฃ(commit)๊ฐ ์๋ ๊ฒฝ์ฐ.
commit ์ฐ์ฐ์ด ๋ก๊ทธ์ ์๋ค => ํธ๋์ญ์ ์ด ์๋ฃ๋์ง ์์.
ํธ๋์ญ์ ์ด ํ ์ผ์ ๋ชจ๋ ์ทจ์ํด์ผํจ.
์๋ฃํ์ง ๋ชปํ์ง๋ง, ๋ฒํผ์ ๋ณ๊ฒฝ ๋ด์ฉ์ด DB์ ๊ธฐ๋ก๋์์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก, ํธ๋์ญ์ ์ด ๋ณ๊ฒฝํ ๋ด์ฉ์ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉฐ ์์๋ณต๊ตฌ ํด์ผํ๋ค.
์ ๋ ์์ ์ ํธ๋์ญ์ ๋ก๊ทธ DB์ ๊ธฐ๋กํ ๋ชจ๋ ๊ฐ์ ๋ํ์ฌ(๋ณ๊ฒฝ์ ๊ฐ, ๋ณ๊ฒฝํ ๊ฐ) ์ค ์ด๋ ํ๋๋ฅผ DB์ ๋ง๋ ๊ฐ์ผ๋ก ์์ ํ๋ ์์
์ฆ์ ๊ฐฑ์ (immediate update)
ํธ๋์ญ์ ์ ๋ถ๋ถ์๋ฃ ์ ์๋ผ๋, ๋ณ๊ฒฝํ ๋ด์ฉ ์ผ๋ถ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ก ๋ ์ ์์.
์ง์ฐ ๊ฐฑ์ (deferred update)
ํธ๋์ญ์ ์ด ๋ฐ๋์ ๋ถ๋ถ์๋ฃ๋ ํ, ๋ณ๊ฒฝ ๋ด์ฉ์ DB์ ๊ธฐ๋ก
๋ถ๋ถ ์๋ฃ ์ด์ ์๋ ๊ฐฑ์ ๋ด์ฉ์ด ์์ง ์ค์ DB์๋ ๋ฐ์๋์ง ์์ ์ํ.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋ ์์ ์ ์ง์ฐ๋์ง๋ง, ์ฅ์ ๋ฐ์์ ๋ก๊ทธ์ START๋ง ๋ํ๋๋ ํธ๋์ญ์ ์ ์ทจ์(UNDO) ํ ํ์๊ฐ ์์.
04) ์ฒดํฌํฌ์ธํธ๋ฅผ ์ด์ฉํ ํ๋ณต
๋ก๊ทธ๋ฅผ ์ด์ฉํ ํ๋ณต์ ์์คํ ์ฅ์ ๋ฐ์์, ์ด๋ ์์ ๊น์ง ๋์๊ฐ์ผํ๋์ง ์ ์ ์๋ค.
๋ฐ๋ผ์ ํธ๋์ญ์ ์ด ๋ง์ ๊ฒฝ์ฐ, ์๊ฐ์ด ์๋นํ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
๋ง์ ์์ ๋ก๊ทธ๋ฅผ ๊ฒ์ํ๊ณ , ๊ฐฑ์ ํ๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๋ช ์ญ ๋ถ ๋จ์๋ก DB์ ํธ๋์ญ์ ๋ก๊ทธ ํ์ผ์ ๋๊ธฐํ ํ ํ, ๋๊ธฐํํ ์์ ์ ๋ก๊ทธํ์ผ์ ๊ธฐ๋กํด๋๋ ๋ฐฉ๋ฒ ํน์ ๊ทธ ์์ ์ ์ฒดํฌํฌ์ธํธ๋ผ๊ณ ํ๋ค.
์ฒดํฌ ํฌ์ธํธ ์์ ์์ ํ๋ ์์
์ฃผ๊ธฐ์ต ์ฅ์น์ ๋ก๊ทธ ๋ ์ฝ๋๋ฅผ ๋ชจ๋ ํ๋ ๋์คํฌ์ ๋ก๊ทธ ํ์ผ์ ์ ์ฅ
์ฆ์ ๊ฐฑ์ ์ ๊ฒฝ์ฐ, ๋ฒํผ์ ์๋ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ํ๋ ๋์คํฌ์ DB์ ์ ์ฅ.
์ฒดํฌํฌ์ธํธ๋ฅผ ๋ก๊ทธ์ ๊ธฐ๋ก
ํธ๋์ญ์ ์ ๋ก๊ทธ ๊ธฐ๋ก์ ๋ฐ๋ผ ํ๋ณตํ๋ ๋ฐฉ๋ฒ
์ฒดํฌํฌ์ธํธ ์ด์ ์ Commit ๊ธฐ๋ก์ด ์๋ ๊ฒฝ์ฐ: ์๋ฌด ์์ ์ด ํ์ ์๋ค.
์ฒดํฌํฌ์ธํธ ์ดํ์ Commit ๊ธฐ๋ก์ด ์๋ ๊ฒฝ์ฐ: REDO(T)๋ฅผ ์งํํ๋ค.
์ฒดํฌํฌ์ธํธ ์ดํ์ Commit ๊ธฐ๋ก์ด ์๋ ๊ฒฝ์ฐ: ์ฆ์ ๊ฐฑ์ ๋ฐฉ๋ฒ ์ฌ์ฉ์ UNDO(T) ์งํ, ์ง์ฐ ๊ฐฑ์ ์ ์๋ฌด๊ฒ๋ ํ ํ์ X.
[๊ทธ๋ฆผ ์ฐธ์กฐ]
[์ ์ฒด ๋ด์ฉ]
MySQL๋ก ๋ฐฐ์ฐ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ฐ๋ก ๊ณผ ์ค์ต ์ฑ ์ฐธ์กฐ
[Transaction Isolation level ์ฐธ์กฐ]
https://doooyeon.github.io/2018/09/29/transaction-isolation-level.html
Last updated