intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Hệ quản trị cơ sở dữ liệu: Chương 5 - Lê Thị Minh Nguyện

Chia sẻ: Phong Phong | Ngày: | Loại File: PDF | Số trang:9

53
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Hệ quản trị cơ sở dữ liệu: Chương 5 giúp người học hiểu về "Xử lý truy xuất đồng thời". Nội dung trình bày cụ thể gồm có: Các vấn đề trong truy xuất đồng thời, cách giải quyết vấn đề, chế độ khóa,....

Chủ đề:
Lưu

Nội dung Text: Bài giảng Hệ quản trị cơ sở dữ liệu: Chương 5 - Lê Thị Minh Nguyện

8/25/2017<br /> <br /> Nội dung<br /> 1. Các vấn đề trong truy xuất đồng thời<br /> 2. Cách giải quyết vấn đề<br /> 3. Chế độ khóa<br /> <br /> Chương 5.<br /> Xử lý truy xuất đồng thời<br /> GV: Lê Thị Minh Nguyện<br /> Email: nguyenltm@huflit.edu.vn<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 2<br /> <br /> 1. Các vấn đề trong truy xuất đồng thời<br /> <br /> 1.1. Mất dữ liệu đã cập nhật (lost updated)<br /> <br /> 1.1. Mất dữ liệu đã cập nhật (lost updated)<br /> <br />  Xét 2 giao tác<br /> T1<br /> <br /> T2<br /> Read(A)<br /> A:=A+10<br /> Write(A)<br /> <br /> 1.2. Không thể đọc lại (unrepeatable read)<br /> 1.3. “Bóng ma” (phantom)<br /> <br /> Read(A)<br /> A:=A+20<br /> Write(A)<br /> <br />  Giả sử T1 và T2 được thực hiện đồng thời<br /> <br /> 1.4. Đọc dữ liệu chưa chính xác (dirty read)<br /> <br />  Dữ liệu đã cập nhật tại t4 của T1<br /> <br /> bị mất vì đã bị ghi chồng lên ở<br /> thời điểm t6<br /> <br /> A=50 T1<br /> t1<br /> Read(A)<br /> t2<br /> A:=A+10<br /> t3<br /> Write(A)<br /> t4<br /> t5<br /> t6<br /> A=60<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 3<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> T2<br /> Read(A)<br /> <br /> A:=A+20<br /> Write(A)<br /> <br /> A=70<br /> 4<br /> <br /> 1<br /> <br /> 8/25/2017<br /> <br /> 1.1. Mất dữ liệu đã cập nhật (lost updated) (tt)<br /> <br /> 1.1. Mất dữ liệu đã cập nhật (lost updated) (tt)<br /> <br /> Tình trạng xảy ra khi hai hay nhiều thao tác của các giao tác<br /> khác nhau cùng yêu cầu truy cập một mục dữ liệu. Các dữ<br /> liệu đã được các thao tác trước cập nhật nhưng lại bị các thao<br /> tác sau cập nhật lại làm thay đổi kết quả mong muốn.<br /> <br /> • Ví dụ: nhà sách còn 500 cuốn sách:<br /> Từ lúc T1 nhân viên A yêu cầu mua 400 cuốn sách từ khách hàng X.<br /> Cũng từ T1 nhân viên B yêu cầu mua 300 cuốn từ khách hàng Y.<br /> A và B đọc dữ liệu thấy 500 cuốn nên đều đồng ý bán.<br /> Vào lúc T2 nhân viên A sẽ thực hiện cập nhật số sách từ 500 thành 100.<br /> Vào lúc T3 nhân viên B sẽ cập nhật số sách từ 500 thành 200<br /> <br /> • Như vậy thao tác cập nhật của A không có tác dụng hay dữ liệu của A cập<br /> nhật sẽ bị mất vì B cập nhật sau.<br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 5<br /> <br /> • Xét 2 giao tác<br /> <br /> • Ví dụ: giả sử nhà sách còn 200 cuốn sách.<br /> T2<br /> <br /> Read(A)<br /> A:=A+10<br /> Write(A)<br /> <br /> 6<br /> <br /> 1.2. Không thể đọc lại (unrepeatable read) (tt)<br /> <br /> 1.2. Không thể đọc lại (unrepeatable read)<br /> T1<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 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ừ<br /> 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<br /> xong).<br /> 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<br /> chưa hoàn tất thì B sẽ từ chối bán 100 cuốn sách này.<br /> 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<br /> 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<br /> quay về trạng thái số sách còn lại là 200<br /> Nhưng B từ chối khách hàng.<br /> Nếu B không đọc được dữ liệu từ lúc T1 đến T3 thì sẽ như thế nào?<br /> <br /> Read(A)<br /> Print(A)<br /> Read(A)<br /> Print(A)<br /> <br /> • Giả sử T1 và T2 được thực hiện đồng thời<br /> A=50<br /> <br /> • T2 tiến hành đọc A hai lần thì<br /> cho hai kết quả khác nhau<br /> <br /> t1<br /> <br /> T2<br /> <br /> Read(A)<br /> Read(A)<br /> <br /> A=50<br /> <br /> Print(A)<br /> <br /> A=50<br /> <br /> t6<br /> <br /> Read(A)<br /> <br /> A=60<br /> <br /> t7<br /> <br /> Print(A)<br /> <br /> A=60<br /> <br /> t2<br /> t3<br /> <br /> A:=A+10<br /> <br /> t4<br /> t5<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> T1<br /> <br /> Write(A)<br /> <br /> 7<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 8<br /> <br /> 2<br /> <br /> 8/25/2017<br /> <br /> 1.3. “Bóng ma” (phantom)<br /> <br /> Đọc dữ liệu chưa chính xác (dirty read)<br /> <br /> • Xét 2 giao tác T1 và T2 được xử lý đồng thời<br /> <br /> • Xét 2 giao tác T1 và T2 được xử lý đồng thời<br /> <br /> • A và B là 2 tài khoản<br /> • T1 rút 1 số tiền ở tài khoản A rồi đưa vào tài khoản B<br /> • T2 kiểm tra đã nhận đủ tiền hay chưa?<br /> A=70, B=50<br /> <br /> T1<br /> <br /> • T2 đã đọc dữ liệu được ghi<br /> bởi T1 nhưng sau đó T1 yêu<br /> cầu hủy việc ghi<br /> <br /> T2<br /> <br /> t1<br /> <br /> Read(A)<br /> <br /> t2<br /> <br /> A:=A-50<br /> <br /> t3<br /> <br /> Write(A)<br /> <br /> A=70<br /> <br /> T1<br /> t1<br /> <br /> Read(A)<br /> <br /> t2<br /> <br /> A:=A+10<br /> <br /> t3<br /> <br /> Write(A)<br /> <br /> A=20<br /> <br /> t5<br /> <br /> t4<br /> <br /> A=20<br /> <br /> t6<br /> <br /> t5<br /> <br /> Read(B)<br /> <br /> B=50<br /> <br /> Print(A+B)<br /> <br /> A+B=70<br /> <br /> t6<br /> t7<br /> <br /> Read(B)<br /> <br /> t8<br /> <br /> B:=B+50<br /> <br /> t9<br /> <br /> Write(B)<br /> <br /> Read(A)<br /> <br /> t4<br /> Read(A)<br /> <br /> T2<br /> <br /> Print(A)<br /> Abort<br /> <br /> mất 50 ???<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 9<br /> <br /> 2. Cách giải quyết vấn đề<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 10<br /> <br /> 3. Chế độ khóa<br /> <br /> • Các hệ quản trị CSDL thương mại đã làm hết rồi!!!!!!<br /> • Thực hiện cơ chế Transaction và cơ chế khoa<br /> • Trước khi transaction đọc hoặc chỉnh sửa dữ liệu, nó cần<br /> được bảo vệ và tránh ảnh hưởng của các transaction khác<br /> đang chỉnh sửa cùng dữ liệu.<br /> <br /> 3.1. Các cấp độ khóa<br /> 3.2. Các mức cô lập cho giao tác<br /> 3.3. Live lock<br /> <br /> 3.4. Dead lock<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 11<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 12<br /> <br /> 3<br /> <br /> 8/25/2017<br /> <br /> 3.1. Các cấp độ khóa<br /> <br /> 3.1. Các cấp độ khóa (tt)<br /> • Các kiểu lock<br /> • Binary Locks<br /> <br /> • Các mức Locking<br /> • Database level<br /> • Table level<br /> <br /> • Có 2 trạng thái: locked (1) or unlocked (0).<br /> <br /> • Page level<br /> <br /> • Nếu 1 object bị lock bởi 1 transaction, không transaction nào<br /> được sử dụng object đó<br /> <br /> • Row level<br /> • Field (attribute) level<br /> <br /> • Nếu 1 object là unlocked, bất kỳ transaction nào cũng có thể<br /> lock object đó để sử dụng<br /> <br /> Bất kể mức khóa nào DBMS có thể<br /> dùng 2 loại khóa khác nhau: Binary và<br /> Shared / Exclusive<br /> <br /> • 1 transaction phải “unlock”object sau khi hoàn tất.<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 13<br /> <br /> Ví dụ<br /> <br /> 14<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 14<br /> <br /> 3.1. Các cấp độ khóa (tt)<br /> S<br /> <br /> T1<br /> <br /> T2<br /> <br /> • Các kiểu lock<br /> • Shared Locks<br /> <br /> Lock(A)<br /> Read(A,t)<br /> t:=t+100<br /> Write(A,t)<br /> Unlock(A)<br /> <br /> • Một shared lock tồn tại khi các transaction đồng thời đọc dữ<br /> liệu<br /> <br /> Lock(A)<br /> Read(A,s)<br /> s:=s*2<br /> Write(A,s)<br /> Unlock(A)<br /> Lock(B)<br /> Read(B,s)<br /> s:=s*2<br /> Write(B,s)<br /> Unlock(B)<br /> <br /> • Một shared lock không làm đụng độ dữ liệu khi các transaction<br /> đồng thời chỉ đọc dữ liệu<br /> • Một shared lock được gán khi transaction muốn đọc dữ liệu và<br /> dữ liệu đó không tồn tại exclusive lock.<br /> <br /> Lock(B)<br /> Read(B,t)<br /> t:=t+100<br /> Write(B,t)<br /> Unlock(B)<br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 15<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 16<br /> <br /> 4<br /> <br /> 8/25/2017<br /> <br /> 3.1. Các cấp độ khóa (tt)<br /> <br /> 3.1. Các cấp độ khóa (tt)<br /> <br /> • Các kiểu lock<br /> • Exclusive Locks<br /> <br /> • Các kiểu lock<br /> • Exclusive Locks<br /> <br /> • Tồn tại khi transaction ghi dữ liệu<br /> <br /> • Tồn tại khi transaction ghi dữ liệu<br /> <br /> • Được sử dụng khi có khả năng đụng độ dữ liệu<br /> <br /> • Được sử dụng khi có khả năng đụng độ dữ liệu.<br /> <br /> • Một exclusive lock sẽ được gán khi transaction muốn ghi dữ<br /> liệu và dữ liệu đó chưa bị lock<br /> <br /> • Một exclusive lock sẽ được gán khi transaction muốn ghi dữ<br /> liệu và dữ liệu đó chưa bị lock<br /> <br /> • Được dùng cho thao tác sửa đổi dữ liệu như lệnh INSERT,<br /> UPDATE hay DELETE. Bảo đảm là nhiều lệnh cập nhật không<br /> thực hiện trên cùng 1 tài nguyên cùng 1 lúc<br /> <br /> • Được dùng cho thao tác sửa đổi dữ liệu như lệnh INSERT,<br /> UPDATE hay DELETE. Bảo đảm là nhiều lệnh cập nhật không<br /> thực hiện trên cùng 1 tài nguyên cùng 1 lúc<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 17<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 3.1. Các cấp độ khóa (tt)<br /> <br /> 3.2. Các mức cô lập cho giao tác<br /> <br /> • Các kiểu lock<br /> • Exclusive Locks<br /> <br /> • Read Uncommitted<br /> <br /> • Ví dụ: nếu lệnh Update sửa đổi các hàng trong một bảng mà<br /> lệnh này có kết nối (join) với 1 bảng khác thì sẽ cần bao<br /> nhiêu khóa?<br /> <br /> • Một khóa shared cho các hàng đọc được trong bảng kết nối<br /> • Một khóa exclusive cho các hàng được cập nhật trong bảng<br /> update.<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 19<br /> <br /> 18<br /> <br /> • Read Committed<br /> • Repeatable Read<br /> <br /> • Serializable<br /> <br /> Hệ quản trị Cơ sở dữ liệu<br /> <br /> 20<br /> <br /> 5<br /> <br />
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2