์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- git merge
- ์ค๋ธ์
- ์ฃผ๊ธฐ์ ํธ
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- 99ํด๋ฝ
- ์ค๋ ๋
- ๊ฐ๋ฐ์์ทจ์
- ์ฐ๋ถํฌdb
- tcp ํ๋กํ ์ฝ
- ์์๋ฒํธ
- ํญํด99
- ์ค๋ฅ๊ฒ์ถ
- ํ๋ ์ ๊ตฌ์กฐ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์ค๋ฅ์ ์ด
- ์๋น์ค ํ๋ฆฌ๋ฏธํฐ๋ธ
- xv6
- ์ฝ๋ฉํ ์คํธ์ค๋น
- til
- ํ ํฐ ๋ฒ์ค
- reducible
- leetcode
- i-type
- well known ํฌํธ
- ํ๋ก์ด๋์์
- ๋น์ฃผ๊ธฐ์ ํธ
- IEEE 802
- ๋ฐ์ดํฐ ์ ์ก
- mariadb
- tcp ์ธ๊ทธ๋จผํธ
- Today
- Total
Unfazedโ๏ธ๐ฏ
1.2 Serializability ์ง๋ ฌ ๊ฐ๋ฅ ๋ณธ๋ฌธ
Correct Execution
์ฌ๋ฐ๋ฅธ ์คํ
๋ค์๊ฐ์ ํธ๋์ญ์ ์ ๋์์ ์ํํ ๋ ์ฌ๋ฐ๋ฅธ ํธ๋์ญ์ ์คํ์ ๋ฌด์์ธ๊ฐ๋ฅผ ๊ฒฐ์ ํ์ฌ์ผ ํ๋ค. ํธ๋์ญ์ ์ ๋ค์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ์ฐ์ผ๋ก ๊ตฌ์ฑ์ด ๋๋ฉฐ, ๋ค์๊ฐ์ ํธ๋์ญ์ ์ด ๋์์ ์ํ์ด ๋๋ฉด ํ ํธ๋์ญ์ ์ ์ํ ์ฐ์ฐ๊ณผ ์๋ก ํผํฉ๋์ด ์ํ์ด ๋ ๊ฒ์ด๋ฉฐ, ์ฌ๋ฐ๋ฅธ ํธ๋์ญ์ ์คํ์ ๋ํ ์ ํํ ์ ์๊ฐ ํ์ํ๋ค.
์ฐธ๊ณ ์ ์ผ๋ก ํธ๋์ญ์ ์ ์์ฐจ์ ์ผ๋ก ์ํํ๋ ์ง๋ ฌ ๋ฐฉ๋ฒ์ ํญ์ ์ฌ๋ฐ๋ฅด๋ฉฐ(correct), ์ด๋ ํธ๋์ญ์ ์ ์ผ์น์ฑ ์ฑ์ง๋ก ์ธํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํญ์ ์ผ์นํ๋ ์ํ๋ก ์ ์ง๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ ์ง๋ ฌ ํธ๋์ญ์ ์คํ์ ํ์ค์ ์ผ๋ก๋ ์ด์์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ๋ค๋ง ์ฌ๋ฐ๋ฅธ ํธ๋์ญ์ ์คํ์ ํ๋จ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ๋ค.
Nonserializable Execution
ํธ๋์ญ์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ํ์์ ์ค์์ฝ๊ธฐ, ๊ฐฑ์ ์์ค, ๋ฐ๋ณต๋ถ๊ฐ ์ฝ๊ธฐ๋ก 3๊ฐ์ง์ด๋ค.
T1 | T2 |
WRITE(A) ROLLBACK |
READ(A) A = A + 50 WRITE(A) |
์ค์์ฝ๊ธฐ๋ ์๋ฃ๋์ง ์๋ ๊ฐ(uncommitted value, dirty value)์ ์ฝ๋ ์ฐ์ฐ์ ๋งํ๋ค. ์๊ธฐ์์ T2๊ฐ ์ฝ๋ ๊ฐ์ ์์ง ์๋ฃ๋์ง ์์ ๊ฐ์ด๋ฉฐ, ๋ง์ฝ T1์ด ์ฒ ํ๋ฅผ ํ๋ฉด T2 ์ฐ์ฐ ๋ํ ์ฒ ํํ์ฌ์ผ ํ๋ค.
2) lost update (๊ฐฑ์ ์์ค)
- effect(i.e. update) of T2 is lost
T1 | T2 |
READ(A) A = A + 50 WRITE(A) |
READ(A) A = A + 50 WRITE(A) |
๊ฐฑ์ ์์ค์ T2๊ฐ ์ด ๊ฐ์ T1์ด ๋ฎ์ด์ฐ๋ ํ์์ด๋ฉฐ, ์ด ๊ฒฝ์ฐ T2์ ํจ๊ณผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
3) unrepeatable read (๋ฐ๋ณต๋ถ๊ฐ ์ฝ๊ธฐ)
T1 | T2 |
READ(A) A = A + 50 WRITE(A) |
READ(A) A = A + 50 WRITE(A) |
๋ฐ๋ณต๋ถ๊ฐ ์ฝ๊ธฐ๋ T1์ด ์ฒ์์ ์ฝ๋ A ๊ฐ๊ณผ ํ์ ์ฝ์ A ๊ฐ์ ์ฐจ์ด๊ฐ ์๊ฒ ๋์ด, T1 ๊ด์ ์์๋ A ๊ฐ์ ์ฝ์ ๋๋ง๋ค ๋ค๋ฅธ ๊ฐ์ด ๋์ค๋ ํ์์ด๋ค.
๋์์ฑ ์ ์ด๋ ์ธ ๊ฐ์ง ํ์์ ๋ฐฉ์งํ์ฌ ์ฌ๋ฐ๋ฅธ ํธ๋์ญ์ ์ํ์ ๋ํ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค. ๋ฐ๋ฅด์ง ๋ชปํ ์คํ์ผ๋ก ๋ฐ์ํ ์ ์๋ ํ์์ ์ค์ง ์ด ์ธ ๊ฐ์ง ํ์๋ฟ์ด๋ฉฐ, ์์ผ๋ก ์ ๊ฐ๋๋ ๋์์ฑ ์ ์ด๋ ์ธ ๊ฐ์ง ํ์์ ๋ฐฉ์งํ๋ ์ด๋ก ์ด๋ค.
Serializability
Basic assumption
- each transaction preserves database consistency
A(possibly concurrent) schedule is serializable if it is equivalent to a serial schedule. Two different notions:
1) conflict serializability
2) view serializability
Simplified view of transactions
- ignore operations other than read and write instructions
- assume that transactions may perform arbitrary computations on data between reads and writes
- then, a simplified schedule consitsts of only reads and writes
์ง๋ ฌ๊ฐ๋ฅ
์ค์ผ์ค์ด ์ง๋ ฌ์ํ ์ค์ผ์ค ๊ฒฐ๊ณผ์ ๋์ผํ๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ง๋ ฌ๊ฐ๋ฅ(serializable) ์ค์ผ์ค์ด๋ผ๊ณ ํ๋ค. ์ค์ผ์ค์ ๊ด๋ จ๋๋ ํธ๋์ญ์ ์ ๊ฐ์๊ฐ n๊ฐ์ด๋ฉด ๊ฐ๋ฅํ ์ง๋ ฌ ์ค์ผ์ค์ n๊ฐ์ ํธ๋์ญ์ ์ ๋์ดํ๋ ๊ฐ์์ ๋์ผํ๋ฏ๋ก ์ด n!์ด๋ค. ์ง๋ ฌ ๊ฐ๋ฅ ์ค์ผ์ค์ n!์ ์ง๋ ฌ ์ค์ผ์ค ์ค์์ ์ ์ด๋ ํ๋์ ์ง๋ ฌ ์ค์ผ์ค๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
์ค์ผ์ค ๊ฒฐ๊ณผ์ ๋์ผํจ์ ์ ์ํ๋ ๋ฐฉ์์ ์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค๊ณผ ๋ทฐ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ด ์๋ค.
Conflicting Instructions (์ถฉ๋ ์ฐ์ฐ)
Instruction Ii and Ij of transtions Ti and Tj respectivelty, conflict if and only if there exists some item Q accessed by both Ii and Ij and at least one of these instructions is write(Q)
li = read(Q), lj = write(Q) They conflict
li = write(Q), lj = read(Q) They conflict
li = write(Q), lj = write(Q) They conflict
์ถฉ๋ ์ฐ์ฐ
๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ๋ ๊ฐ ์ฐ์ฐ ์ค์์ ์ต์ํ ํ ๊ฐ ์ฐ์ฐ์ด ์ฐ๊ธฐ ์ฐ์ฐ์ด๋ฉด, ๋ ์ฐ์ฐ์ ์ถฉ๋ํ๋ค๊ณ ํ๋ค.
์ถฉ๋ ์ฐ์ฐ์ ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ์ฐ์ฐ๋ง์ ๊ณ ๋ คํ๋ค. ๋์ผํ์ง ์์ ๋ฐ์ดํฐ์ ๋ํ ์ฐ์ฐ์ ์ ํ ๊ณ ๋ คํ์ง ์๋๋ค.
์ค์ผ์ค์์ ์ถฉ๋์ฐ์ฐ์ ์ฐ๊ด๋๋ ํธ๋์ญ์ ์ ์ง๋ ฌ ์คํ ์์๋ฅผ ๊ฒฐ์ ํ๋ค. ๋น์ถฉ๋์ฐ์ฐ์ ๋ ์ฐ์ฐ์ ์์๋ฅผ ์ค์ผ์ค์์ ๋ฐ๊พธ์ด๋ ์ฐ์ฐํจ๊ณผ๊ฐ ๋์ผํ๊ฒ ๋์ค๋, ์ถฉ๋ ์ฐ์ฐ์ ์ฐ์ฐ ์คํ ์์๋ฅผ ๋ฐ๊พธ๋ฉด ๋ค๋ฅธ ํจ๊ณผ๊ฐ ๋ํ๋๋ค.
Conflict Serializable Schedule
If a schedule S can be transformed into a schedule S' by a series of swaps of non-conflicting instructions, we say that S and S' are conflict equivalent.
We say that a schedule S is conflict serializable if it is conflict equivalent to a serial schedule.
์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค
์ค์ผ์ค์์ ๋น์ถฉ๋ ์ฐ์ฐ์ ์๋ก ๋ฐ๊พธ์ด๋ ์ฐ์ฐํจ๊ณผ๊ฐ ๋์ผํ๋ค. ์ค์ผ์ค์์ ๋น์ถฉ๋ ์ฐ์ฐ์ ์๋ก ๋ฐ๊พธ์ด ์ง๋ ฌ์ค์ผ์ค์ด ๋๋ค๋ฉด, ์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ด๋ผ ํ๋ค.
Conflict Serializable Example 1
Schedule 5 can be transformed into Schedule 6, a serial schedule where T2 follows T1, by series of swaps of non-conflicting instructions
-Therefore schedule 5 is conflict serializable.
T1 | T2 |
Read(A) Write(A) Read(B) Write(B) |
Read(A) Write(A) Read(B) Write(B) |
Schedule 5 (conflict serializable, ์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค)
T1 | T2 |
Read(A) Write(A) Read(B) Write(B) |
Read(A) Write(A) Read(B) Write(B) |
Schedule 6 (์ง๋ ฌ ์ค์ผ์ค)
์ค์ผ์ค 5์์ T2์ write(A)๋ T1์ read(B), write(B)์ ๋น์ถฉ๋ ํ๋ฏ๋ก ์๋ก ์์น๋ฅผ ๋ฐ๊ฟ ์ ์๋ค. ๋ํ T2์ read(A) ๋ํ T1์ read(B), write(B)์ ๋น์ถฉ๋ ํ๋ฏ๋ก ์๋ก ์์น๋ฅผ ๋ฐ๊ฟ ์ ์๋ค. ์๋ก ์์น๋ฅผ ๋ฐ๊พธ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค์ผ์ค 6์ด ๋์ค๊ฒ ๋๋ฉฐ, ์ค์ผ์ค 6์ ์ง๋ ฌ ์ค์ผ์ค์ด๋ค. ์ด ๊ฒฝ์ฐ ์ค์ผ์ค 5๋ ์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ด๋ค.
T3 | T4 |
Read(Q) Write(Q) |
Write(Q) |
์๊ธฐ ์ค์ผ์ค์ ๋น์ถฉ๋ ์ฐ์ฐ ์ํธ ๊ตํ์ด ๋์ง ์์ผ๋ฏ๋ก ์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ ์๋๋ค.
Consistency๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค. (์ถฉ๋์ง๋ ฌ ๊ฐ๋ฅ ์ค์ผ์ค์ด ์๋๋ผ๊ณ consistentํ์ง ์๋ค๊ณ ๋งํ ์ ์์)
View Serializability Definition
๋ทฐ ์ง๋ ฌ๊ฐ๋ฅ ์ ์
์ค์ผ์ค S์ ์ํ ๊ฐ ํธ๋์ญ์ ์ ์ฝ๊ธฐ ์ฐ์ฐ์ ๋ํ์ฌ S' ์ค์ผ์ค์์ ๋์ผํ ๊ฐ์ ์ฝ๊ณ , ์ค์ผ์ค S์ ๋ง์ง๋ง ์ฐ๊ธฐ ์ฐ์ฐ์ด S' ์ค์ผ์ค์ ๋ง์ง๋ง ์ฐ๊ธฐ ์ฐ์ฐ๊ณผ ๋์ผํ๋ฉด, ์ค์ผ์ค S'๋ ๋ทฐ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ด๋ผ๊ณ ํ๋ค.
View Serializability Example
T5 | T6 | T7 |
Read(Q) Write(Q) |
Write(Q) |
Write(Q) |
Schedule 8
์ค์ผ์ค 8์ ์ถฉ๋์ฐ์ฐ๋ง์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ด ๋น์ถฉ๋ ์ฐ์ฐ ์์น ๋ฐ๊ฟ์ ์ํ์ฌ ์ง๋ ฌ ์ค์ผ์ค๋ก ๋ณํ์ด ๊ฐ๋ฅํ ์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ ์๋๋ค.
๊ทธ๋ฌ๋ ์ค์ผ์ค 8์ ์ง๋ ฌ์ค์ผ์ค <T5, T6, T7>์ ํจ๊ณผ๊ฐ ๋์ผํ ๋ทฐ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ด๋ค. T5 ์ฝ๊ธฐ ์ฐ์ฐ์์ ๋ณด๋ ๋ฐ์ดํฐ Q๋ ์ง๋ ฌ ์ค์ผ์ค <T5, T6, T7>์ T5 ์ฝ๊ธฐ ์ฐ์ฐ์ด ๋ณด๋ ๋ฐ์ดํฐ ๊ฐ๊ณผ ๋์ผํ๋ฉฐ, ์ค์ผ์ค 8์ ๋ฐ์ดํฐ Q์ ๋ํ ๋ง์ง๋ง ์ฐ๊ธฐ ์ฐ์ฐ์ T7์ ์ฐ๊ธฐ ์ฐ์ฐ์ธ๋ฐ <T5, T6, T7>์ T7 ์ฐ๊ธฐ ์ฐ์ฐ๊ณผ ๋์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅํ์ง ์์ ๋ทฐ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ blind write๋ฅผ ํฌํจํ๋ค.
Conflict Serializability vs. View Serializability
์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค ⊂ ๋ทฐ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค
ํ์ค์ ์ผ๋ก๋ DBMS ์์คํ ์ ์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ์ฑ ์ค์ผ์ค๊ณผ ๋ทฐ ์ง๋ ฌ๊ฐ๋ฅ์ฑ ์ค์ผ์ค์ ์ผ๋ถ๋ถ๋ง์ ์ง์ํ๊ณ ์๋ค.
Other Notions of Serializability
The schedule below produces same outcome as the serial schedule <T1, T2>, yet is not conflict equivalent or view equivalent to it
T1 | T2 |
Read(A) A := A – 50 Write(A) Read(B) B := B+50 Write(B) |
Read(B) B := B – 10 Write(B) Read(A) A := A + 10 Write(A) |
๋ค๋ฅธ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค
ํด๋น๋น ์ค์ผ์ค์ ์ถฉ๋ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ด ์๋๋ค(ํธ๋์ญ์ ์ค๊ฐ์ ๋์ค๋ ๋ฐ์ดํฐ B์ ๋ํ ์ฐ์ฐ๋ค์ swapํ ์ ์์). ๋ทฐ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ ํ๋จํ๊ธฐ ์ํด์๋ ๋ ๊ฐ ํธ๋์ญ์ ์ ๋ชจ๋ ์ง๋ ฌ ์ค์ผ์ค(์ฆ, <T1, T2>, <T2, T1>)๊ณผ ๋ทฐ ๋๋ฑ์ฑ(view equivalence) ์ฌ๋ถ๋ฅผ ํ๋จํ์ฌ์ผ ํ๋ค. <T1, T2> ์ง๋ ฌ ์ค์ผ์ค๊ณผ ๋น๊ตํ๋ฉด ๋ฐ์ดํฐ B์ ๋ํ ์ต์ข ์ฐ๊ธฐ๊ฐ ์ฃผ์ด์ง ์ค์ผ์ค์์๋ T1์ด๋ฉฐ, <T1, T2> ์์๋ T2๊ฐ ๋์ด ๋ทฐ ๋๋ฑ์ฑ์ด ์ฑ๋ฆฝ๋์ง ์๋๋ค. ์ ์ฌํ ์ด์ ๋ก ์ฃผ์ด์ง ์ค์ผ์ค์ <T2, T1> ์ง๋ ฌ ์ค์ผ์ค๊ณผ ๋ทฐ ๋๋ฑ์ฑ์ด ์ฑ๋ฆฝ๋์ง ์์ผ๋ฏ๋ก, ์ฃผ์ด์ง ์ค์ผ์ค์ ๋ทฐ ์ง๋ ฌ๊ฐ๋ฅํ์ง ์๋ค.
๊ทธ๋ฌ๋ ํด๋น ์ค์ผ์ค์ ์ง๋ ฌ ์ค์ผ์ค <T1, T2>์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋ค. ํด๋น ์ค์ผ์ค์ ํธ๋์ญ์ ์ ๋ชจ๋ ์ฐ์ฐ์ด ๋ํ๊ธฐ, ๋นผ๊ธฐ์ด๋ฉฐ, ์ด๋ฌํ ์ฐ์ฐ์ ์ํธ ๊ตํ(commutable)์ด ๋๋ค๋ ํน์ง์ด ์์ด, ์ง๋ ฌ ์ค์ผ์ค <T1, T2>์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋ค. ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ํธ๋์ญ์ ์์ ์ํํ๋ ๋ชจ๋ ์ฐ์ฐ์ ๋ฏธ๋ฆฌ ์ ์ ์์ผ๋ฉด, ์๊ธฐ์ ๊ฐ์ ๋ถ์์ ํตํ์ฌ ์ข ๋ ๋ง์ ์ง๋ ฌ๊ฐ๋ฅ ์ค์ผ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ์ํ ํ ์ ์์ผ๋, ์ด๋ ํ์ค์ ์ผ๋ก๋ ๋ถ๊ฐ๋ฅํ๋ค. ์ค์ ์ํฉ์์๋ ์ฌ์ฉ์ ํธ๋์ญ์ ๋ด์์ ์ํํ๋ ์ฐ์ฐ์ด ์ฌ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์๋ ค์ง ์ ์๋ค.