Transaction
ạ
ThS. Hoàng M nh Hà hoangha84@gmail.com https://sites.google.com/site/hoangha84
N i dung
ộ
• Gi
• Các tính ch t c a giao d ch. ấ ủ
ị
• Các thành ph n x lý giao d ch trong HQT CSDL.
ầ ử
ị
• Các tr ng thái c a giao d ch.
ủ
ạ
ị
• L ch trình:
ớ i thi u v Giao d ch (Transaction). ị ệ ề
• Khái ni mệ
- T T N C a o h K
-
• L ch trình tu n t
ầ ự
ị
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
• Tính kh tu n t
ả ầ ự
• Kh tu n t
ả ầ ự
xung đ t ộ
2
• M t s bài t p ậ
ộ ố
• Kh tu n t
view
ả ầ ự
• Giao d ch trong SQL
ị
ị
• Khái ni mệ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
3
Gi
i thi u v Giao d ch
ớ
ề
ệ
ị
Multi-user System
• 1 cách phân lo i HQT CSDL khác là d a trên s l
ng ng i ố ượ ự ạ ườ
• Single-user
• Multi-user: h u h t các HQT CSDL
ế
ầ
• X lý xen k (Interleaved processing)
s d ng đ ng th i: ồ ử ụ ờ
• X lý song song (Parallel processing)
ử ẽ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
4
ử
ệ
ị
Khái ni m Giao d ch (giao tác)
• Là m t ch ượ ươ v x lý truy xu t CSDL. ị ử
ng trình đ c th c thi đóng vai trò nh m t đ n ộ ư ộ ơ ự
• M t giao d ch có th g m nh ng x lý trên 1 ho c nhi u
ấ
ể ồ ữ ử ề ặ ị
• Giao d ch có th đ
ộ CSDL.
c vi ị ể ượ t trong ngôn ng SQL ho c m t ữ ặ ộ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
5
ế ngôn ng l p trình nào đó. ữ ậ
Khái ni m Giao d ch
ệ
ị
• Begin Transaction … Commit/Rollback Transaction
• Các ho t đ ng đ
c th c hi n bên trong t o thành m t giao ạ ộ ượ ự ệ ạ ộ
• Đ đ m b o tính toàn v n c a d li u, ph i đ m b o các
d ch. ị
ẹ ủ ữ ệ ả ả ể ả ả
• Tính nguyên t
(Atomicity)
ử
• Tính nh t quán (Consistency)
ấ
- T T N C a o h K
-
u
• Tính cô l p (Isolation) ậ
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
• Tính b n v ng (Durability)
ề ữ
6
ả tính ch t c a giao d ch: ấ ủ ị
• Các tính ch t c a giao d ch ấ ủ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
7
ị
Gi
i thi u v Giao d ch
ớ
ề
ệ
ị
ấ ủ
Các tính ch t c a Transaction
ạ ộ ặ ộ
• Tính nguyên t giao d ch đ ượ ị gì.
(Atomicity): Ho c toàn b các ho t đ ng c a ử ủ c ph n ánh đúng trong CSDL ho c là không có ặ ả
ộ
• Tính nh t quán (Consistency): Khi m t giao d ch thành công, ủ
ị c và sau khi x y ra ả ự ấ ướ ả
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
8
ấ ph i đ m b o s nh t quán c a CSDL tr ả ả giao d ch. ị
ấ ủ
Các tính ch t c a Transaction
• Tính cô l p (Isolation): cho dù có nhi u giao d ch đ
ề ậ ị ượ
ồ ả ả ế c th c ự ả ự ươ
ầ ự ờ ự ớ ộ ng S “Cô ự
hi n đ ng th i thì k t qu cu i cùng ph i đ m b o s t ả ố ệ đ ng v i th c thi các giao d ch đó m t cách tu n t ị ươ l p” c a các giao d ch. ậ ủ ị
ề ữ ộ ị
- T T N C a o h K
• Tính b n v ng (Durability): Sau khi m t giao d ch thành công, các thay đ i v i CSDL ph i còn nguyên cho dù có x y ra s ự c h th ng. ố ệ ố
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
9
ổ ớ ả ả
ệ ả
è Công vi c c a H qu n tr ị ệ ủ C s d li u ơ ở ữ ệ khi x lý giao d ch ị
ử
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
10
Đ c/ghi d li u
ữ ệ
ọ
• CSDL n m trên đĩa. ằ
• Các truy xu t CSDL g m: ấ
• Đ c n i dung X: l y n i dung X t
CSDL trên đĩa ghi vào vùng
ấ
ừ
ộ nh đ m c a giao d ch. ủ
ọ ộ ớ ệ
ị
• Ghi n i dung X: chép n i dung X t
vùng nh đ m c a giao
ộ
ộ
ừ
ớ ệ
ủ
i CSDL trên đĩa.
d ch vào l ị
ạ
• Th c t
ồ
- T T N C a o h K
-
t là th c hi n vi c ghi vào ự ế ự ệ ấ
u
ệ
i
ệ ộ ớ ể
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
11
: Write không nh t thi ế CSDL trên đĩa mà có th ghi t m trên b nh và ghi vào đĩa ạ mu n h n. ộ ơ
Ví dụ
• T là m t giao d ch chuy n 50 t ị
• Read(A);
• A=A-50;
• Write(A);
• Read(B);
• B=B+50;
- T T N C a o h K
-
• Write(B);
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
12
Tài kho n A sang B. ể ộ ừ ả
ACID
• Tính nguyên t Read(B) ?
• Tính nh t quán (C): T ng A và B là không đ i khi th c hi n T
(A): S c x y ra sau Write(A) và tr c ử ự ố ả ướ
ệ ấ
(Ti n không t o ra ho c m t đi khi th c hi n giao d ch) ấ ự ề ạ ổ ệ ự ị ổ ặ
• T n t ệ ố ồ ạ c n ph i có tính nguyên t ầ
tr ng thái không nh t quán ể ờ ở ạ ấ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
13
i th i đi m h th ng . ử ả
ACID
• Tính cô l p (I): ngay c khi A và C đ
ậ ả ỗ
ạ
• VD: t
c đ m b o cho m i ả ượ ả giao d ch, tr ng thái không nh t quán v n có th x y ra khi ể ả ẫ ấ m t s giao d ch x y ra đ ng th i. ị ộ ố ả ồ ờ ị
ạ ự ể ệ ấ ạ ờ
• X lý đ n gi n: th c hi n tu n t
ờ 1 giao d ch khác x y ra. i th i đi m không nh t quán t m th i khi th c hi n T ị ả
các giao d ch gi m hi u ầ ự ử ự ệ ệ ả ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
14
ả ơ năng h th ng. ệ ố
ACID
ả ử ả s x y ra s c m t d li u trên b ộ ự ố ấ ữ ệ
• Tính b n v ng (D): gi ề ữ ớ ữ ệ
• Đ m b o tính b n v ng:
nh , d li u trên đĩa không m t. ấ
• Đ m b o các thay đ i đã đ
c vi
t trên đĩa tr
c khi giao d ch
ổ
ượ
ế
ướ
ị
ả k t thúc.
ả ế
• Thông tin v nh ng thay đ i do giao d ch đ
ượ
ổ
ị
đ xây d ng l
t trên đĩa đ c vi ủ ế i sau s c . i CSDL khi h th ng kh i đ ng l ự ố ạ ệ ố
ề ữ ạ
ở ộ
ự
ể
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
15
ề ữ ả ả
Các lo i s c (Failures)
ạ ự ố
• Computer failure (System crash)
• Transaction/System error: integer overflow, division by zero,
• Local errors/exception conditions detected by transaction: data
user’s interruption…
• Concurrency control enforcement
- T T N C a o h K
• Disk failure
-
u
ệ
• Physical problems and catastrophes: fire, theft…
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
16
not found
• Các thành ph n x lý giao d ch trong HQT CSDL
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
17
ầ ử ị
Gi
i thi u v Giao d ch
ớ
ề
ệ
ị
Thành ph n c a HQT CSDL ủ
ầ
• Đ m b o tính nguyên t
ả ả ử : thành ph n qu n tr giao d ch ả ầ ị ị
• Đ m b o tính b n v ng: thành ph n qu n tr ph c h i
(transaction management component).
ả ị ụ ồ ề ữ ả ả
• Đ m b o tính cô l p: thành ph n qu n tr c nh tranh
ầ (recovery management component).
ả ị ạ ả ả ậ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
18
ầ (concurrency control component)
Tình hu ng xem xét
ố
• 2 giao d ch T1 và T2 nh sau
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
19
ư ị
ự ầ
ị ạ
S c n thi t c a ế ủ Thành ph n qu n tr c nh ả ầ tranh
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
20
ự ầ
ị ạ
S c n thi t c a ế ủ Thành ph n qu n tr c nh ả ầ tranh
CRASH
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
21
ự ầ
ị ạ
S c n thi t c a ế ủ Thành ph n qu n tr c nh ả ầ tranh
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
22
ầ
ả
ụ
ị
• Đi u ki n: 1 giao d ch ho t đ ng ạ ộ trên 1 b n sao c a CSDL th t. ậ ủ
1 th i đi m và th c hi n ự ề ể ờ ở ị ệ
ệ ả
Thành ph n qu n tr ph c h iồ đ n gi n ơ
ả
• CSDL th t là file trên đĩa. M t con tr db_pointer l u trên đĩa ộ
ư ỏ
ậ ỏ ế ả và tr đ n b n sao hi n hành c a CSDL đó. ệ ủ
ị ộ ố ậ ộ ả ậ
• M t giao d ch mu n c p nh t CSDL, đ u tiên t o ra m t b n sao đ y đ c a CSDL.N u giao d ch b b d , b n sao m i b ớ ị xoá. B n sao cũ c a CSDL không b nh h
ầ ủ ủ ế ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
23
ng. ầ ạ ị ỏ ở ả ưở ị ả ủ ả
ả
ầ
ụ
ị
• N u giao d ch hoàn t
c bàn giao: t, nó đ c đ ượ ượ ế ấ ị
Thành ph n qu n tr ph c h iồ đ n gi n ơ
ả
• Đ m b o r ng t
c vi
t
t c các trang c a b n sao m i đã đ ủ ả
ả ằ
ấ ả
ượ
ả
ớ
ế
lên đĩa.
• Con tr đ
c c p nh t đ tr đ n b n sao m i; b n sao m i ả
ả
ớ
ớ
ậ ể ỏ ế tr thành b n sao hi n hành c a CSDL. ệ
ỏ ượ ậ ả
ủ
ở
• B n sao cũ b xoá đi. Giao d ch đ
ả
ị
c bàn c g i là đã đ i th i đi m s c p nh t con tr db_pointer ậ
c đ ượ ượ ỏ
ượ ọ ự ậ
ị ể
ờ
ạ
giao (committed) t c ghi lên đĩa. đ
ượ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
24
ị
ả
ầ
ụ
• S c giao d ch:
ự ố ị
Thành ph n qu n tr ph c h iồ đ n gi n ơ
ả
i th i đi m b t kỳ tr
ướ
ể
ế
c khi con tr ỏ ị ả
ượ ậ
ủ
• N u giao d ch th t b i t ị db_pointer đ h ưở
ờ ộ ng. Ta có th b d giao d ch b i xoá b n sao m i. ị
ấ ạ ạ ấ c c p nh t, n i dung cũ c a CSDL không b nh ậ ể ỏ ở
ả
ớ
ở
• M i khi giao d ch đ ậ
c bàn giao (committed), t trong CSDL đ c đ ượ ượ ệ ự t c các ấ ả c tr b i ỏ ở ượ ở
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
25
ị ỗ c p nh t mà nó đã th c hi n là ậ db_pointer.
ị
ả
ầ
ụ
• S c h th ng: ự ố ệ ố
Thành ph n qu n tr ph c h iồ đ n gi n ơ
ả
ướ
ể
ờ
ệ ố
ở
ả ậ ượ ẽ ọ
c nhìn
• S c h th ng x y ra t c khi db_pointer đã i th i đi m tr ạ t lên đĩa. Khi đó, khi h th ng kh i c vi c c p nh t đ ế i, nó s đ c db_pointer và nh v y s th y n i dung ư ậ ẽ ấ ị
ộ ượ
ủ
ả
ự ố ệ ố đ ượ ậ đ ng l ạ ộ g c c a CSDL – không hi u qu nào c a giao d ch đ ệ ố ủ th y trên CSDL. ấ
• S c h th ng x y ra sau khi db_pointer đã đ
c c p nh t lên
ả
ự ố ệ ố
ượ ậ
ệ ố
ở ộ
- T T N C a o h K
ẽ ọ ậ
ủ
ự
-
u
ậ i, nó s đ c db_pointer và s đĩa: Khi h th ng kh i đ ng l ạ ẽ t c các c p nh t đã th c hi n th y n i dung c a CSDL sau t ệ ậ ấ ả ộ ấ b i giao d ch. ở
ị
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
26
ị
ầ
ả
ụ
• Vi c ghi db_pointer ph i là nguyên t
. ử ệ ả
Thành ph n qu n tr ph c h iồ đ n gi n ơ
ả
ữ ả ế ả
• S th c thi này c c kỳ thi u hi u qu trong ng c nh CSDL ự ự l n, do s th c hi n m t giao d ch đòi h i ph i sao toàn b ộ ớ CSDL.
• S th c thi này không cho phép các giao d ch th c hi n đ ng
ự ự ự ệ ệ ị ả ộ ỏ
ự ệ ồ ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
27
th i v i các giao d ch khác. ự ự ờ ớ ị
• Các tr ng thái c a giao d ch
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
28
ủ ạ ị
Gi
i thi u v Giao d ch
ớ
ề
ệ
ị
Tr ng thái giao d ch
ạ
ị
• Trên th c t
, m t giao d ch có th không hoàn t t công vi c ể ộ ị ấ ệ
Giao d ch không hoàn thành (Uncommited). ự ế ị
• Tính nguyên t thái CSDL t
ổ ạ ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
29
c rollback. : Giao d ch b b d này không thay đ i tr ng ử t c các thay đ i ph i đ ả ượ ấ ả ị ỏ ở ổ
Tr ng thái giao d ch
ạ
ị
• M t giao d ch hoàn t
t g i là đ ộ ị ấ ọ
c bàn giao (committed) và c th c hi n b ng ượ ổ ượ ệ ằ ự
không th h y b nh ng thay đ i đ ể ủ ỏ ữ committed transaction.
• N u mu n thay đ i: th c hi n giao d ch bù (compensating ệ ị i s d ng.
ế ổ ố
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
30
ự transaction) thu c v ng ộ ề ườ ử ụ
Các tr ng thái c a giao d ch
ủ
ạ
ị
• Ho t đ ng (Active): tr ng thái kh i đ u ở ầ
• Đ c bàn giao b ph n (Partially committed): khi l nh cu i
ạ ộ ạ
ệ ố
• Th t bai (Failed)
ượ cùng đ ộ ậ c th c hi n. ệ ự ượ
• B d (aborted)
ấ
• Đ c bàn giao (Committed): giao d ch thành công.
ỏ ở
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
31
ượ ị
Các tr ng thái c a giao d ch
ủ
ạ
ị
• Giao d ch k t thúc: Committed ho c Aborted.
Committed
Partially Committed
Active
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
Failed
Aborted
32
ế ặ ị
X lý giao d ch đ ng th i ờ ị
ử
ồ
• Khó khăn trong v n đ đ m b o s nh t quán d li u.
• Cách đ n gi n nh t: th c hi n tu n t ấ
ả ự ấ ữ ệ ề ả ấ
• M t giao d ch g m nhi u b
. ầ ự ự ệ ả ơ
•
I/O
• X lý trên CPU
ử
• Tăng hi u su t s d ng CPU và đĩa. ấ ử ụ
c: ề ướ ồ ộ ị
- T T N C a o h K
-
• Tăng s l
ệ
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
ng giao d ch có th x lý trong m t đ n v th i ố ượ ộ ơ ị ờ ể ử ị
33
gian.
X lý giao d ch đ ng th i ờ ị
ử
ồ
• M t s giao d ch khác bi
t v th i gian th c hi n. ộ ố ị ệ ề ờ ự ệ
• Th c hi n tu n t ệ
: ch đ i quá trình dài hoàn t t… ầ ự ự ờ ợ ấ
ề ấ ả
• Đ đ m b o tính nh t quán: h QT CSDL ph i đi u khi n s ể ự ệ trao đ i gi a các giao d ch đ ng th i – s đ đi u khi n c nh tranh (concurrency control scheme)
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
34
ể ả ổ ơ ồ ề ể ạ ả ữ ồ ờ ị
• Khái ni mệ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
35
L ch trình
ị
L ch trình
ị
• Giá tr A, B ban đ u là 1000 và 2000 ầ
• T1: Chuy n 50 t
ị
• Read(A)
• A=A-50
• Write(A)
• Read(B)
- T T N C a o h K
-
• B=B+50
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
• Write(B)
36
tài kho n A sang tài kho n B. ể ừ ả ả
L ch trình
ị
• T2: Chuy n 10% s d t
• Read(A)
• Temp=A*0.1
• A=A-Temp
• Write(A)
• Read(B)
- T T N C a o h K
-
• B=B+Temp
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
• Write(B)
37
tài kho n A sang tài kho n B. ố ư ừ ể ả ả
L ch trình
ị
• Gi T2.
L ch trình 1
ị
• L ch trình 1
s 2 giao d ch này đ c th c hi n theo th t T1 r i đ n ả ử ị ượ ứ ự ự ệ ồ ế
T1
T2
• K t qu : A, B? ả
ị
• A+B tr
ế
Read(A) A=A-50 … Write(B)
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
Read(A) Temp=A*0.1 … Write(B)
38
c và sau gd? ướ
L ch trình
ị
• Gi T1.
• L ch trình?
ng h p giao d ch th c hi n theo th t T2 r i đ n s tr ả ử ườ ứ ự ự ệ ợ ị ồ ế
• K t qu ? ả
ị
• L ch trình
ế
- T T N C a o h K
th i gian các ch th đ ự ờ ị ượ ỉ c th c ự
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
39
hi n trong h th ng. : bi u di n trình t ễ ể ệ ố ị ệ
• L ch trình tu n t
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
40
ầ ự ị
L ch trình
ị
L ch trình tu n t
ầ ự
ị
• Khái ni m: Là l ch trình mà các ch th đ ộ
ự ỉ
ị
ự ị ị
• N giao d ch N! l ch trình tu n t
c th c hi n tu n t ệ ị ầ ự ị ượ ệ t m t giao d ch thì m i chuy n sang th c hi n đ n khi hoàn t ệ ể ớ ấ ế ch th c a giao d ch khác (Không có ch th c a giao d ch khác ị ủ ỉ ị ủ ỉ chen vào).
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
41
h p l khác nhau. ầ ự ợ ệ ị ị
L ch trình có x lý đ ng th i ờ ử
ồ
ị
• Trên th c t v i N! ??? ớ
L ch trình 2
ị
• Ví d :ụ
T1
T2
Read(A) A=A-50 Write(A)
- T T N C a o h K
-
u
Read(A) Temp=A*0.1 A=A-Temp Write(A)
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
Read(B) B=B+50 Write(B)
42
Read(B) …
(ch y đ ng th i): s l ch trình có th nh th nào ể ư ế ố ị ạ ờ ồ ự ế
L ch trình có x lý đ ng th i ờ ử
ồ
ị
• T t c l ch trình có x lý đ ng th i đ u t
• K t qu : A, B? ả
ng đ ng nhau??? ờ ề ươ ấ ả ị ử ồ ươ
L ch trình 3
ị
• Tr
ế
T1
T2
c và sau giao d ch ướ ị
Read(A) A=A-50
• Đ HĐH x lý c nh
A+B?
- T T N C a o h K
-
u
ử ể ạ
Read(A) Temp=A*0.1 A=A-Temp Write(A) Read(B)
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
43
Write(A) Read(B) B=B+50 Write(B)
…
tranh hay không?
L ch trình có x lý đ ng th i ờ ử
ồ
ị
• Nhi m v c a h qu n tr CSDL là đ m b o tính nh t quán
ệ ấ ả ị
• Nhi m v c a thành ph n đi u khi n c nh tranh (concurrency ề
c a CSDL khi x lý giao d ch đ ng th i. ủ ồ ị ụ ủ ệ ả ử ả ờ
ể ạ ụ ủ ệ ầ
control component).
đ m b o l ch ủ ằ
ả ị c th c hi n có hi u qu nh m t l ch trình
• Đ m b o s nh t quán c a CSDL b ng cách ệ
ả ả ư ộ ị ả ự ấ ự ượ ệ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
44
ả trình đ tu n tầ ự.
• Tính kh tu n t
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
45
ả ầ ự
L ch trình
ị
Tính kh tu n t
ả ầ ự
• Tính kh tu n t ả ầ ự là m t l ch trình ộ ị
ng đ (Serializability): M t l ch trình có tính kh ả ộ ị ng ầ ươ v i m t l ch trình tu n ộ ị t ươ ớ
• K t qu t
tu n t ầ ự t nào đó. ự
ng ả ươ ươ (Result Equivalent): phát sinh cùng
- T T N C a o h K
-
• KQ t
tr ng thái cu i c a CSDL. ng đ ố ủ ế ạ
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
ng đ ng là ch a đ đ th hi n s t ng đ ng ươ ư ủ ể ể ệ ự ươ ươ
46
ươ (equivalent) c a 2 l ch trình. ủ ị
ị
ầ ự
L ch trình tu n t ??? L ch trình kh tu n t
ả ầ ự
ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
47
Quy
cướ
• Ch quan tâm thao tác Read và Write trên các d li u.
• Gi a Read(X) và Write(X) s có 1 dãy thao tác tùy ý trên b n ẽ
ữ ệ ỉ
ữ ả
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
48
sao c a h ng m c d li u X trong b nh đ m. ụ ữ ệ ộ ớ ệ ủ ạ
Bi u di n l ch trình ễ ị
ể
L ch trình 3
ị
L ch trình 3’
ị
T1
T1
T2
T2
Read(A) Write(A)
Read(A) A=A-50 Write(A)
Read(A) Write(A)
Read(B) Write(B)
Read(A) Temp=A*0.1 A=A-Temp Write(A)
Read(B) Write(B)
- T T N C a o h K
-
Read(B) B=B+50 Write(B)
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
Read(B) B=B+Temp Write(B)
49
Bi u di n l ch trình ễ ị
ể
L ch trình 3’
ị
T1
T2
• S: R1(A) W1(A) R2(A) W2(A) R1(B) W1(B) R2(B) W2(B)
Read(A) Write(A)
Read(A) Write(A)
Read(B) Write(B)
Read(B) Write(B)
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
50
• Kh tu n t
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
51
ả ầ ự xung đ t ộ
L ch trình
ị
Xung đ tộ
• Xung đ t (Conflict): 2 ch th xung đ t khi ta không th thay ị
ể ộ
th c hi n ộ đ i ổ th t ứ ự ự ỉ ệ c a chúng. ủ
• Xét 2 ch th Ii và Ij c a 2 giao d ch Ti và Tj t ủ
• Ii(X) và Ij(Y): không xung đ t.ộ
• Ii=Read(X) và Ij=Read(X): đ c cùng giá tr X b t k th t
ng ng. ị ỉ ị ươ ứ
- T T N C a o h K
Ii ấ ể ứ ự ọ ị
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
52
và Ij.
Xung đ tộ
• Ii=Read(X) và Ij=Write(X): xung đ t.ộ
• Ii=Write(X) và Ij=Read(X): t
• Ii=Write(X) và Ij=Write(X): th t
ng t ươ . ự
• Read(X) ti p theo sau b nh h
ng
ị ả
ế
ưở
- T T N C a o h K
-
• Ho c Tr ng thái CSDL b nh h
ng.
ị ả
ạ
ặ
ưở
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
53
ứ ự ự th c hi n s liên quan đ n ế ệ ẽ
Xung đ tộ
• V y có th t ng h p l
• 2 ch th trong m t l ch trình g i là xung đ t khi nó th a 3 đi u ọ
ể ổ ợ ạ ậ i nh sau: ư
ộ ị ề ỏ ộ
1.
Thu c v 2 giao d ch khác nhau
ộ ề
ị
2.
Th c hi n trên cùng d li u X
ữ ệ
ự
ệ
3.
Ít nh t m t ch th là Write(X) ỉ
ấ
ộ
ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
54
ị ỉ ki n sau: ệ
Ví dụ
L ch trình 3’
ị
• 1 – 2: Không xét
T1
T2
• 2 – 3: Yes
1.
2.
Read(A) Write(A)
• 4 – 5: No
3.
4.
Read(A) Write(A)
• 6 – 7: Yes
5.
6.
Read(B) Write(B)
7.
8.
Read(B) Write(B)
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
55
T
ng đ
ươ
ươ
ng xung đ t ộ
• 2 l ch trình g i là t
ị ươ
ề ặ ị ộ ố ỉ
• VD: S1: R1(X), W2(X) và S2: W2(X), R1(X): không t
ng v m t xung đ t (conflict ng đ ươ ọ c a 2 ch th xung đ t gi ng nhau trong equivalent) n u th t ộ ứ ự ủ ế c 2 l ch trình. ị ả
ng ươ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
56
đ ng xung đ t. ươ ộ
Kh tu n t
ả ầ ự
xung đ t ộ
ộ ị ọ
• M t l ch trình S g i là kh tu n t ế
ng đ ả ầ ự ươ xung đ t (conflict ộ ng xung đ t v i 1 l ch trình ộ ớ ươ ị
serializable) n u nó t tu n t S’ nào đó. ầ ự
ị
• Khi đó ta có th thay đ i th t ể ế
ứ ự ỉ c m t l ch trình tu n t S’ t các ch th không xung đ t ộ ng ươ ầ ự ộ ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
57
ng S. ổ trong S cho đ n khi ta đ ượ đ ươ
Chú ý
L ch trình 5
ị
• A=1000, B=2000
T1
T3
• Xét T2 là giao d ch chuy n 10 t
B sang ể ị ừ
Read(A) A=A-50 Write(A)
• K t qu A, B?
A.
• L ch trình 5 có kh tu n t
ế ả
Read(B) B=B-10 Write(B)
ả ầ ự ị xung đ t hay ộ
- T T N C a o h K
Read(B) B=B+50 Write(B)
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
Read(A) A=A+10 Write(A)
58
không?
xung
ả ầ ự
Ki m tra kh tu n t ể đ tộ
• Xây d ng m t đ th có h
ự ướ ự
• G=(N, E):
• N={T1, T2, … , Tn}
• E là t p h p các cung. ợ
ậ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
59
ộ ồ ị (precedence graph) t ọ l ch trình S c n ki m tra. ầ ng, g i là đ th trình t ồ ị ể ừ ị
xung
ả ầ ự
Ki m tra kh tu n t ể đ tộ
• T o 1 cung Ti Tj khi:
• Ti th c hi n Write(X) sau đó Tj th c hi n Read(X).
ự
ự
ệ
ệ
• Ti th c hi n Read(X) sau đó Tj th c hi n Write(X).
ự
ự
ệ
ệ
• Ti th c hi n Write(X) sau đó Tj th c hi n Write(X).
ự
ự
ệ
ệ
• L ch trình S là kh tu n t
ạ
• Chu trình?
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
60
xung đ t n u G không có chu trình. ả ầ ự ị ộ ế
Th t
kh tu n t
ứ ự
ả ầ ự
• Th t
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
61
c thông qua Topological sorting. ứ ự có th có đ ể ượ
Ví dụ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
62
Ví dụ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
63
Ứ
ng d ng c a kh tu n t ủ
ả ầ ự
ụ
• Trên th c t
• N u giao d ch đ
, khó ki m tra tính kh tu n t c a l ch trình. ự ế ả ầ ự ủ ị ể
ị
ệ ượ c ki m tra tính kh tu n t c th c hi n sau đó k t qu c a l ch trình ế , khi đó ta ph i h y b l ch ả ủ ị ả ủ ỏ ị ể
• Khi giao d ch đ
ế đ ượ trình n u nó không th a Không th c t ự ả ầ ự ỏ . ự ế ế
ụ ấ ể ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
64
trình b t đ u và k t thúc. ị ắ ầ c g i liên t c, r t khó ki m soát khi nào l ch ượ ử ế
• M t s bài t p ậ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
65
ộ ố
L ch trình
ị
Ví dụ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
66
Ví dụ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
67
1 s bài t p
ậ
ố
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
68
1 s bài t p
ậ
ố
• Cho đ th trình t ồ ị l ch trình S: ị
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
• L ch trình nào t
c a c a ự ủ ủ
ng ươ
69
đ ị ươ ng v i S: ớ
• Kh tu n t
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
70
view ả ầ ự
L ch trình
ị
T
ng đ
ng view
ươ
ươ
c g i là t ng đ ng view (view ị ượ ọ ươ ươ
• 2 l ch trình S và S’ đ ỏ
• Có cùng t p h p các giao d ch. ợ
ậ
ị
• V i m i d li u X, n u Ti th c hi n Read(X) trong S và giá tr ị ự
ế
ệ
ỗ ữ ệ c sinh ra b i giao d ch Tj thì Ti cũng ph i đ c giá tr X
ả ọ
ị
ị
ở ượ c sinh ra b i Tj trong S’.
ở
ớ X đ đ ượ
• V i m i d li u X, giao d ch th c hi n Write(X) sau cùng trong
ớ
ự
ệ
- T T N C a o h K
ị S cũng ph i th c hi n Write(X) cu i cùng trong S’.
ỗ ữ ệ ự ả
ệ
ố
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
71
equivalent) n u th a: ế
T
ng đ
ng view
ươ
ươ
• Các đi u ki n đ m b o: ệ
• M i giao d ch đ c cùng m t giá tr trong c 2 l ch trình. ộ
ả
ỗ
ọ
ị
ị
ị
• C 2 l ch trình cho ra k t qu tr ng thái h th ng nh nhau.
ệ ố
ả ạ
ư
ế
ả
ị
• Ngoài ra còn 1 s lo i t
ề ả ả
ng đ ng khác do các ng d ng ố ạ ươ ươ ứ ụ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
72
khác nhau đ a ra. ư
Kh tu n t
view
ả ầ ự
ọ ị
• Kh tu n t ả ầ ự tu n t ầ ự .ự t
L ch trình S
ị
T1
T2
T3
Read(Q) Write(Q)
Write(Q)
Write(Q)
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
73
ng đ view (view serializable): 1 l ch trình g i là kh ả ng view v i 1 l ch trình tu n ầ ị view n u nó t ế ươ ươ ớ
Kh tu n t
view
ả ầ ự
• L ch trình kh tu n t
• L ch trình kh tu n t
xung đ t là kh tu n t view. ả ầ ự ị ả ầ ự ộ
xung ể không kh tu n t ả ầ ự
• Write mù: th c hi n ho t đ ng write mà không th c hi n read.
view có th ị ả ầ ự đ t Do các write mù (blind write). ộ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
74
ạ ộ ự ự ệ ệ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
75
Giao d ch trong SQL
ị
Giao d ch trong SQL
ị
• Chu n SQL đ c t ẩ ng minh.
s b t đ u c a giao d ch m t cách không ặ ả ự ắ ầ ủ ộ ị
• Giao d ch đ
t ườ
• Commit tran
• Rollback tran
• Cho phép đ nh nghĩa giao d ch đ
ị ượ ế c k t thúc b i m t trong 2 l nh: ộ ệ ở
c th c hi n không kh tu n ị ị ượ ả ầ ự ệ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
76
.ự t
Các d ng read trong SQL
ạ
• Dirty read: Giao d ch T1 đ
ị ọ
c committed. N u T2 b h y b , giá tr đ c đ c c phép đ c nh ng thay đ i c a ổ ủ ữ ị ọ ượ ị ủ ỏ ượ ế
i và không chính xác. T2 ch a đ ư ượ c a T1 không t n t ủ ồ ạ
ọ
• Non-repeatable read: Giao d ch T1 đ c 1 giá tr t có giao d ch T2 thay đ i giá tr đó và T1 đ c l ổ giá tr đ
ị ừ ả ế i, T1 s th y ọ ạ ị ị b ng, n u ẽ ấ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
77
c c p nh t. ị ị ượ ậ ậ
Các d ng read trong SQL
ạ
ị ọ ố ự ả
ệ ị
ả ớ
• Phantoms: Giao d ch T1 đ c 1 s dòng trong b ng d a trên 1 s đi u ki n Where nào đó. Khi đó 1 giao d ch T2 khác thêm 1 ố ề dòng m i th a mãn đi u ki n Where c a T1 vào b ng đó. ỏ N u T1 đ c l ọ ạ – 1 dòng m i đ
ế
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
78
ủ i giá tr c a b ng s th y 1 bóng ma (phantom) ẽ ấ c đó ch a xu t hi n. ề ệ ị ủ ả c thêm vào, tr ớ ượ ướ ư ệ ấ
ứ
Các m c nh t quán trong ấ SQL
• Serializable: m c đ nh, v i nghĩa không cho phép:
• Dirty read
• Non-repeatable read
• Phantoms
• Repeatable read: cho phép Phantoms
• Read committed: ch không cho phép Dirty read.
ặ ị ớ
- T T N C a o h K
-
• Read uncommitted: cho phép t
ỉ
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
79
t c . ấ ả
ứ
Các m c nh t quán trong ấ SQL
Isolation level
Dirty Reads
Non-repeatable reads Phantom reads
Concurrency control
Yes
Yes
Yes
Pessimistic
READ UNCOMMITTED
No
Yes
Yes
Pessimistic
READ COMMITTED (with locking)
No
Yes
Yes
Optimistic
READ COMMITTED (with snapshot)
- T T N C a o h K
-
u
No
No
Yes
Pessimistic
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
REPEATABLE READ
SNAPSHOT
No
No
No
Optimistic
80
SERIALIZABLE
No
No
No
Pessimistic
Cú pháp SQL
• BEGIN { TRAN | TRANSACTION }
• [ { transaction_name | @tran_name_variable }
• [ WITH MARK [ 'description' ] ]
• ]
• [ ; ]
- T T N C a o h K
-
u
• WITH MARK: ch đ nh giao tác s đ ỉ
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
81
• VD:
• BEGIN TRAN T1
ẽ ượ ị c đánh d u trong log ấ
Cú pháp SQL
• BEGIN TRAN T2
• SELECT * FROM NHANVIEN
• COMMIT TRAN
• L nh xem thông tin v thi
t l p hi n t i trên SQL: ệ ề ế ậ ệ ạ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
82
DBCC USEROPTIONS
READ UNCOMMITED
• Cho phép đ c c d li u đang trong x lý
m t giao tác ch a ử ở ộ ư
• Đây là m c th p nh t, cho phép c 3 ki u đ c d li u.
ọ ả ữ ệ t khác (uncommited) hoàn t ấ
• Cú pháp SQL:
• SET TRANSACTION ISOLATION LEVEL READ
ọ ữ ệ ứ ể ả ấ ấ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
83
UNCOMMITTED
READ UNCOMMITED
• BEGIN TRAN T1
• BEGIN TRAN T2
• SELECT * FROM
• INSERT INTO
• COMMIT TRAN
NHANVIEN
• WAITFOR DELAY
NHANVIEN VALUES ('NV10','A','B','C','1999-1- 22','SU VAN HANH','NAM',88888,'P1')
- T T N C a o h K
-
u
• ROLLBACK TRAN T1
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
84
'00:00:10'
READ COMMITED
• M c đ nh c a SQL Server. ủ
ặ ị
• Ch đ c các d li u đã x lý hoàn t ữ ệ
• Do c ch lock c a SQL Server.
t (commited) ỉ ọ ử ấ
• Cú pháp SQL:
• SET TRANSACTION ISOLATION LEVEL READ
ơ ế ủ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
85
COMMITTED
REPEATABLE READ
• Tình hu ng trong khi đang truy xu t d li u l
ự ậ
ấ ữ ệ ạ m t giao tác khác d n đ n s không nh t ế ự ẫ i có s c p ấ ở ộ ậ ữ ệ
• Do đó c n đ n REPEATABLE READ
ố nh t d li u đó quán v d li u. ề ữ ệ
• Cú pháp:
• SET TRANSACTION ISOLATION LEVEL REPEATABLE
ế ầ
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
86
READ
REPEATABLE READ
• BEGIN TRAN
• SET TRANSACTION ISOLATION LEVEL READ COMMITTED
• UPDATE NHANVIEN SET
SHORTUPDATE
• SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
• COMMIT TRAN SHORTUPDATE
• GO
- T T N C a o h K
• DBCC USEROPTIONS
-
u
ệ
i
• INSERT INTO
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
87
• BEGIN TRAN REPEATREAD
HONV='A' WHERE MANV='NV10'
• SELECT * FROM
NHANVIEN VALUES ('NV10','A','B','C','1999-1- 22','SU VAN HANH','NAM',88888,'P1')
• DELETE FROM
NHANVIEN
• WAITFOR DELAY
NHANVIEN WHERE
• SELECT * FROM
MANV='NV10' '00:00:05'
• COMMIT TRAN
NHANVIEN
REPEATREAD
• SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
• SET TRANSACTION ISOLATION LEVEL READ
• SET TRANSACTION ISOLATION LEVEL READ
UNCOMMITTED
• SET TRANSACTION ISOLATION LEVEL REPEATABLE
COMMITTED
- T T N C a o h K
-
u
ệ
i
U G S
ữ d ở s ơ c ị r t n ả u q ệ H
l
88
READ