Các thao tác của giao tác Giả sử CSDL gồm nhiều đơn vị dữ liệu Một đơn vị dữ liệu element Có một giá trị Được truy xuất và sửa đổi bởi các giao tác Quan hệ relation - Lớp class
Trang 1Chương II Quản lý truy xuất
đồng thời
Trang 2Nội dung
Giới thiệu
Khái niệm về giao tác
Các vấn đề truy xuất đồng thời
Lịch thao tác
Các kỹ thuật khóa dữ liệu
Kỹ thuật nhãn thời gian
Trang 3Giới thiệu
Thực tế, CSDL được khai thác một cách đồng thời bởi nhiều người sử dụng Thậm chí còn có nhiều tiến trình trong một chương trình cũng có thể được thực hiện đồng thời.
Ví dụ: hệ thống đặt chỗ trên các chuyến bay của một hãng hàng không Nhiều đại lý có thể cùng bán vé Hành khách có thể mua vé, đổi vé, trả vé do đó danh sách khách hàng và số ghế của các chuyến bay sẽ bị thay đổi Chuyện gì sẽ xảy ra nếu hai hay nhiều đại lý cùng bán một ghế cho nhiều khách hàng? Hệ quản trị CSDL này phải có khả năng giải quyết vấn
đề tranh chấp đó để không một ghế nào trên một chuyến bay
có thể bán nhiều hơn một lần.
Trang 4Khái niệm về giao tác (Transaction)
Định nghĩa
Tính chất ACID của giao tác
Các thao tác của giao tác
Trạng thái của giao tác
Trang 5Định nghĩa
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 Khi thực hiện một giao tác hoặc phải thực hiện tất cả các hành động của
nó hoặc thì không thực hiện hành động nào hết
CSDL nhất quán 1 Giao tác CSDL nhất quán 2
Trang 6Ví dụ
Trang 7Tính chất ACID của giao tác
Trang 8Ví dụ 1
A=100, B=200 (A+B=300)
Tại thời điểm sau khi write(A,t)
A=50, B=200 (A+B=250) - CSDL không nhất quán
Tại thời điểm sau khi write(B,t)
Trang 9Tình huống
Đặt Ti là một giao dịch chuyển 50 USD từ tài khoản
A đến tài khoản B giao dịch này được định nghĩa như sau:
Trang 10 Giả sử trước khi thực hiện giao dịch Ti, các giá trị của các tài khoản A và B tương ứng là 1000USD và 2000USD Trong khi thực hiện giao dịch Ti, một lỗi xảy ra (phần cứng, phần mềm,, mất điện,…) ngăn chặn Ti hoàn thành thực hiện giao dịch chuyển khoản Giả sử lỗi này xảy ra sau khi thao tác Write(A) đã được thực hiện và trước khi thao tác Write(B) được thực hiện.
Trong trường hợp này, giá trị cùa tài khoản A và B được ghi
Tình huống
Trang 11Tính chất ACID của giao tác (tt)
Tính Nhất quán (C onsistency)
Bất kỳ CSDL nào thì mọi ràng buộc tòan vẹn phải thỏa Tại bất kỳ thời điểm mà mọi RBTV được thỏa gọi là tính nhất quán.
Một giao tác phải biến CSDL từ trạng thái nhất quán này sang trạng thái nhất quán khác không được phá vở trạng thái nhất quán E1 T E2 (E1nhất quán thì E2 phải nhất quán).
Ví dụ:phái là nam hoặc nữ, nhưng gõ đến phái Enter đi qua mà cho phép thì không còn trạng thái nhất quán.
Trang 13Tính chất ACID của giao tác (tt)
quanh tôi có n người khác đang chạy Hệ thống làm sao bảo đảm khi có n người chạy 1 lúc hệ thống làm sao bảo đảm n người này chạy một mình
Trang 15 Như ví dụ trên, khi CSDL ở trạng thái không toàn vẹn trong giao dịch chuyển tiền từ A đến B đang thực hiện, ở đó tài khoản A đã giảm đi nhưng chưa tăng tài khoản B Nếu một giao dịch thứ hai chạy đồng thời đọc A và B tại thời điểm trung gian này
và tính tổng A+B, nó sẽ quan sát thấy một giá trị không đúng đắn
Hơn nữa, nếu giao dịch thứ hai thực hiện Việc cập nhật trên A và B và dựa vào những giá trị không đúng đắn mà nó nhận được, CSDL có thể để lạimột trạng thái không toàn vẹn sau khi cả hai giao
Trang 16Tính chất ACID của giao tác (tt)
Trang 17 Tính bền vững đảm bảo rằng một khi giao dịch đượchoàn thành, tât cả các cập nhật trên CSDL là bền
vững thậm chí nếu có lỗi hệ thống sau khi giao dịch hoàn thành thực hiện Giả sử một lỗi hệ thống có thể dẫn đến mất mát dữ liệu trong bộ nhớ chính, nhưng
dữ liệu được ghi vào đĩa không bao giờ bị mất
Trang 18Các thao tác của giao tác
Giả sử CSDL gồm nhiều đơn vị dữ liệu
Một đơn vị dữ liệu (element)
Có một giá trị
Được truy xuất và sửa đổi bởi các giao tác
Quan hệ (relation) - Lớp (class)
Khối dữ liệu trên đĩa (block) / trang (page)
Trang 19Các thao tác của giao tác (tt)
Input(X)
Read(X, t)
X t
Trang 21Ví dụ (tt)
Hành động Read(A,t) t:=t*2 Write(A,t) Read(B,t) t:=t*2 Write(B,t) Output(A) Output(B)
t 8 16 16 8 16 16 16 16
Mem A Mem B Disk A Disk B 8
8 16 16 16 16 16 16
8 8 16 16 16
8 8 8 8 8 8 16 16
8 8 8 8 8 8 8 16
Trang 22Trạng thái của giao tác
Trang 23Trạng thái của giao tác
Active (kích hoạt)
Ngay khi bắt đầu thực hiện thao tác đọc/ghi
Partially committed (hoàn thành bộ phận)
Sau khi lệnh thi hành cuối cùng thực hiện
Trang 24T-SQL đặc trưng của giao tác
Trang 25Các vấn đề truy xuất đồng thời
Vấn đề mất dữ liệu đã cập nhật (Lost Update)
Vấn đề không thể đọc lại được(Unrepeated Read)
Vấn đề dữ liệu chưa hoàn tất (Uncommitted
Dependency )
Trang 26Vấn đề mất dữ liệu đã cập nhật
Tình trạng xảy ra khi hai hay nhiều thao tác của các giao tác khác nhau cùng yêu cầu truy cập một mục dữ liệu Các dữ liệu đã được các thao tác trước cập nhật nhưng lại bị các thao tác sau cập nhật lại làm thay đổi kết quả mong muốn.
Trang 27 A và B đọc dữ liệu thấy 500 cuốn nên đều đồng ý bán.
Vào lúc T2 nhân viên A sẽ thực hiện cập nhật số sách từ
Trang 28Vấn đề mất dữ liệu đã cập nhật
Xét 2 giao tác
Giả sử T 1 và T 2 được thực hiện đồng thời
Dữ liệu đã cập nhật tại t của T t1 Read(A)
A=50 T1 T2
Read(A)
T2Read(A) A:=A+20 Write(A)
T1Read(A) A:=A+10 Write(A)
Trang 29Vấn đề không thể đọc lại được
(Unrepeated Read)
Ví dụ: giả sử nhà sách còn 200 cuốn sách
Vào lúc T1 nhân viên A bán cho khách 150 cuốn, sẽ thực hiện cập nhật sách từ 200 thành 50 (giao dịch chưa hoàn thành chẳng hạn vì việc giao nhận tiền chưa xong).
Sau đó lúc T2, B nhận được yêu cầu mua 100 cuốn sách, nếu B đọc được dữ liệu chưa hoàn tất thì B sẽ từ chối bán 100 cuốn sách này.
Nếu vào lúc T3 vì lý do nào đó chẳng hạn không đủ tiền khách
hàng của A không mua 150 cuốn sách nữa Giao tác bán hàng của
A sẽ không thực hiện nên quay về trạng thái số sách còn lại là 200
Nhưng B từ chối khách hàng.
Nếu B không đọc được dữ liệu từ lúc T1 đến T3 thì sẽ như thế nào?
Trang 30Vấn đề dữ liệu chưa hoàn tất (rác)
Giả sử nhân viên C cần tổng hợp 5 dòng dữ liệu
1 2 3 4 5 để làm một bản báo cáo.
T1: C đọc và đưa các dòng 1 2 3 4 vào báo cáo
T2: D lại xóa dòng 1 thay bằng dòng 6
T3: C đọc tiếp 5 6 đưa vào báo cáo
Vậy báo cáo này xử lý cả dữ liệu cũ và mới sai
Trang 31Các mức cô lập của Transaction
Các dữ liệu bẩn (dirty data) là một thuật ngữ chung chỉ các dữ liệu được ghi bằng một giao tác nhưng còn chưa được lưu giữ lại (committed) Một dirty read dùng để đọc các dữ liệu bẩn Điều nguy hiểm của việc đọc các dữ liệu bẩn là ở chỗ một giao tác ghi nó có thể bị bỏ dở Nếu vậy thì các dữ liệu bẩn sẽ bị đẩy ra khỏi cơ sở dữ liệu và mọi người được phép xử sự như là các dữ liệu đó chưa bao giờ tồn tại Nếu một giao tác khác nào đó đã đọc các dữ liệu bẩn thì giao tác đó có thể lưu giữ hoặc thực hiện một hành động nào đó phản ánh sự hiểu biết của nó về dữ liệu bẩn.
Trang 32Các mức cô lập của Transaction
Đôi lúc dirty read có ý nghĩa, đôi lúc nó không
có ý nghĩa Lúc khác nó có ý nghĩa rất nhỏ đủ
để tạo ý nghĩa về nguy cơ của một dirty read phụ và như vậy làm ngăn cản:
Công việc tốn thời gian của hệ quản trị cơ sở
dữ liệu cần để ngăn ngừa dirty read và
Mất tính song song gây ra từ sự chờ đợi cho
Trang 33 Giả sử rằng có các dirty read Có 3 tài khoản A1, A2, A3với 100$, 200$ và 300$ tương ứng Giả sử rằng giao tác T1thực hiện chương trình P để chuyển 150$ từ A1 đến A2.Cùng một thời gian, giao tác T2 chạy chương trình P đểchuyển 250$ từ A2 đến A3 Có khả năng có các dãy sự kiệnsau:
1 T2 thực hiện bước 1 và thêm 250$ vào A3 và bây giờA3 có 550$
2 T1 thực hiện bước 1 và thêm 150$ và A2 và bây giờA2 có 350$
3 T2 thực hiện kiểm tra của bước 2 và tìm ra rằng A2 có
Các mức cô lập của Transaction
Trang 34 4 T1 thực hiện kiểm tra của bước 2 và tìm
ra rằng T1 không có đủ tiền (100$) để cho phép chuyển 150$ từ A1 sang A2.
5 T2 thực hiện bước 2b Nó trừ đi 250$ khỏi A2 và bây giờ A2 có 100$ và kết thúc.
6 T1 thực hiện bước 2a Nó trừ 150$ khỏi
A2, bây giờ A2 có –50$ và kết thúc.
Các mức cô lập của Transaction
Trang 35 Tổng số tiền không thay đổi; trong ba tài khoản vẫn còn 600$ Nhưng bởi vì T2 đọc
dữ liệu bẩn ở bước 3 trong 6 bước trên, chúng ta không bảo vệ được việc một tài khoản trở nên âm, đó là mục đích của việc kiểm tra tài khoản thứ nhất để xem tài khoản này có số tiền thích hợp hay không.
Các mức cô lập của Transaction
Trang 36Lịch thao tác (schedule)
Giới thiệu
Định nghĩa
Lịch tuần tự (Serial schedule)
Lịch khả tuần tự (Serializable schedule)
Trang 37 Cho phép nhiều giao tác cùng truy xuất dữ liệu
Gây ra nhiều phức tạp về nhất quán dữ liệu
Tuy nhiên có 2 lý do để thực hiện đồng thời:
Tận dụng tài nguyên và thông lượng
Giảm thời gian phản hồi của các giao tác
Trang 38Hai lý do để thực hiện đồng thời
- Một giao tác gồm nhiều bước: hành động I/O trên đĩa, hành
động xử lý trên CPU Do đó hành động I/O trên đĩa và xử lý trên CPU có thể thực hiện song song với nhau.
- Trong khi 1 giao tác đang thực hiện đọc/ghi trên đĩa thì giao tác khác thực hiện tính toán trên CPU.
- CPU và đĩa có ít thời gian rảnh rỗi.
Trang 39Hai lý do để thực hiện đồng thời
- Giảm thời gian phản hồi của các giao tác
- Có nhiều giao tác với thời gian thực hiện ngắn dài khác nhau.
- Nếu thực hiện tuần tự, có thể 1 giao tác ngắn phải chờ 1 giao tác dài trước trước đó -> trì hoãn.
- Nếu các giao tác thực hiện với những dữ liệu khác nhau thì nên thực hiện song song -> chia sẽ chu kỳ của CPU và truy cập đĩa
Khi có nhiều giao tác thực hiện đồng thời, tính nhất quán
CSDL có thể bị phá vỡ mặc dù cá nhân mỗi giao tác vẫn thực hiện đúng đắn.Vì vậy cần có khái niệm Lịch thao tác
(schedule) để xác định những thực hiện nào đảm bảo tính nhất quán Bộ phận quản lý các lịch thao tác này gọi là Bộ lập lịch (scheduler).
Trang 40Bộ lập lịch (Scheduler)
Là một thành phần của DBMS có nhiệm vụ lập 1
lịch để thực hiện n giao tác xử lý đồng thời
Transaction manager
Scheduler
Read/Write request
Trang 41Bộ lập lịch (Scheduler) (tt)
Một lịch thao tác S được lập từ n giao tác T1,
T2, …,Tn được xử lý đồng thời là 1 thứ tự
thực hiện các hành động của n giao tác này
Thứ tự xuất hiện của các thao tác trong lịch phải giống với thứ tự xuất hiện trong giao tác
Trang 42Ví dụ
T2
T1
Read(A,s) s:=s*2
t:=t+100
Read(A,t) t:=t+100 Write(A,t) Read(B,t) Write(B,t)
s:=s*2
Write(A,s) Read(B,s) Write(B,s)
Trang 43Lị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 T i (i=1 n) được thực hiện liên tiếp nhau
T1
T2
Tn
… Thời gian
S
T3
Trang 44Lịch tuần tự (tt)
T2
T1
Read(A,s) s:=s*2 t:=t+100
Read(A,t) t:=t+100
s:=s*2
Write(A,s) Read(B,s) Write(B,s)
Trang 45Lịch tuần tự (tt)
Trang 46Lịch tuần tự (tt)
Trang 47Lịch tuần tự (tt)
950 2050 855
Trang 48Lịch tuần tự (tt)
Trang 49Lịch tuần tự (tt)
900
2100 850
Trang 50Lịch tuần tự (tt)
Trang 51Lịch tuần tự (tt)
950
855 2050
Trang 52Lịch tuần tự (tt)
900 950
Trang 53Lịch tuần tự (tt)
Trang 54Lịch khả tuần tự
(Serializable schedule)
Một lịch S được lập từ n giao tác T 1 , T 2 , …, T n 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
T1
T2
T S
Trang 55 S là khả tuần tự
T2
T1
Read(A,s) s:=s*2
Trang 57Lịch khả tuần tự (tt)
Khi S5 kết thúc
A và B bằng nhau
Trạng thái cuối cùng nhất quán
S5 khả tuần tự, có kết quả giống với lịch tuần
Trang 58Bài tập
Trang 59Bài tập
Trang 60 Ý tưởng
Xét 2 hành động liên tiếp nhau trong 1 lịch thao tác
Nếu thứ tự của chúng được đổi cho nhau
Thì hoạt động của ít nhất 1 giao tác có thể thay đổi
Hành động 1 Hành động 2
Hành động 1’
Hành động 2’
Trang 61 Cho lịch S có 2 giao tác Ti và Tj, xét các trường hợp
ri(X) ; rj(Y)
Không bao giờ có xung đột, ngay cả khi X=Y
Cả 2 thao tác không làm thay đổi giá trị của đơn vị dữ liệu
X, Y
ri(X) ; wj(Y)
Không xung đột khi X Y
Tj ghi Y sau khi Ti đọc X, giá trị của X không bị thay đổi
Ti đọc X không ảnh hưởng gì đến Tj ghi giá trị của Y
wi(X) ; rj(Y)
Không xung đột khi X Y
w (X) ; w (Y)
Trang 62 Hai hành động xung đột nếu
Thuộc 2 giao tác khác nhau
Truy xuất đến cùng 1 đơn vị dữ liệu
Có ít nhất một hành động ghi (write)
không thể hoán vị thứ tự
Ti Tj
Trang 63Read(A) Write(A) Read(B) Write(B)
Write(A) Read(B) Write(B)
Read(B) Write(B)
Write(A)
Read(B) Write(B)
Trang 65Read(A,t) t:=t+100 Write(A,t)
Read(B,t)
s:=s*1
Write(A,s) Read(B,s) Write(B,s)
25 25 125
25
125
S 5
Serializable nhưng không conflict-serializable
Trang 66Conflict-Serializability (tt)
Trang 67Conflict-Serializability (tt)
Trang 68Kiểm tra tính khả tuần tự của một lịch
Nhập: Lịch biểu S cho một tập giao dịch T1,T2,
…, Tk
Xuất: Khẳng định S có tuần tự hay không?
Nếu có thì đưa ra một lịch biểu tuần tự tương
đương với S
Phương pháp: Tạo một đồ thị có hướng G
Trang 69Kiểm tra tính khả tuần tự của một lịch (tt)
Xây dựng đồ thị có hướng:
Mỗi giao tác Ti là một nút của đồ thị G
Nếu có Tj phát ra một yêu cầu Write(A) sau một giao tác Ti đã phát ra yêu cầu Read(A) thì vẽ một cung từ Ti
Tj
Nếu có một giá trị Tj phát ra một yêu cầu Read(A) sau một giao tác Ti đã phát sau một yêu cầu Write(A) thì vẽ một cung đi từ Ti Tj
Nếu có một yêu cầu Tj phát ra một yêu cầu Write(A)
sau một yêu cầu Ti đã phát ra một yêu cầu Write(A) thì
vẽ cung Ti Tj
Nếu G có chu trình S không khả tuần tự
Trang 70Lịch biểu tuần tự, khả tuần tự
Lịch biểu tuần tự
A) Lịch biểu sau là tuần tự
S={W2(X), W2(Y), R2(Z), C2, R1(X), W1(X), C1,
R3(X), R3(Y), R3(Z), C3}
B) Lịch biểu sau là khả tuần tự
Trang 71Ví dụ
S1: W2(X),W1(X),R3(X),R1(X),W2(Y),R3(Y),R3(X),R2(X)
Bất khả tuần tự vì đồ thị có chu trình
Trang 72Ví dụ
S1:R2(Z),W2(X),W2(Y),W1(X),R1(X),R3(X),R3(Z),R3(Y)
Trang 73Bài tập
T2
T1
Read(A) Read(B)
Write(A) Write(B)
Read(A)
Write(A) Read(B)
Trang 74Bài tập
T2
T1
Read(A) Read(B)
Write(A)
Write(B)
Read(A) Write(A) Read(B)
Write(B)
Trang 76Write(D) Write(B)
T3
Trang 78Serial
Trang 79View-Serializability (tt)
Ý tưởng
Xét trường hợp
Nhận xét
Sau khi T ghi A xong mà không có giao tác nào đọc giá trị của A
Khi đó, hành động wT(A) có thể chuyển đến 1 vị trí khác trong lịch thao tác mà ở đó cũng không có giao tác nào đọc A
Trang 80View-Serializability (tt)
Định nghĩa
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 đó
Trang 81View-Serializability (tt)
S conflict-serializable S view-serializable
Chứng minh
Hoán vị các hành động không xung đột
Không làm ảnh hưởng đến những thao tác đọc
Cũng không làm ảnh hưởng đến trạng thái CSDL
Trang 83View-Serializability (tt)
Trang 84View-Serializability (tt)
Quan sát lịch S thấy các giao dịch T4 và T6 thực hiện các giao tác write (A) mà không thực hiện một lệnh Read (A) nào Các thao tác này gọi là thao tác mù Các thao tác ghi mù xuất hiện trong một lịch biểu view-
serializability nào đó thì lịch biểu không conflict serializability
Trang 85Các kỹ thuật khóa dữ liệu
Giới thiệu
Kỹ thuật khóa đơn giản
Kỹ thuật khóa đọc ghi
Kỹ thuật khóa 2 pha
Trang 86Giới thiệu
Các giao tác trước khi muốn đọc/viết lên 1 đơn vị dữ liệu phải phát ra 1 yêu cầu xin khóa (lock) đơn vị dữ liệu đó
Lock(A) hay L(A)
Yêu cầu này được bộ phận quản lý khóa xử lý
Nếu yêu cầu được chấp thuận thì giao tác mới được phép đọc/ghi lên đơn vị dữ liệu
Trang 87Kỹ thuật khóa đơn giản
Nếu xuất hiện 2 giao tác tương tranh thì áp dụng cơ chế chờ: một giao tác xử lý hạt dữ liệu A sẽ khóa hạt dữ liệu này cho đến khi hòan tất Các giao tác còn lại phải chờ cho đến khi hạt dữ liệu này được giải phóng
Trước khi muốn thao tác lên 1 đơn vị dữ liệu A thì phải phát ra 1 yêu cầu xin khóa trên A
Nếu yêu cầu trên khóa A được chấp thuận thì được thao tác trên A (Lock) Sau khi thao tác xong thì phải phải phát ra lệnh giải phóng A (Unlock)
Nếu yêu cầu trên khóa không được chấp thuận thì chờ
Hai kiểu khóa
Khóa đọc (Read lock): chỉ cho phép một giao tác đọc
Khóa ghi (Write lock): cho phép cả hai giao tác đọc và ghi
Bộ phận cấp phát khóa (lock manager) sẽ chỉ cấp phát trên A nếu