HQT CSDL - exercise

Download Report

Transcript HQT CSDL - exercise

Quản lý giao tác
Nguyễn Thị Hoa Cúc
Trịnh Việt Linh
Nội dung

Giới thiệu

Hệ thống single-user và Multi-user.
 Giao tác là gì?
 Tại sao phải điều khiển sự truy xuất đồng thời?
 Tại sao phải khôi phục dữ liệu?
Giao tác và hệ thống:





Các thao tác của giao tác
Trạng thái của giao tác
Nhật ký hệ thống
Tính chất ACID của giao tác
2
Hệ thống single-user và multi-user


Hệ thống single-user là hệ thống dữ liệu chỉ cho tối đa
1 user truy xuất dữ liệu.
Hệ thống multi-user là hệ thống dữ liệu có thể được
truy xuất bởi rất nhiều users.
3
Giao tác (Transaction) là gì?

Giao tác là 1 đơn vị xử lý nguyên tố gồm 1 chuỗi các
hành động tương tác lên CSDL
Nguyên tố: không thể phân chia được nữa.
CSDL nhất quán
1

Giao tác
CSDL nhất quán
2
Ví dụ


Hệ thống giao dịch ngân hàng
Hệ thống đặt vé bay
4
Tại sao phải điểu khiển sự truy xuất
đồng thời?
• Nếu không điều khiển , sẽ xảy ra 3 vấn đề chính sau
• Mất dữ liệu update
• Update dữ liệu tạm thời.
• TÍnh tổng sai.
5
Tại sao phải điểu khiển sự truy xuất
đồng thời?

Mất dữ liệu update (update vô nghĩa)
T1
T2
Đọc tài khỏan X (1 triệu)
Rút 200.000vnd
Đọc tài khỏan X
Thêm vào tài khỏan 300.000vnd
time
Cập nhật tài khỏan mới.
Cập nhật tài khỏan mới.
6
Tại sao phải điểu khiển sự truy xuất
đồng thời?

Update dữ liệu tạm thời
T1
T2
Đọc tài khỏan X (1 triệu)
Rút 200.000vnd
Cập nhật tài khỏan mới.
time
T1 thất bại
Đọc tài khỏan X
Thêm vào tài khỏan 300.000vnd
Cập nhật tài khỏan mới.
7
Tại sao phải điểu khiển sự truy xuất
đồng thời?

Tính tổng sai)
T1
T2
Sum=0;
Đọc A;
Sum:=sum+A;
time
Đọc tài khỏan X (1 triệu)
Rút 200.000vnd
Cập nhật tài khỏan mới.
Đọc tài khỏan X
Sum=sum+X;
8
Tại sao phải khôi phục dữ liệu

Những kiểu lỗi có thể xảy ra:
Lỗi hệ thống( lỗi phần mềm, phần cứng , mạng..)
 Lỗi do chính giao tác gây ra (tràn số nguyên, chia cho 0)
 Lỗi cục bộ ( ko tìm thấy dữ liệu)
 Lỗi trong khi thực thi đồng thời.
 Lỗi đĩa cứng
 Lỗi vật lý ( cúp điện..)
=> dùng nhật ký hệ thống để khôi phục dữ liệu

9
Các thao tác của giao tác:

Read_item(X)




Tìm block thích hợp trên đĩa cứng
Chép nội dung của block đó vào buffer của bộ nhớ
Chép nội dung buffer vào biến X.
Write_item(X)




Tìm block thích hợp trên đĩa cứng
Chép nội dung của block đó vào buffer của bộ nhớ
Chép nội dung biến X vào buffer
Lưu buffer vào đĩa cứng ???
10
Trạng thái của giao tác




Active
 Ngay khi bắt đầu thực hiện thao tác đọc/ghi
Partially committed
 Sau khi lệnh thi hành cuối cùng thực hiện
Failed
 Sau khi nhận ra không thể thực hiện các hành động được nữa
Aborted
 Sau khi giao tác được quay lui và CSDL được phục hồi về trạng
thái trước trạng thái bắt đầu giao dịch



Bắt đầu lại giao tác (nếu có thể)
Hủy giao tác
Committed
 Sau khi mọi hành động hoàn tất thành công
11
Sơ đồ trạng thái của giao tác
Read,write
Begin transaction
terminated
12
Nhật ký hệ thống:

Được lưu trên đĩa cứng , bao gồm các thông tin:
1. [start_transaction,T]
2. [write_item,T,X,old_value,new_value]
3. [read_item,T,X] ???
4. [commit,T]
???
5. [abort,T]
13
Tính chất ACID của giao tác

Nguyên tố (Atomicity)
 Hoặc là toàn bộ hoạt động của giao dịch được phản ánh đúng
đắn trong CSDL hoặc không có hoạt động nào cả

Nhất quán (Consistency)


Cô lập (Isolation)


Một giao tác được thực hiện độc lập với các giao tác khác xử lý
đồng thời với nó để bảo đảm tính nhất quán cho CSDL
Một giao tác không quan tâm đến các giao tác khác xử lý đồng
thời với nó
Bền vững (Durability)

Mọi thay đổi mà giao tác thực hiện trên CSDL phải được ghi
nhận bền vững
14
Lịch thao tác

Định nghĩa


Lịch thao tác S của n giao tác T1, T2, …, Tn được xử lí
đồng thời là một thứ tự thực hiện các hành động của n
giao tác này
Thứ tự thực hiện của các thao tác trong S phải giống với
thứ tự trong giao tác
15
Lịch thao tác

Kí hiệu:




r : read_item
w : write_item
a : abort
c : commit
Ví dụ: Sa: r1(X);r2(X); w1(X);r1(Y);w2(X);w1(Y);
16
Lịch thao tác

Hai hành động là xung đột nếu:



Thuộc hai giao tác khác nhau
Cùng xử lí trên một đối tượng dữ liệu X
Ít nhất phải có một hành động là ghi dữ liệu
17
Lịch thao tác

Lịch thao tác S gọi là đầy đủ nếu:
 Số các hành động trong S đúng bằng số các hành động trongT1,
T2, …, Tn với commit hay abort là hành động báo kết thúc giao
tác
 Với bất kì cặp hành động nào cùng thuộc giao tác Tj, thứ tự xuất
hiện trong Tj phải tương ứng với thứ tự trong S
 Với bất kì cặp hành động xung đột nào, một trong chúng phải
xảy ra trước hành động kia trong S
18
Lịch thao tác

Gồm các loại:



Lịch khả phục hồi
Lịch tuần tự
Lịch khả tuần tự
19
Lịch khả phục hồi

Lịch S gọi là khả phục hồi nếu:
Mọi giao tác T trong S nếu có đọc một(nhiều) đối tượng dữ
liệu được ghi bởi các giao tác T’ khác thì phải kết thúc sau
khi tất cả các giao tác T’ này kết thúc.
Vd:Sa: r1(X);r2(X); w1(X);r1(Y);w2(X);c2;w1(Y);c1
20
Lịch khả phục hồi

Cascading rollback:
Để phục hồi lại đúng sau giao tác Ti thất bại, ta phải cuộn lại
một vài giao tác nếu các giao tác đó đọc dữ liệu ghi bởi Ti.
21
Lịch khả phục hồi

Cascadeless Schedule
Nếu mọi giao tác trong lịch thao tác S chỉ đọc dữ liệu được
ghi bởi những giao tác đã kết thúc thì được gọi là lịch
không tác động nối tiếp.
22
Lịch khả phục hồi

Strict schedule:
Nếu mọi giao tác T trong S chỉ đọc hoặc ghi trên đối tượng
dữ liệu X sau khi giao tác cuối cùng thực hiện ghi lên X kết
thúc hoặc bị hủy bỏ.
23
Lịch tuần tự

Một lịch S là tuần tự nếu các hành động của các giao tác Ti
(i=1..n) được thực hiện liên tiếp nhau
S
T1
T2
T3
…
Thời gian
Tn
24
Lịch tuần tự
S1
T1
T2
A
25
B
25
S2
T1
T2
Read(A,t)
Read(A,s)
t:=t+100
s:=s*2
Write(A,t)
125
Write(A,s)
Read(B,t)
Read(B,s)
t:=t+100
s:=s*2
125
Write(B,t)
Read(A,t)
s:=s*2
t:=t+100
250
Write(A,t)
Read(B,s)
Read(B,t)
s:=s*2
t:=t+100
Write(B,s)
250
B
25
25
50
50
Write(B,s)
Read(A,s)
Write(A,s)
A
Write(B,t)
150
150
25
Lịch khả tuần tự

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à 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
S
T1
T2
T3
Thời gian
Tn
26
Lịch khả tuần tự
S3
T1
T2
A
B
25
25
Read(A,t)
t:=t+100
Write(A,t)
125
Read(A,s)
s:=s*2
Write(A,s)
250
Read(B,t)
t:=t+100
Write(B,t)
125
Read(B,s)
s:=s*2
Write(B,s)
250
27
Lịch khả tuần tự

Tương đương kết quả
Hai lịch thao tác là tương đương kết quả nếu cho cùng
một kết quả sau khi kết thúc.
28
Lịch khả tuần tự

Tương đương xung đột:
Hai lịch thao tác là tương đương xung đột nếu thứ tự của bất
kì cặp hành động xung đột nào cũng được giữ nguyên.
S
T1
T2
S’
T1
Read(A)
Read(A)
Write(A)
Write(A)
Read(A)
Read(B)
Write(A)
Write(B)
T2
Read(B)
Read(A)
Write(B)
Write(A)
Read(B)
Read(B)
Write(B)
Write(B)
29
Lịch khả tuần tự

Conflict serializable:
Lịch thao tác S gọi là conflict serializable nếu nó
tương đương xung đột với một lịch tuần tự S’ nào đó.
S
T1
T2
S’
T1
Read(A)
Read(A)
Write(A)
Write(A)
Read(A)
Read(B)
Write(A)
Write(B)
T2
Read(B)
Read(A)
Write(B)
Write(A)
Read(B)
Read(B)
Write(B)
Write(B)
30
Kiểm tra conflict serializability

Đồ thị trình tự G=(N,E)
N = {T1, T2, …, Tn }
E = {e1; e2; …; en }
31
Kiểm tra conflict serializability



Với mỗi giao tác Ti tham gia trong lịch thao tác S, tạo ra một
node Ti của đồ thị
Một cạnh (Ti->Tj) được thêm vào nếu:
 TJ thực thi read_item(X) sau khi Ti thực thi write_item(X)
 TJ thực thi write_item(X) sau khi Ti thực thi read_item(X)
 TJ thực thi write_item(X) sau khi Ti thực thi write_item(X)
Lịch thao tác S là khả tuần tự nếu đồ thị trình tự không chứa
chu trình
32
Kiểm tra conflict serializability
S
T1
T2
S’
T1
Write(A)
T2
Read(A)
Read(A)
Write(A)
Write(B)
Read(B)
Read(B)
Write(B)
1
2
33
Kiểm tra conflict serializability
S
T1
T2
T3
Read(A)
1
2
3
Read(B)
Write(A)
Read(A)
Write(B)
Write(A)
Read(B)
Write(B)


G không có chu trình
S conflict-serializable theo
thứ tự T1, T2, T3
34
Kiểm tra conflict serializability
S
T1
T2
T3
1
Read(A)
2
3
Read(B)
Write(A)
Read(B)
Read(A)

Write(A)

Write(B)
G có chu trình
S không conflict-serializable
Write(B)
35
Lịch khả tuần tự


Trong thực tế, DBMS sẽ có một protocol để kiểm tra
tính khả tuần tự
C(S): commited projection
36
View-Serializability

Xét lịch thao tác S
1
S
T1
T2
2
T3
Read(A)
3
Write(A)
Write(A)

Write(A)

G có chu trình
S không conflict-serializable
37
View-Serializability

So sánh S với S’
S
T1
T2
T3
S’
Read(A)
T1
T2
T3
Read(A)
Write(A)
Write(A)
Write(A)
Write(A)
Write(A)
Không conflict-serializable
Write(A)
Serial
38
View-Serializability
S, S’ là những lịch thao tác view-equivalent
1- Nếu trong S có wj(A) … rj(A) thì trong S’ cũng có wj(A) … rj(A)
2- Nếu trong S có ri(A) là thao tác đọc giá trị ban đầu của A thì trong
S’ cũng ri(A) đọc giá trị ban đầu của A
3- Nếu trong S có wi(A) là thao tác ghi giá trị sau cùng lên A thì
trong S’ cũng có wi(A) ghi giá trị sau cùng lên 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 đó
39
View-Serializability
Lịch thao tác
View-Serializable
ConflictSerializable
40
Kiểm tra View-Serializability


Cho 1 lịch thao tác S
Thêm 1 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ả đơn vị dữ liệu ở trong S



(bỏ qua điều kiện thứ 3 của định nghĩa view-equivalent)
S = … w1(A)…………w2(A) rf(A)
Thêm 1 giao tác đầu tiên Tb vào trong S sao cho Tb thực hiện
việc ghi các giá trị ban đầu cho các đơn vị dữ liệu


(bỏ qua điều kiện thứ 2 của định nghĩa view-equivalent)
S = wb(A)… w1(A)…………w2(A)…
41
Kiểm tra View-Serializability

Vẽ đồ thị trình tự gán nhãn cho S, ký hiệu G(S),
(PolyGraph)


Đỉnh là các giao tác Ti (bao gồm Tb và Tf)
Cung

(1) Nếu có ri(X) với gốc là Tj thì vẽ cung đi từ Tj đến Ti
wj(X) … ri(X)

(2) Với mỗi wj(X) … ri(X), xét wk(X) sao cho Tk không chèn vào
giữa Tj và Ti
42
Kiểm tra View-Serializability

(2a) Nếu Tj  Tb và Ti  Tf thì vẽ cung Tk  Tj và Ti  Tk
Tk
Tj
Ti
Write(X)
Tj
Ti
Tk
Write(X)
Write(X)
Read(X)
Read(X)
k
X
j
X
X
i
Write(X)
j
X
Chọn 1 cung vừa tạo sao cho
đồ thị không có chu trình
i
X
k
X
43
Kiểm tra View-Serializability


Tk
(2b) Nếu Tj  Tb thì vẽ cung Ti  Tk
(2c) Nếu Ti = Tf thì vẽ cung Tk  Tj
Tj = Tb
Ti
Tk
Tk
Tj
Ti = Tf
Tk
Write(X)
Write(X)
Write(X)
Write(X)
Read(X)
Read(X)
Write(X)
X
j
Write(X)
X
i
X
X
k
k
X
j
i
X
44
Kiểm tra View-Serializability
S
T1
T2
T3
Tb
S’
Read(A)
T1
T2
T3
Tf
Write(A)
Write(A)
Read(A)
Write(A)
Write(A)
Write(A)
Không chọn vì
không thể dời Tb
vào giữa T3 và Tf
Write(A)
Write(A)
Write(A)
Read(A)


G(S) không có chu trình
S view-serializable theo
thứ tự Tb, T1, T2, T3, Tf
A
b
A
1
A
2
A
3
A
f
A
45
Kiểm tra View-Serializability
S
T1
T2
T3
Tb
S’
Read(A)
T1
T2
T3
Tf
Write(A)
Write(A)
Write(A)
Read(A)
Read(A)
Read(A)
Write(A)
Write(A)
Không chọn vì
không thể dời Tb
vào giữa T2 và T3
Write(A)
Read(A)
Write(A)
Write(A)
Write(A)
Read(A)
Read(A)
A


G(S) có chu trình
S không view-serializable
b
A
1
A
A
2
A
3
A
f
A
A
A
46
Giao tác trong SQL



Một câu lệnh SQL luôn là atomic
Giao tác được bắt đầu không tường minh
Giao tác phải kết thúc tường minh, bởi COMMIT hoặc
ROLLBACK
47
Giao tác trong SQL

Các thuộc tính của giao tác được đặc tả bằng lệnh
SET TRANSACTION với:



Access mode: read only hoặc là read write
Diagnostic size n: n là số điều kiện áp dụng
Isolation level <isolation>
48
Giao tác trong SQL
49
Giao tác trong SQL
Exec sql whenever sqlerror goto undo;
Exec sql set transaction
read write
Diagnostic size 5
Isolation level serializable;
Exec sql insert into employee(fname,lname,ssn,dno,salary)
values(‘a’,’b’,’123456789’,2,35000);
Exec sql commit;
Goto the_end;
Undo: exec sql rollback;
The_end:…
50
Tài liệu tham khảo

Fundamental of database systems: Ehmasri&Navathe
Slide hệ quản trị dữ liệu-khoa CNTT- trường KHTN

http://www.vocw.edu.vn/content/m10865/latest/

51
Thank you!
52