transaction

119
Transaction

Upload: minkyu-kim

Post on 23-Jun-2015

334 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Transaction

Transaction

Page 2: Transaction

트랜잭션이 뭔가요 ?

Page 3: Transaction

DB 에서 상호작용의 단위

Page 4: Transaction
Page 5: Transaction

ACID

Page 6: Transaction

Atomicity

Consistency

Isolation

Durability

Page 7: Transaction

Atomicity

Page 8: Transaction
Page 9: Transaction

다 실행하거나

아무것도 안하거나

Page 10: Transaction

유저가 포인트로

아이템을 삽니다

Page 11: Transaction

1. 포인트를 깎는다 .

Page 12: Transaction

2. 아이템을 지급한다 .

Page 13: Transaction
Page 14: Transaction
Page 15: Transaction

그런데 ..아이템을 생성하다

죽으면 ?

Page 16: Transaction
Page 17: Transaction
Page 18: Transaction
Page 19: Transaction
Page 20: Transaction

포인트만 나갔네… ?

Page 21: Transaction
Page 22: Transaction

포인트만 나갔네… ?

Page 23: Transaction
Page 24: Transaction
Page 25: Transaction

망했어 ?

Page 26: Transaction
Page 27: Transaction
Page 28: Transaction

안망했어 ?

Page 29: Transaction
Page 30: Transaction
Page 31: Transaction

Consistency

Page 32: Transaction

일관성

Page 33: Transaction
Page 34: Transaction

DB Constraints

Page 35: Transaction

PRIMARY KEYUNIQUE

Page 36: Transaction
Page 37: Transaction

FOREIGN KEY

Page 38: Transaction

ENUM

Page 39: Transaction

위반하는 트랜잭션은

OUT!

Page 40: Transaction

Isolation

Page 41: Transaction

혼자 있고 싶습니다 모두 나가 주세요

Page 42: Transaction

고립성 (Isolation)

Page 43: Transaction

다른 트랜잭션의 연산 작업이

끼어들지 못하도록 보장하는 것을

의미한다 . 

Page 44: Transaction

Durability

Page 45: Transaction
Page 46: Transaction

한번 커밋된 내용은시스템 문제 ,

DB 일관성 체크 등무슨 짓을 해도

영원히 반영

Page 47: Transaction

뭐 알아서잘 만들었겠죠

Page 48: Transaction

Q.

Page 49: Transaction

왜 대충 DB ACID 검색하면 나오는 뻔한 얘기를 하고

있나요 ?

Page 50: Transaction

우리중 스파이가 있는 것 같아

Page 51: Transaction

Isolation

Page 52: Transaction

BEGIN TRANSACTION

Page 53: Transaction

BEGIN TRANS-ACTION

BEGIN TRANS-ACTION

Page 54: Transaction

BEGIN TRANS-ACTION

BEGIN TRANS-ACTION

Page 55: Transaction

다른 트랜잭션의 연산 작업이

끼어들지 못하도록 보장하는 것을

의미한다 . 

Page 56: Transaction

BEGIN TRANS-ACTION

BEGIN TRANS-ACTION????????

먼저 시작한 놈이

뭘 하려는 거지 ?

Page 57: Transaction

BEGIN TRANS-ACTION

BEGIN TRANS-ACTION????????

먼저 시작한 놈이

뭘 하려는 거지 ?

Page 58: Transaction

BEGIN TRANS-ACTION

BEGIN TRANS-ACTION

SELECT * WHERE id=1

이러면 망하는데 ?

INSERTid=1

Page 59: Transaction

BEGIN TRANS-ACTION

BEGIN TRANS-ACTION????????

Page 60: Transaction

BEGIN TRANS-ACTION

BEGIN TRANS-ACTION

SLEEP(10000)

Page 61: Transaction
Page 62: Transaction
Page 63: Transaction

타협

Page 64: Transaction

타협 Level

Page 65: Transaction

Isolation Level

Page 66: Transaction

Serializable

Page 67: Transaction

내가 건드린건보지 마

Page 68: Transaction

Read-Write Lock

Page 69: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 20

UPDATE usersSET age=21where id=1SELECT age

FROM usersWHERE id=1

Page 70: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 20

1

UPDATE usersSET age=21where id=1SELECT age

FROM usersWHERE id=1

Page 71: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 20

120

UPDATE usersSET age=21where id=1SELECT age

FROM usersWHERE id=1

Page 72: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

UPDATE usersSET age=21where id=1

DB

1, 20

1 Locked!

20

SELECT ageFROM usersWHERE id=1

Page 73: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 20

1

2

20

20

Locked!

UPDATE usersSET age=21where id=1SELECT age

FROM usersWHERE id=1

Page 74: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 20

1Locked

!

Re-lease!

2

20

20

UPDATE usersSET age=21where id=1SELECT age

FROM usersWHERE id=1

Page 75: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

UPDATE usersSET age=21where id=1

DB

1, 21

1

Re-lease!

2

3

20

20

SELECT ageFROM usersWHERE id=1

Page 76: Transaction
Page 77: Transaction

기다리기 싫어요 !

Page 78: Transaction

MORE 타협

Page 79: Transaction

REPEATABLE READ

Page 80: Transaction
Page 81: Transaction

첫인상

Page 82: Transaction

첫 READ

Page 83: Transaction

첫 READ 가트랜잭션 내내

유지

Page 84: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 20

120

UPDATE usersSET age=21where id=1SELECT age

FROM usersWHERE id=1

Page 85: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 20

120

UPDATE usersSET age=21where id=1

T1 Snapshot1, 20

SELECT ageFROM usersWHERE id=1

Page 86: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 21

120

UPDATE usersSET age=21where id=1

2T1 Snapshot

1, 20

SELECT ageFROM usersWHERE id=1

Page 87: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 21

120

UPDATE usersSET age=21where id=1

T1 Snapshot1, 20 2

어 스냅샷

이 20 이네 ?

3SELECT ageFROM usersWHERE id=1

Page 88: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 21

120

UPDATE usersSET age=21where id=1

T1 Snapshot1, 20 2

그럼 20디비가 뭐라든…

20 3

Page 89: Transaction

그 시점에 커밋된걸

보고 싶어요 !

Page 90: Transaction

READ COMMIT-TED

Page 91: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 20

120

UPDATE usersSET age=21where id=1

Page 92: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 20

120

UPDATE usersSET age=21where id=1

Page 93: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 21

120

UPDATE usersSET age=21where id=1

2

Page 94: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 21

120

UPDATE usersSET age=21where id=1

2

어 21 이네 ?

3

Page 95: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 21

120

UPDATE usersSET age=21where id=1

2

21 3

Page 96: Transaction

ACID 필요없어 !그냥 졸라 빠르게 !

Page 97: Transaction

READ UNCOMMIT-TED

Page 98: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 21

120

UPDATE usersSET age=21where id=1

2

21 3

Page 99: Transaction

사실 뭔가 생략되어있어요

Page 100: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 21

120

UPDATE usersSET age=21where id=1

COMMIT

2

21 3

Page 101: Transaction

커밋을 안하고롤백하면 ?

Page 102: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 20

UPDATE usersSET age=21where id=1

ROLLBACK

Page 103: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 20

120

UPDATE usersSET age=21where id=1

ROLLBACK

Page 104: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 20

120

UPDATE usersSET age=21where id=1

ROLLBACK

2

Page 105: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 20

120

UPDATE usersSET age=21where id=1

2

ROLLBACK

어 우리 커밋 안했는데 기다려야하는거 아니에요 ?

몰라 대충 넣어

Page 106: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2 DB

1, 21

120

UPDATE usersSET age=21where id=1

ROLLBACK

2

SELECT ageFROM usersWHERE id=1

21 3

Page 107: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 21

120

UPDATE usersSET age=21where id=1

2

21 3

ROLLBACK4

Page 108: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 20

120

UPDATE usersSET age=21where id=1

2

21 3

ROLLBACK4롤백롤백

Page 109: Transaction

SELECT ageFROM usersWHERE id=1

T1 T2

SELECT ageFROM usersWHERE id=1

DB

1, 20

120

UPDATE usersSET age=21where id=1

2

21 3

ROLLBACK4롤백롤백

????????

Page 110: Transaction

Q: 이럴거면 뭐하러

트랜잭션을 쓰죠 ?

Page 111: Transaction

A: 몰라요

Page 112: Transaction

권장하지 않아요 .

Page 113: Transaction

MySQL Default

REPEATABLE READ

Page 114: Transaction

Postgres Default

READ COMMITTED

Page 115: Transaction

짜잘짜잘하게 다른데

그런건 알아서 !

Page 116: Transaction

하고싶은 말

Page 117: Transaction

트랜잭션은생각보다 만능이

아닙니다…

Page 118: Transaction

Execution Order를 보장해주지 않아요 .

Page 119: Transaction