You are on page 1of 109

IS210 – Chương 3

Quản lý giao tác


Transaction Management

Trương Thu Thủy


Nội dung
• Giới thiệu
• Giao tác
• Định nghĩa
• Các thao tác trong giao tác
• Tính chất ACID của giao tác
• Trạng thái của giao tác
• Bộ lập lịch
• Định nghĩa
• Lịch tuần tự (serial schedule)
• Lịch khả tuần tự (serializable schedule)
• Conflict-Serializable
• View-Serializable

2
Giao tác

3
Giới thiệu giao tác (transaction)
• Hai yêu cầu cơ bản của ứng dụng khai thác CSDL trong thực tế:
• Cho phép nhiều người dùng đồng thời khai thác CSDL nhưng phải giải quyết
được các tranh chấp.
• Khi có sự cố phải giải quyết được vấn đề về nhất quán dữ liệu.
• Một số ví dụ:
• Hệ thống giao dịch ở ngân hàng
• Hệ thống đặt vé máy bay
• Hệ thống quản lý học sinh
• …

4
Ví dụ 1
• Hệ thống đặt vé máy bay
• Hàng trăm hoạt động mỗi giây có thể được thực hiện trong cơ sở dữ liệu
• Hoạt động đặt vé đến từ nhiều nguồn
• Các máy giao dịch tự động
• Các máy tính bàn của đại lý
• Nhân viên hàng không
• Khách hàng
• Hai hoạt động đặt vé nào đó có thể tác động lên cùng chuyến bay và chồng
chéo về thời gian.

5
Ví dụ 1
• Hệ thống đặt vé máy bay
Khách hàng 1 Khách hàng 2

Tìm một chỗ trống


Thời gian
Hoạt động chồng chéo
Tìm một chỗ trống
Đặt vé máy bay
Đặt vé máy bay
Hai khách hàng đang đặt cùng một ghế trống???
Ghế được sở hữu bởi 2 khách hàng -> Không được

6
Ví dụ 1
• Điều gì xảy ra nếu dữ liệu không được ràng buộc?
• Hai thao tác có thể được thực hiện thành công
• Nhưng kết quả toàn cục sẽ không chính xác
• Cả hai khách hàng tin rằng họ đã đặt ghế thành công
• DBMS là một hệ thống đa người dùng
• Có nhiều thao tác truy cập đến cùng một đơn vị dữ liệu tại một thời điểm
• Nhiều thao tác được thực hiện đồng thời Đảm bảo ràng buộc
• Để giải quyết vấn đề: tuần tự (serialize) thực hiện hai giao dịch
Đợi nhau -> Không gặp vấn đề dữ liệu -> Vấn đề chọn, xếp hàng -> tốn thời gian , không sử dụng hết băng
thông

7
Tính khả tuần tự (Serializability)
• Việc thực hiện các hành động trên cùng một cơ sở dữ liệu là tuần tự
(serial)
• Nếu một hoạt động phải kết thúc hoàn toàn trước khi một hoạt động khác được
bắt đầu.
• Việc thực thi là khả tuần tự (serializable)
• Nếu các hành động thực hiện như thể chúng được chạy nối tiếp mặc dù có sự
chồng lấp về mặt thời gian.
VD: Chưa xong 1 cái mà đã thực hiện cái tiếp theo, mong muốn kết quả vẫn như thực hiện tuần tự -> Khả tuần tự

8
Thảo luận
• Nếu hai hành động được thực hiện tuần tự
• Yêu cầu của một khách hàng xảy ra trước
• Khách hàng này thấy một ghế trống và đặt chỗ cho ghế này
• Yêu cầu của khách hàng khác bắt đầu, và nhìn thấy ghế đã được đặt
• Điều quan trọng
• Khách hàng: người có được chỗ
• Cơ sở dữ liệu: một ghế chỉ được đặt một lần

9
Ví dụ 2

• Hệ thống giao dịch ngân hàng


• Chuyển tiền từ A đến B

Tài khoản A Tài khoản B

1. Đọc số dư của tài khoản A

2. Kiểm tra (số dư của A >= số tiền cần rút)

3. Cộng tiền vào tài khoản B Sự cố


Phương thức
không thể tách rời
automic
4. Trừ tiền từ tài khoản A Ngân hàng chịu lỗ 1 khoản tiền ?

10
Thảo luận
• Giải pháp: thao tác ở bước thứ 3 và 4 trong giao dịch trên không thể
tách rời
• Hoặc cả hai thao tác được thực hiện và hoàn tất
• Hoặc không thao tác nào được thực hiện
• Nếu thao tác ở bước 3 đã xong và thao tác ở 1. Đọc số dư của tài khoản A
bước 4 bị lỗi thì thao tác ở bước 3 phải hủy bỏ
• Sự kết hợp ở bước thứ 3 và 4 cần phải 2. Kiểm tra (số dư của A >= số tiền cần rút)

đảm bảo được tính nguyên tố (atomic) 3. Cộng tiền vào tài khoản B

4. Trừ tiền từ tài khoản A

11
Tính nguyên tố
Các thao tác phải được thực hiện thành công hết hoặc thất bại hết

Tài khoản A Tài khoản B

1. Đọc số dư của tài khoản A

2. Kiểm tra (số dư của A >= số tiền cần rút)

3. Cộng tiền vào tài khoản B

4. Trừ tiền từ tài khoản A

Atomic 12
Thảo luận
• Làm thế nào để giải quyết vấn đề về tuần tự hóa (serialization) và tính
nguyên tố (atomicity)?
• Giải pháp
• Gom nhóm những hành động (operation) vào trong các giao tác (transaction)

13
Giao tác (transaction)

14
Định nghĩa
không phân chia nhỏ được nữa
• Giao tác: là một đơn vị xử lý nguyên tố gồm một chuỗi các hành
động tương tác lên cơ sở dữ liệu
• Nguyên tố: không thể phân chia được nữa. Các hành động trong một giao tác
hoặc là thực hiện được tất cả hoặc là không thực hiện được bất cứ hành động
nào.

15
Các thao tác của giao tác
• Buffer manager
• Input & Output
• Transaction
• Read & Write Read(X,t)
Đưa dữ liệu từ ổ đĩa vào buffer

Input(X)
t X

Write(X,t) X
Output(X)
Ghi vào ổ đĩa

Buffer
16
Ví dụ
• Giả sử cơ sở dữ liệu có 2 đơn vị dữ liệu A và B với ràng buộc A=B
(trong mọi trường hợp)
• Giao tác T muốn thực hiện
• A = A*2
• B = B*2
• T được biểu diễn như sau:
• Read(A,t); t=t*2; Write(A,t)
• Read(B,t); t=t*2; Write(B,t)

17
Ví dụ (tt)
Đưa vào mem A, xong gán t = 8

Read(A,t) 8 8 8 8
t=t*2 16 8 8 8
Write(A,t) 16 16 8 8
Read(B,t) 8 16 8 8 8
t=t*2 16 16 8 8 8
Write(B,t) 16 16 16 8 8
Output(A) 16 16 16 16 8
Output(B) 16 16 16 16 16

18
Tính chất ACID của giao tác
• Nguyên tố (Atomicity)
• Nhất quán (Consistency)
• Cô lập (Isolation)
• Bền vững (Durability)

19
Tính chất ACID của giao tác
• Nguyên tố (Atomicity) T: Read(A,t); Chuyển khoản từ A sang B
• Hoặc là toàn bộ hoạt động t:=t-50;
của giao tác được phản ánh Write(A,t);
Read(B,t);
đúng đắn trong CSDL t:=t+50;
• Hoặc không có hoạt động nào cả Write(B,t);

• Nhất quán (Consistency) • A=100, B=200 (A+B=300)


• Tại thời điểm sau khi write(A,t)
• Cô lập (Isolation)  A=50, B=200 (A+B=250) - CSDL không nhất quán do chưa
• Tại thời điểm sau khi write(B,t) thực hiện
• Bền vững (Durability)  A=50, B=250 (A+B=300) - CSDL nhất quán
xong

• Nếu T không bao giờ bắt đầu thực hiện hoặc T được đảm
bảo phải hoàn tất thì trạng thái không nhất quán sẽ không
xuất hiện

20
Tính chất ACID của giao tác
• Nguyên tố (Atomicity)
• Nhất quán (Consistency) T: Read(A,t);
t:=t-50;
• Một giao tác được thực hiện Write(A,t);
độc lập với các giao tác khác Read(B,t);
t:=t+50;
xử lý đồng thời với nó để bảo Write(B,t);
đảm tính nhất quán cho CSDL
• Tổng A+B là không đổi sau khi thực thi T
• Cô lập (Isolation) • Nếu CSDL nhất quán trước khi T được thực hiện thì sau
khi T hoàn tất CSDL vẫn còn nhất quán
• Bền vững (Durability)
Chuyển đổi từ tình trạng nhất quán này sang tình trạng nhất quán khác

21
Tính chất ACID của giao tác
• Nguyên tố (Atomicity)
• Nhất quán (Consistency) T: Read(A,t);
t:=t-50;
• Cô lập (Isolation) T' Write(A,t);
Read(B,t);
• Mỗi giao tác không biết về các t:=t+50;
giao tác khác đang thực hiện Write(B,t);
đồng thời trong hệ thống
• Giả sử có 1 giao tác T' thực hiện phép toán A+B và chen
• Bền vững (Durability) vào giữa thời gian thực hiện của T
• T' kết thúc: A+B=50+200=250
• T kết thúc: A+B=50+250=300
• Trạng thái của các giao tác thực thi đồng thời phải tương
đương với trạng thái của các giao tác thực hiện tuần tự
nào đó
Bộ trung gian điều tiết, không liên quan tới các giao tác khác
22
Tính chất ACID của giao tác
• Nguyên tố (Atomicity)
• Nhất quán (Consistency)
• Cô lập (Isolation)
• Bền vững (Durability)
• Sau khi một giao tác thực hiện thành công, những thay đổi mà giao tác này đã
thực hiện đối với cơ sở dữ liệu vẫn tồn tại, ngay cả khi có lỗi hệ thống xảy ra
Database bị lỗi -> Dữ liệu vẫn tồn tại

23
Trạng thái của giao tác
thực hiện xong mà vẫn chưa
commit mà bị lỗi thì vẫn bị hủy
bỏ

partially
committed
committed

active

failed aborted hủy bỏ

24
Trạng thái của giao tác
Một giao tác phải thuộc một trong các trạng thái sau:
• Active
• Ngay khi bắt đầu thực hiện thao tác đọc/ghi
• Partially committed
• Sau khi lệnh cuối cùng của giao tác được thực hiện
• Failed
• Sau khi phát hiện giao tác không thể thực hiện tiếp
• Aborted
• Sau khi giao tác được quay lui và CSDL được phục hồi về trạng thái bắt đầu của giao
tác
• Bắt đầu lại giao tác (nếu có thể)
• Hủy giao tác
• Committed
• Hoàn tất thành công

25
Bộ lập lịch

26
Giới thiệu
• Thực hiện tuần tự (Serial)
• Các thao tác khi thực hiện mà không giao nhau về mặt thời gian
• Tại một thời điểm, một giao tác chỉ có thể bắt đầu khi giao tác trước nó hoàn
tất.
• Thực hiện đồng thời (Concurrence)
• Các giao tác thực hiện cùng lúc
• Các giao tác có thể truy xuất cùng một dữ liệu

27
Tại sao phải kiểm soát việc thực hiện đồng thời
• Tận dụng nguồn tài nguyên và thông lượng (throughput)
• Xử lý trên ổ đĩa và trên CPU có thể được thực hiện song song
• Trong lúc một giao tác thực hiện đọc/ghi trên ổ đĩa, các giao tác khác thực hiện
tính toán trên CPU
• Giảm thời gian chờ
• Giảm thiểu các giao tác ngắn phải chờ đợi các giao tác dài
• Khi các giao tác truy cập đến dữ liệu khác nhau chúng cần phải được thực hiện
đồng thời

28
Kiểm soát đồng thời (Concurrency control)
• Là quá trình đảm bảo rằng các giao tác duy trì tính nhất quán khi thực
hiện đồng thời
• Các giao tác
• Nhiều hành động (action) được gom lại trong một giao tác
• Tính chính xác của trạng thái cơ sở dữ liệu
• Chuyển từ trạng thái nhất quán này sang trạng thái nhất quán khác

29
Bộ lập lịch (Scheduler)
• Là một thành phần của DBMS có nhiệm vụ tạo một lịch thao tác để
thực hiện n giao tác xử lý đồng thời
• Chức năng
• Đọc/ghi những yêu cầu từ các giao tác
• Thực thi các yêu cầu ở buffer hoặc trì hoãn thực hiện các yêu cầu

30
Lịch thao tác (Schedule)
• Một lịch thao tác là một chuỗi các hành động được sắp xếp theo thời
gian của một hoặc nhiều giao tác
• Các hành động của một giao tác trong lịch phải giống như thứ tự mà chúng
xuất hiện trong chính giao tác đó
lịch tuần tự Kết quả tương đương với lịch tuần tự
1
a
2
b a
1 x 1
a x
2 2
y y
3
3 b b
z 4
x z
4
y 3

z 4 31
Lịch thao tác (Schedule)
• Các loại lịch thao tác:
• Lịch tuần tự (Serial)
• Lịch khả tuần tự (Serializable)
• Conflict-Serializability
• View-Serializability

32
Ví dụ
• Cho 2 giao tác T1 và T2 như sau:
T1 T2
Read(A,t) Read(A,s)
t:=t+100 s:=s*2
Write(A,t) Write(A,s)
Read(B,t) Read(B,s)
t:=t+100 s:=s*2
Write(B,t) Write(B,s)

• Giả sử ràng buộc nhất quán trên CSDL là A=B


• Từng giao tác thực hiện riêng lẻ thì tính nhất quán sẽ được bảo toàn

33
Lịch tuần tự (Serial schedule)
• Một lịch S được gọi là tuần tự nếu các hành động của các giao tác
Ti được thực hiện liên tiếp nhau, không có sự giao nhau về mặt
thời gian.

S T1

T2

Thời gian T3

………

Tn
34
Ví dụ - Lịch tuần tự
S1 T1 T2 A B S2 T1 T2 A B
Read(A,t) 25 25 Read(A,s) 25 25
t:=t+100 s:=s*2
Write(A,t) 125 Write(A,s) 50
Read(B,t) Read(B,s)
t:=t+100 s:=s*2
Write(B,t) 125 Write(B,s) 50
Read(A,s) Read(A,t)
s:=s*2 t:=t+100
Write(A,s) 250 Write(A,t) 150
Read(B,s) Read(B,t)
s:=s*2 t:=t+100
Write(B,s) 250 Write(B,t) 150
Còn lịch nào khác cũng đảm bảo duy trì tính nhất quán không? 35
Lịch khả tuần tự (Serializable schedule)
• Một lịch S được lập từ n giao tác T1, T2, …, Tn xử lý đồng thời được
gọi là lịch khả tuần tự nếu nó cho cùng kết quả với 1 lịch tuần tự nào
đó được lập từ n giao tác này

T1

T2

T3
Thời gian

T4

36
Ví dụ
S3 T1 T2 A B
25 25
• Trước khi S3 thực hiện
Read(A,t)
• A=B=c
t:=t+100
Write(A,t) 125
• c là hằng số
Read(A,s) • Sau khi S3 hoàn tất
s:=s*2 • A=(c+100)*2
Write(A,s) 250 • B=(c+100)*2
Read(B,t)
t:=t+100
• CSDL ở trạng thái nhất quán
Write(B,t) 125 • S3 khả tuần tự
Read(B,s)
s:=s*2
Write(B,s) 250 37
Ví dụ
S4 T1 T2 A B
25 25
• Trước khi S4 thực hiện
Read(A,t)
• A=B=c
t:=t+100
Write(A,t) 125
• c là hằng số
Read(A,s) • Sau khi S4 hoàn tất
s:=s*2 • A=(c+100)*2
Write(A,s) 250 • B=(c*2)+100
Read(B,s)
s:=s*2
• CSDL ở trạng thái không nhất
Write(B,s) 50
quán
Read(B,t) • S4 không khả tuần tự
t:=t+100
Write(B,t) 150 38
Ví dụ
S5 T1 T2 A B
25 25
• Sau khi S5 hoàn tất
Read(A,t)
• A và B bằng nhau
t:=t+100
Write(A,t) 125 • CSDL ở trạng thái nhất quán
Read(A,s) • S5 khả tuần tự, do kết quả giống
s:=s*1 với lịch tuần tự (T1, T2) hoặc (T2,
Write(A,s) 125 T1)
Read(B,s)

s:=s*1 Không cần quan tâm *1 hay *2 (chi tiết thực hiện bên trong) , chỉ cần quan tâm
đọc ghi -> Không khả tuần tự
Write(B,s) 50
Read(B,t)
t:=t+100
39
Write(B,t) 125
Thảo luận
• Thật là phi thực tế khi
• Một bộ lập lịch phải quan tâm đến chi tiết tính toán được thực hiện bởi các
giao tác
• Nhưng
• Bộ lập lịch phải biết các thao tác đọc/ghi của giao tác
• Những đơn vị dữ liệu nào được giao tác đọc
• Những đơn vị dữ liệu nào có thể bị thay đổi
• Để đơn giản công việc cho bộ lập lịch
• Không cần xem xét chi tiết các hành động tính toán cục bộ
• Chỉ cần thể hiện đọc/ghi được thực hiện bởi giao tác

40
Ký hiệu
• Hành động đọc và ghi
• ri(X) hoặc wi(X)
• Giao tác Ti đọc hoặc ghi đơn vị dữ liệu X Không quan tâm đến đọc ghi giá trị gì

• Giao tác Ti
• Là một chuỗi các hành động có chỉ số i
• Bộ lập lịch S của tập giao tác T
• Là sự xen kẽ các hành động của giao tác Ti trong T sao cho
• Các hành động của Ti xuất hiện trong S phải có cùng thứ tự với các hành động ở trong Ti

41
Ví dụ
• T1: r1(A);w1(A);r1(B);w1(B);
• T2: r2(A);w2(A);r2(B);w2(B);

S T1 T2
r(A)
w(A)
r(A)
w(A) S: r1(A);w1(A);r2(A);w2(A);r1(B);w1(B);r2(B);w2(B);
r(B)
w(B)
r(B)
w(B)

42
Xung đột (conflict)-không xung đột (not conflict)
• Ý tưởng: xét hai hành động nối tiếp trong lịch giao tác (của hai giao
tác khác nhau). Khi hoán đổi (swap) vị trí của hai hành động đó dẫn
đến một trong hai hệ quả:
• Nếu hoạt động của cả hai giao tác T T'

không bị ảnh hưởng  hai hành động Hành động 1


Hành động 2 Xung đột?
đó không xung đột với nhau
Hành động 1'
• Nếu hoạt động của ít nhất một trong
Hành động 2' Không xung đột?
hai giao tác đó bị ảnh hưởng  hai
Hành động 3
hành động xung đột
Hành động 4
Hành động 3'
Hành động 4'

43
Xung đột (conflict)-không xung đột (not conflict)
• Cho lịch S gồm 2 giao tác Ti và Tj ,i≠j. Xét các trường hợp
• ri(X) ; rj(Y)
• Không bao giờ có xung đột, ngay cả khi X=Y
• Hai hành động này không làm thay đổi giá trị của X và Y
• ri(X) ; wj(Y) read , write
• Không xung đột khi X#Y
 Tj ghi Y không làm thay đổi dữ liệu Ti đọc X
 Ti đọc X không ảnh hưởng đến giá trị Tj ghi Y
• Xung đột khi X=Y Cùng 1 block
• wi(X) ; rj(Y) write read
• Không xung đột khi X#Y, Xung đột khi X=Y
• wi(X) ; wj(Y) write write

• Không xung đột khi X#Y, Xung đột khi X=Y


44
Xung đột (conflict)
• Hai hành động trong 1 lịch S gọi là xung đột nếu thỏa 3 điều kiện:
• Thuộc hai giao tác khác nhau
• Truy xuất đến cùng một đơn vị dữ liệu
• Có ít nhất một hành động ghi (write)
Không thể hoán đổi thứ tự
Lập lịch cho giao tác
S1 Ti Tj S2 Ti Tj S3 Ti Tj
Write (X) Read (X) Write (X)
Write(X) Write(X) Read(X)

S1: wi (X); wj(X) S2: ri (X); wj(X) S3: wi (X); rj(X)

45
Ví dụ
• Hoán đổi mà trên cùng đơn vị dữ liệu mà có write -> Xung đột

S T1 T2 T1 T2 S' T1 T2

Read(A) Read(A) Read(A)

Write(A) Write(A) Write(A)

Read(A) Read(A) Read(B)

Write(A) Write(A) Write(B)


Hoán đổi được
Read(B) Read(B) Read(A)

Write(B) Write(A)
Write(B)
Read(B) Read(B) Read(B)

Write(B) Write(B)
Write(B) 46
Conflict-equivalence - Conflict-serializability
• Định nghĩa:
• S và S' được gọi là conflict-equivalent Bước hoán đổi mà không xung đột -> Được equivalent với cái trước đó.

• Nếu S và S' có thể được biến đổi qua lại bằng cách hoán đổi các hành động liền kề không
xung đột nhau.
• S được gọi là conflict-serializable
• Nếu S conflict-equivalent với một lịch tuần tự nào đó Qua từng bước biến đổi equivalent cho ra được lịch tuần tự
-> Lịch đó gọi là confliect serializable

• Chú ý:
• Conflict-serializability → serializability
• Conflict-serializability ↚ serializability

VD: điểm lên lớp >5

Điểm >8 -> Lên lớp


Lên lớp không -> >8
47
Ví dụ
• Cho lịch S sau: T1 T2

• S: r1(A); w1(A);r2(A);w2(A);r1(B);w1(B);r2(B);w2(B); Read(A)

• Tuần tự các bước hoán đổi để đưa S về khả tuần tự Write(A)


• S: r1(A); w1(A); r2(A); w2(A); r1(B); w1(B); r2(B); w2(B);
Read(A)
• S1: r1(A); w1(A); r2(A); r1(B); w2(A); w1(B); r2(B); w2(B);
• S2: r1(A); w1(A); r1(B); r2(A); w2(A); w1(B); r2(B); w2(B); Write(A)
• S3: r1(A); w1(A); r1(B); r2(A); w1(B); w2(A); r2(B); w2(B); Read(B)
• S4: r1(A); w1(A); r1(B); w1(B); r2(A); w2(A); r2(B); w2(B);
Write(B)
Read(B)

Write(B)

48
Ví dụ
• Lịch sau có conflict-serializable không?
Có hành động ghi -> sẽ có xung đột

S1 T1 T2 S2 T1 T2 S3 T1 T2
Read(A) Read(A) Read(A)
Read(A) Read(A) Read(A)
Read(A) Write(A) Write(B)
Write(A) Read(A) Write(B)
S1 khả tuần tự theo dạng conflict S3 khả tuần tự

Có thể không conflict ser...


Áp dụng luật hoán đổi để xem có khả tuần tự không Sử dụng thay đổi-> conflict qeuivalent
Lịch phải chạy tuần tự, giao tác
Sau khi hoán đổi thì ra lịch tuần tự đan xen

Biến đổi ra được lịch tuần tự -> ser... T1 thực hiện xong mới tới T2 thực hiện -> Tuần tự
49
Ví dụ
• Cho 2 giao tác T1:Write(Y); Read(X);
Kiểm tra ghi cuối cùng và đọc cuối cùng
T2:Write(Y); Write(Y);

• Từ hai giao tác trên, có thể lập được 2 lịch S và S' như sau
S T1 T2 S’ T1 T2
Write(Y)y = 8 Write(Y)
KQ cuối cùng X dược đọc Kết quả cuối cùng tương
của T1 Read(X) Write(Y) tự S
y=7
Write(Y) Write(Y)
Write(Y) Kết quả cuối cùng là w(Y) của T2 Read(X)
y=6

Serial Serializable Khả tuần tự: Kết quả lịch này bằng kết
Tuần tự quả lịch tuần tự nào đó
nhưng không conflict-serializable
50
Ví dụ
• Cho 3 giao tác:
• T1: Write(Y); Write(X); T2: Write(Y); Write(X); T3: Write(X)
Từ 3 giao tác trên, có thể có 2 lịch S và S' như sau
S T1 T2 T3 S’ T1 T2 T3
Write(Y) Write(Y)
Write(X) Write(Y)
Write(Y) Write(X)
Write(X) Write(X)
Write(X) Write(X)
Serial
Serializable
nhưng không conflict-serializable
Conflict-serializability ↚ serializability 51
Kiểm tra Conflict Serializability
• Cho lịch S: hỏi S có conflict-serializable không?
• Ý tưởng
• Thứ tự các giao tác ở trong lịch S' phải giống thứ tự các hành động xung đột
trong lịch S
S T1 T2 S' T1 T2
Read(A) Read(A)
Write(A) T1-> T2 Write(A)
Read(A) Read(B)
Write(A) Write(B)
Read(B) Read(A)
Write(B) T1->T2 Write(A)
Read(B) Read(B)
Write(B) Write(B) 52
Thảo luận
• Thứ tự của các hành động xung đột trong S cũng chính là thứ tự của
các “giao tác thực hiện các hành động này” trong lịch tuần tự
• Các cặp hành động xung đột đặt ra các ràng buộc thứ tự giao tác
• Nếu các ràng buộc mâu thuẫn nhau  không thể tìm được lịch tuần tự
conflict-equivalent
• Ngược lại tìm được

53
Kiểm tra Conflict Serializability
Cho lịch S có 2 giao tác T1 và T2: hành động A1 ∈ T1 , A2 ∈ T2
• T1 thực hiện trước T2 (T1 <S T2) nếu:
• A1 thực hiện trước A2 trong S (A1 và A2 không nhất thiết phải liên tiếp nhau)
• A1 và A2 là hai hành động xung đột
• (nghĩa là: A1 và A2 cùng thao tác lên một đơn vị dữ liệu và A1, A2 có ít nhất một hành động ghi
(write))

54
Đồ thị trình tự (Precedence Graph)
• Cho lịch S gồm các hành động T1,T2,…, Tn
• Đồ thị trình tự của S, ký hiệu là P(S) có:
• Đỉnh là các giao tác Ti của S. i
• Cung đi từ đỉnh i đến đỉnh j nếu Ti <STj i i

55
Đồ thị trình tự (Precedence Graph)
Ví dụ
• S: r2(A); r1(B); w2(A); r3(A); w1(B); w3(A); r2(B); w2(B);
• r2(A) trước w3(A) - hoặc w2(A) trước r3(A)…
• r1(B) trước w2(B) - hoặc w1(B) trước r2(B)… S T1 T2 T3
Read(A)
T1 <S T2 T2 <S T3 Read(B)
Write(A)
1 2 3
Read(A)
Write(B)
Write(A)
Read(B)
Write(B)
56
Đồ thị trình tự (Precedence Graph)
• Bổ đề
• Nếu S và S’ conflict-equivalent thì P(S)=P(S’)
• Chứng minh
• Giả sử P(S) # P(S’)
• ∃Ti sao cho Ti → Tj có trong S và không có trong S’
• ⇒ S = … pi (A)… qj (A)…
S’ = … qj (A)… pi (A)…
• pi (A) và qj (A) là xung đột
• ⇒ S, S’ không conflict-equivalent

57
Đồ thị trình tự (Precedence Graph)
• Định lý
• S conflict-serializable khi và chỉ khi P(S) không có chu trình
• Chứng minh: S conflict-serializable ⇒ P(S) không có chu trình
• S conflict-serializable
• ⇒ ∃S’ sao cho: S và S’ conflict-equivalent
• ⇒ P(S) = P(S’)
• S’ là lịch tuần tự ⇒ P(S’) không có chu trình
• ⇒ P(S) không có chu trình

58
Đồ thị trình tự (Precedence Graph)
• Định lý
• S conflict-serializable khi và chỉ khi P(S) không có chu trình
• Chứng minh: S conflict-serializable ⇐ P(S) không có chu trình
• P(S) không có chu trình
• Sắp xếp lại S như sau
• Chọn giao tác Ti không có cung nào đi đến giao tác này
• Di chuyển Ti lên đầu lịch S
S=(các hành động của Ti) (các hành động của n-1 giao tác còn lại)
• Xem xét phần đuôi của S
• P(đuôi của S) giống P(S) ngoại trừ đỉnh Ti và các cung đi ra từ giao tác Ti bị mất
• Mà P(S) không có chu trình ⇒ P(đuôi của S) không có chu trình
• Lặp lại quá trình này cho đến khi S biến thành một lịch tuần tự
• ⇒ S conflict-serializable

59
Ví dụ
Ví dụ
• S: r2(A); r1(B); w2(A); r3(A); w1(B); w3(A); r2(B); w2(B);
S T1 T2 T3

1 2 3
r2(A)
r1(B)

• P(S) không có chu trình w2(A)


r3(A)
• S conflict-serializable theo thứ tự T1, T2, T3
w1(B)

w3(A)
r2(B)

w2(B) 60
Ví dụ
• Ví dụ:
• S: r2(A); r1(B); w2(A); r2(B); r3(A); w1(B); w3(A); w2(B);
• r2(A) trước w3(A) – hoặc w2(A) trước r3(A) S T1 T2 T3
• r1(B) trước w2(B) – hoặc w1(B) trước w2(B) r2(A)
• r2(B) trước w1(B) r1(B)
w2(A)
r2(B)
r3(A)
T1 <S T2 T2 <S T3 w1(B)
1 2 3 w3(A)
w2(B)
P(S) có chu trình
T2 <S T1 S không conflict-serializable
61
Ví dụ
• Cho lịch S:
w1(A); r2(A); r3(A); w4 (A); T1 T2 T3 T4
S
Write1(A)
• Vẽ P(S) Read2(A)
Read3(A)
Write4(A)

62
Ví dụ
• Cho lịch S:
w1(A); r2(A); r3(A); w4 (A); T1 T2 T3 T4
S
Write1(A)
Read2(A)
Read3(A)
Write4(A)
1 2 3 4

63
Ví dụ
• Cho lịch S:
w3(A); w2(C); r1(A); w1(B); r1(C); w2(A); r4(A); w4(D);

T1 T2 T3 T4
• Vẽ P(S) S
Write(A)
• S có conflict-serializable không? Write(C)
Read(A)
Write(B)
Read(C)
Write(A)
Read(A)
Write(D)

64
Ví dụ
• Cho lịch S:
w3(A); w2(C); r1(A); w1(B); r1(C); w2(A); r4(A); w4(D);

S T1 T2 T3 T4
Write(A)
1 2 3 4 Write(C)
Read(A)
Write(B)
Read(C)
P(S) có chu trình Write(A)
S không conflict-serializable Read(A)
Write(D)

65
Bài tập
Cho các lịch giao tác:
a. r1(A); r2(A); r3(B); w1(A); r2(C); r2(B); w2(B); w1(C);
b. r1(A); w1(B); r2(B); w2(C); r3(C); w3(A);
c. w3(A); r1(A); w1(B); r2(B); w2(C); r3(C);
d. r1(A); r2(A); w1(B); w2(B); r1(B); r2(B); w2(C); w1(D);
e. r1(A); r2(A); r1(B); r2(B); r3(A); r4(B); w1(A); w2(B);
Với mỗi lịch:
• Vẽ P(S)
• S có conflict-serializable không? Nếu có, tìm tất cả các lịch tuần tự
ứng với S.

66
View-Serializability
• Xét lịch S
T1 T2 T3 1 2
S
Read(A)
Write(A)
Write(A)
Write(A)
3
2

• P(S) có chu trình


• ⇒ S không conflict-serializable
• S có khả tuần tự không?
67
View-Serializability
• So sánh lịch S và một lịch tuần tự S’
• Nhận xét lịch S và S’
• Đều có T1 thực hiện read(A). T2,T3 không đọc A  kết quả đọc luôn giống nhau
• Đều có T3 thực hiện ghi cuối cùng lên A kết quả cuối cùng của A là giống nhau
⇒ Kết quả của S và S’ giống nhau  S khả tuần tự

S T1 T2 T3 S’ T1 T2 T3
Read(A) Read(A)
Write(A) Write(A)
Write(A) Write(A)
Write(A) Write(A)
Không conflict-serializable Serial

68
View-Serializability
• Ý tưởng: S V T U

• Xem xét tất cả các mối liên kết giữa giao 1


tác T và U, sao cho T ghi và U đọc giá trị 2 Write(A)
này 3
• Nếu giao tác V ghi A và giá trị này không 4
bao giờ được đọc thì wv(A) có thể đặt ở 5 Write(A)
một vị trí nào đó trong lịch (miễn là A ghi 6
bởi V không bao giờ được đọc) 7 Read(A)
• Ghi chú: wT(A) – giao tác T thực hiện ghi trên đơn vị dữ liệu A 8

WV (A) có thể được đặt ở 1,2,3, 4 mà không


làm thay đổi kết quả của S.
Nếu chỉ xét giá trị mà R(A) đọc thì WV (A)
có thể ở bất kỳ đâu miễn là không chen vào
giữa 5 và 7 69
View-Serializability
Ý tưởng:
• Thêm một giao tác Tb ghi giá trị ban đầu cho từng đơn vị dữ liệu được đọc bởi
các giao tác trong lịch.
• Thêm một giao tác Tf đọc từng đơn vị dữ liệu được ghi bởi các giao tác sau
khi lịch kết thúc
⇒ Mỗi hành động đọc ri(A) đều có thể tìm thấy một hành động ghi wj(A) ở phía
trước gần nó nhất. Tj được gọi là nút gốc của ri(A)
S Tb T1 T2 T3 Tf
Write(A)
Read(A)
Write(A)
Write(A)
Write(A)
Read(A) 70
View-Serializability
• Định nghĩa
• S và S' gọi là view-equivalent nếu mỗi hành động đọc trong lịch này đều có
gốc của nó giống nhau trong lịch kia

S Tb T1 T2 T3 Tf S' Tb T1 T2 T3 Tf
w(A) w(A)
r(A) r(A)
view-equivalent
w(A) w(A)
r(A) w(A)
w(A) r(A)
w(A) w(A)
r(A) r(A)

71
View-Serializability
• Định nghĩa
• Một lịch thao tác S là view-serializable nếu S là view-equivalent với một lịch
thao tác tuần tự nào đó

S Tb T1 T2 T3 Tf S' Tb T1 T2 T3 Tf
w(A) w(A)
r(A) r(A)
view-equivalent
w(A) w(A)
r(A) w(A)
w(A) r(A)
w(A) w(A)
r(A) r(A)

view-serializable Serial
72
Kiểm tra View Serializability
• Cho lịch S
• Thêm một giao tác cuối Tf vào trong S sao cho Tf thực hiện việc đọc hết tất
cả các đơn vị dữ liệu ở trong S
• S = … w1(A)…w1(B)………w2(A); rf(A); rf(B);
• Thêm một giao tác đầu tiên Tb vào trong S sao cho Tb thực hiện việc ghi giá
trị ban đầu cho tất cả các đơn vị dữ liệu
• S = wb(A); wb(B)… r1(A)…r1(B)………w2(A)…

73
Kiểm tra View Serializability
• Vẽ đồ thị trình tự cho S, ký hiệu PL(S) - Polygraph
• Đỉnh là các giao tác Ti (bao gồm Tb và Tf)
• Cung
• 1. Nếu giá trị mà ri(X) đọc do wj(X) ghi (…wj(X) … ri(X)…) thì vẽ cung đi từ Tj đến Ti
X
j i

• 2. Với mỗi cung wj(X) … ri(X), xét wk(X) khác Tb sao cho Tk không chèn vào giữa Tj và
Ti
 (2a) Nếu Tj ≠ Tb và Ti ≠ Tf thì vẽ cung Tk → Tj và Ti → Tk (sau đó chọn một cung sao
cho đồ thị không có chu trình
 (2b) Nếu Tj = Tb thì vẽ cung Ti → Tk
 (2c) Nếu Ti = Tf thì vẽ cung Tk → Tj

74
Ví dụ 1
S T1 T2 T3
S Tb T1 T2 T3 Tf
Read(A) Write(A)
Write(A) Read(A)
Write(A) Write(A)
Write(A) Write(A)
Write(A)
Read(A)

75
Ví dụ 1
S Tb T1 T2 T3 Tf
Write(A)
Read(A)
Write(A)
Write(A)
Write(A)
Read(A)

A A
b 1 2 3 f

76
Ví dụ 1
• Xét cung TbT1 dựa trên đơn vị dữ liệu A S
• Write (A) xuất hiện ở hai giao tác Tb T1 T2 T3 Tf
khác là T2, T3. Write(A)
• T2, T3 không được phép chen vào giữa Read(A)
Tb và T1 Write(A)
• T2, T3 không thể đứng trước Tb Write(A)
 T2, T3 ở sau T1 Write(A)
• Vẽ cung từ T1 đến T2 và T1 đến T3 Read(A)
A

A A A
b 1 2 3 f

77
Ví dụ 1
• Xét cung T3Tf dựa trên đơn vị dữ liệu A S
• Write (A) xuất hiện ở hai giao tác Tb T1 T2 T3 Tf
khác là T1, T2 (không xét write ở Tb ) . Write(A)
• T1,T2 không được phép chen vào giữa Read(A)
T3 và Tf Write(A)
• T1,T2 không thể đứng sau Tf Write(A)
 T1,T2 ở trước T3 Write(A)
• Vẽ cung từ T1 đến T3 và T2 đến T3 Read(A)
A

A A A A
b 1 2 3 f

A
78
Ví dụ 1
S T1 T2 T3
b 1 2 3 f Read(A)
Write(A)
Write(A)
Write(A)
Loại bỏ các cung giống nhau

S' T1 T2 T3
Read(A)
b 1 2 3 f Write(A)
Write(A)
PL(S) không có chu trình
Write(A)
S view-serializable theo thứ tự T1, T2, T3
79
Ví dụ 2
• Cho lịch S T1 T2 T3
S
• Vẽ PL(S) Read(A)
• S có view-serializable không Write(A)
Read(A)
Write(A)
Write(A)

80
Ví dụ 2

T1 T2 T3 S Tb T1 T2 T3 Tf
S
Read(A) Write(A)
Write(A) Read(A)
Read(A) Write(A)
Write(A) Read(A)
Write(A) Write(A)
Write(A)
Read(A)

A A A
b 1 2 3 f

81
Ví dụ 2
• Xét cung TbT1 dựa trên đơn vị dữ liệu A S
• Write (A) xuất hiện ở hai giao tác Tb T1 T2 T3 Tf
khác là T2, T3. Write(A)
• T2, T3 không được phép chen vào giữa Read(A)
Tb và T1 Write(A)
• T2, T3 không thể đứng trước Tb Read(A)
 T2, T3 ở sau T1 Write(A)
• Vẽ cung từ T1 đến T2 và T1 đến T3 Write(A)
Read(A)
A
A A A A
b 1 2 3 f

82
Ví dụ 2
• Xét cung T2T3dựa trên đơn vị dữ liệu A S
• Write (A) xuất hiện ở giao tác Tb T1 T2 T3 Tf
khác là T1(không xét Write(A) ở Tb) Write(A)
• T1 không được phép chen vào giữa Read(A)
T2 và T3 Write(A)
 T1 có thể đứng trước T2 hoặc sau T3 Read(A)
• Vẽ 2 cung từ T1 đến T2 và từ T3 đến T1 Write(A)
(sau khi vẽ xong chỉ được chọn một trong hai cung) Write(A)
Read(A)
A
A A A A
b 1 2 3 f
A
A
83
Ví dụ 2
• Xét cung T3Tf dựa trên đơn vị dữ liệu A S
• Write(A) xuất hiện ở hai giao tác Tb T1 T2 T3 Tf
khác: T1 ,T2 (không xét Write(A) ở Tb) Write(A)
• T1 , T2 không được phép chen vào giữa Read(A)
T3 và Tf Write(A)
• T1 , T2 không thể đứng sau Tf Read(A)
 T1 , T2 chỉ có thể đứng trước T3 Write(A)
• Vẽ cung từ T1 đến T3 và từ T2 đến T3 Write(A)
Read(A)
A
A A A A
b 1 2 3 f
A A
A
A 84
Ví dụ 2 S
T1 T2 T3
Read(A)
b 1 2 3 f
Write(A)
Read(A)
Write(A)
Write(A)

S'
T1 T2 T3
b 1 2 3 f
Read(A)
Write(A)
Trong hai cung màu đỏ trên, bỏ một cung để đồ thị không có chu trình Write(A)
Chọn bỏ cung từ T3 sang T1.
Gộp các cung giống nhau Read(A)
PL(S) không chu trình Write(A)
S view-serializable theo thứ tự T1, T2, T3
85
Ví dụ 3
• Cho lịch S S T1 T2 T3

• Vẽ PL(S) Read(B)
Write(A)
• S có view-serializable không?
Read(A)
Write(B)
Read(A)
Write(B)
Write(B)

86
Ví dụ 3

S' Tb T1 T2 T3 Tf
S T1 T2 T3
Write(A)
Read(B)
Write(B)
Write(A)
Read(B)
Read(A)
Write(A)
Write(B)
Read(A)
Read(A) Write(B)
Write(B) Read(A)
Write(B) Write(B)
Write(B)
Read(A)
Read(B)

87
Ví dụ 3

S' Tb T1 T2 T3 Tf
Write(A)
Write(B)
Read(B)
Write(A)
Read(A)
Write(B)
Read(A)
Write(B)
Write(B)
A A B
b 1 2 3 f Read(A)
Read(B)
A
B

88
Ví dụ 3
• Xét cung TbT2 dựa trên đơn vị dữ liệu B
• Write(B) chỉ xuất hiện ở T1 và T3 S' Tb T1 T2 T3 Tf
Write(A)
• T1 và T3 chỉ có thể ở sau T2
Write(B)
⇒ Vẽ cung T2 sang T1 và T2 sang T3 Read(B)
Write(A)
Read(A)
Write(B)
Read(A)
Write(B)
B Write(B)
B
A A B
b 1 2 3 f Read(A)
Read(B)
A
B

89
Ví dụ 3
• Xét cung T2T1 dựa trên đơn vị dữ liệu A S'
• Không xét Write(A) ở Tb Tb T1 T2 T3 Tf
Write(A)
⇒ không vẽ thêm cung
Write(B)
• Tương tự đối với cung T2T3 Read(B)

• Tương tự đối với cung T2Tf Write(A)


Read(A)
Write(B)
Read(A)
Write(B)
B Write(B)
B
A A B
b 1 2 3 f Read(A)
Read(B)
A
B

90
Ví dụ 3
• Xét cung T3Tf dựa trên đơn vị dữ liệu B S'
• Chỉ xét Write(B) xuất hiện ở T1 và T2 Tb T1 T2 T3 Tf
Write(A)
• T1 và T2 chỉ có thể ở trước T3
Write(B)
⇒ Vẽ cung T1 sang T3 và cung T2 sang T3 Read(B)
Write(A)
Read(A)
Write(B)
Read(A)
B
B Write(B)
B Write(B)
B
A A B
b 1 2 3 f Read(A)
Read(B)
A
B

91
Ví dụ 3 S T1 T2 T3
Read(B)
Write(A)
Read(A)
Write(B)
b 1 2 3 f
Read(A)
Write(B)
Write(B)

S' T1 T2 T3
Read(B)
b 1 2 3 f Write(A)
Write(B)
Read(A)
Gộp các cung giống nhau Write(B)
PL(S) không có chu trình Read(A)
S view-serializable theo thứ tự T2, T1, T3
Write(B)
92
Ví dụ 4
• Cho lịch S S T1 T2 T3
• Vẽ PL(S) W(A)
• S có view-serializable không? R(B)
R(B)
R(A)
W(B)
W(B)

93
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
W(A)
b 1 A 2 3 f W(B)
B W(A)
B R(B)
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

94
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B W(A)
b 1 A 2 3 f W(B)
B W(A)
B R(B)
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

95
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B W(A)
B
b 1 A 2 B 3 f W(B)
B W(A)
B R(B)
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

96
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B W(A)
B
b 1 A 2 B 3 f W(B)
B W(A)
B R(B)
R(B)
• Không đổi R(A)
W(B)
W(B)
R(A)
R(B)

97
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B W(A)
B
b 1 A 2 B 3 f W(B)
B W(A)
B R(B)
R(B)
• Không đổi R(A)
W(B)
W(B)
R(A)
R(B)

98
Ví dụ 4
B
A S Tb T1 T2 T3 Tf
B B
W(A)
B
b 1 A 2 B 3 f W(B)
B W(A)
B R(B)
R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

99
Ví dụ 4

S T1 T2 T3
W(A)
b 1 2 3 f R(B)
R(B)
R(A)
W(B)
W(B)

Gộp các cung giống nhau


b 1 2 3 f PL(S) có chu trình
S không view-serializable

100
Ví dụ 5
• Cho lịch S
• Vẽ PL(S) S T1 T2 T3
• S có view-serializable không? W(A)
W(A)

R(B)
R(A)
W(B)
W(B)

101
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
W(B)
A W(A)
b 1 2 3 f
W(A)
B

R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

102
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
W(B)
A W(A)
b 1 2 B 3 f
B W(A)
B

R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

103
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
A
W(B)
A W(A)
b 1 2 B 3 f
B A W(A)
B

R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

104
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
A A
W(B)
A W(A)
b 1 2 B 3 f
B A W(A)
B

R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

105
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
A A
W(B)
B
A W(A)
b 1 2 B 3 f
B A W(A)
B

R(B)
R(A)
W(B)
W(B)
R(A)
R(B)

106
Ví dụ 5
B
A S Tb T1 T2 T3 Tf
W(A)
A A
W(B)
B
A W(A)
b 1 2 B 3 f
B A W(A)
B

R(B)
Loại bỏ một trong hai cung cung kẻ sọc. R(A)
Nhận thấy loại cung nào cũng được W(B)
W(B)
R(A)
R(B)

107
Ví dụ 5
S T1 T2 T3
W(A)
W(A)
b 1 2 3 f
R(B)
R(A)
W(B)
W(B)

b 1 2 3 f

Gộp các cung giống nhau


PL(S) có chu trình
S không thỏa view-serializable 108
Bài tập
Cho lịch sau
1. r1(A); r2(A); r3(A); w1(B); w2(B); w3(B);
2. r1(A); r2(A); r3(A); r4(A); w1(B); w2(B); w3(B); w4(B);
3. w1(A); r2(A); w3(A); r4(A); w5(A); r6(A);
• Vẽ PL(S)
• S có view-serializable không?

109

You might also like