Transaction là tập hợp các thao tác có thứ tự truy xuất dữ liệu trên CSDL thành 1 đơn vị công việc logic xem là 1 thao tác nguyên tố, chuyển CSDL từ trạng thái nhất quán này sang trạng t
Trang 1Hệ quản trị CSDL
Trình bày: Hồ Thị Hoàng Vy
Trang 2Nội dung
Transaction Tranh chấp đồng thời
Xử lý tranh chấp đồng thời
Deadlock
Trình bày các tình huống tranh chấp và cách xử lý
Tránh deadlock
Trang 3• Nhắc lại kiến thức seminar lần 1
– Transaction là gì ? – Cách khai báo một transaction như thế nào?
Trang 4Transaction là tập hợp các thao
tác có thứ tự truy xuất dữ liệu
trên CSDL thành 1 đơn vị công việc
logic (xem là 1 thao tác nguyên
tố), chuyển CSDL từ trạng thái nhất
quán này sang trạng thái nhất quán
khác
Rollback: Kết thúc giao tác thất bại
Khai báo giao tác
Commit: Kết thúc giao tác thành công Begin tran: bắt đầu giao tác
Khi nào thì rollback
Dữ liệu sẽ Được xác Nhận trên CSDL
Khi có một lệnh nào đó trong giao tác bị lỗi và cần phải khôi phục lại
dữ liệu
Trang 5Transaction (tt)
• Lưu ý:
- Rollback không có tác dụng return
- Nếu có khai báo giao tác mà không có kết thúc giao tác giao tác vẫn còn thực hiện khi store procedure kết thúc.
- Phải luôn đảm bảo lúc runtime một trong 2 cặp [begin tran - commit] hoặc
Các câu lệnh xử lý khi bị lỗi
Rollback Tran return
END Commit
Trang 6Tranh chấp đồng thời
1 Tranh chấp đồng thời là gì ?
• Các tình huống có thể xảy ra tranh chấp
• Một số lỗi khi truy xuất đồng thời:
Trang 7Khi nhiều giao tác cùng thực hiện truy xuất trên một đơn vị dữ liệu tại một thời điểm để thực hiện các thao tác đọc, ghi lên đơn vị dữ liệu đó đụng độ => tranh chấp đồng thời.
Trang 8Tranh chấp đồng thời (tt)
Giao tác 1 Giao tác 2 Nhận xét
trên 1 đơn vị dữ liệu
Như vậy khi có 2 transaction (của 2 connection khác nhau) có ít nhất
1 thao tác ghi trên cùng một đơn vị dữ liệu sẽ xảy ra tình trạng tranh chấp Nếu để tình trạng tranh chấp này xảy ra sẽ dẫn đến những sai sót trên CSDL
Các tình huống xảy ra tranh chấp đồng thời
Trang 9• Một bảng (table) trong cơ sở dữ liệu
• Một cơ sở dữ liệu (database).
Trang 10Một số lỗi khi truy xuất đồng thời
Dirty read
Unrepeatable read
Phantom
Lost update
4 Mất dữ liệu cập nhật
1 Đọc dữ liệu rác
2 Không thể
đọc lại dữ liệu
3 Bóng ma
Trang 11Dirty read (đọc dữ liệu rác)
Trang 12Unrepeatable read
Hai lần đọc A của T1 cho kết quả khác nhau (trong cùng 1 giao tác)
Trang 13Hai lần đọc A của T1 cho kết quả khác nhau (trong cùng 1 giao tác)
Trang 14Lost update
Giao tác T2 thực hiện ghi đè lên dữ liệu được ghi bởi giao tác T1
Trang 15Xử lý tranh chấp đồng thời
2 Sử dụng mức cô lập
Mức cô lập là những cấu hình được thiết lập trong các giao tác quy định việc xin khóa/giữ khóa của những thao tác đọc/ghi lên đvdl
1 Một số quy tắc đọc / ghi trên CSDL
HQTCSDL xử lý tranh chấp đồng thời ở mức cơ bản là nhờ những quy tắc đọc/ghi trên dvdl nhờ
sự hỗ trợ của việc cấp phát và thu hồi khóa
3 Khóa trực tiếp từ dòng lệnh
Trang 161.Các quy tắc đọc/ghi trên CSDL
1 Khi giao tác T thực hiện việc đọc đơn vị dữ liệu (đvdl) A T thường xin khóa đọc trên A Nếu hệ thống cấp phát khóa đọc cho T thì T được phép đọc đvdl A
2 Khi giao tác T thực hiện việc ghi lên đvdl A T bắt buộc phải xin khóa ghi trên
A Nếu hệ thống cấp phát khóa ghi cho T thì T được phép ghi lên dvdl A
3 Tại một thời điểm, chỉ có tối đa 1 giao tác giữ khóa ghi trên 1 đvdl
4 Tại một thời điểm, có thể có nhiều giao tác cùng giữ khóa đọc trên đvdl
5 Nếu một giao tác T đang giữ khóa ghi trên A thì đến hết giao tác
(rollback/commit) thì T mới trả khóa ghi
6 Khi một giao tác T đang giữ khóa ghi trên A thì các giao tác khác muốn xin khóa đọc trên A thì giao tác đó phải chờ
7 Khi một giao tác T đang giữ khóa đọc trên A thì các giao tác khác muốn xin khóa ghi trên A thì giao tác đó phải chờ
Trang 17Bảng tương thích giữa các loại khoá
Cho phép (tương thích)Không cho phép (không tương thích)
Trang 18Xử lý tranh chấp đồng thời
2 Sử dụng mức cô lập
Mức cô lập là những cấu hình được thiết lập trong các giao tác quy định việc xin khóa/giữ khóa của những thao tác đọc/ghi lên đvdl
1 Một số quy tắc đọc / ghi trên CSDL
HQTCSDL xử lý tranh chấp đồng thời ở mức cơ bản là nhờ những quy tắc đọc/ghi trên dvdl nhờ
sự hỗ trợ của việc cấp phát và thu hồi khóa
3 Khóa trực tiếp từ dòng lệnh
Trang 192 Sử dụng mức cô lập
Read Uncommitted
Read Committed
Serializable
BEGIN TRAN SET TRAN ISOLATION LEVEL Tên_mức_cô_lập
Các lệnh của giao tác
Repeatable Read
Tất cả các lệnh đọc ghi trong giao tác đều chịu ảnh hưởng của mức cô lập
Mức cô lập
mặc định
Trang 201 Read Uncommitted
• Đặc điểm:
– Đọc không cần xin khóa
– Khi dùng mức cô lập này có khả năng bị các lỗi:
Trang 212 Read Committed
• Đặc điểm:
– Đọc phải xin khóa
– Khóa đọc xong trả liền
– Khi dùng mức cô lập này có khả năng bị
Trang 22Repeatable Read
• Đặc điểm:
– Đọc phải xin khóa
– Khóa đọc được giữ đến hết giao tác
– Khi dùng mức cô lập này có khả năng bị
Trang 23• Đặc điểm:
– Đọc phải xin khóa
– Khóa đọc được giữ đến hết giao tác
– Không cho insert những dòng dữ liệu thỏa điều kiện thiết lập share-lock
– Khi dùng mức cô lập này có khả năng bị
các lỗi:
Mất dữ liệu cập nhật
• giải quyết được lỗi dirty read và lỗi
unrepeatable read và phantom.
Trang 24• Minh hoạ tình huống
• Demo tình huống
•Tránh deadlock
Dead-lock
Circle deadlock
• Minh hoạ tình huống
• Demo tình huống
•Tránh deadlock
Conversion
deadlock Trong truy xuất đồng thời, deadlock là một trạng thái trong đó các giao tác chờ nhau về mặt tài nguyên làm cho hệ thống đứng yên
Trang 26Cycle deadlock
T1 chờ T2 trả khóa ghi trên B, và T2 chờ T1 trả khóa ghi
trên A Hệ thống bị treo
Trang 27Conversion deadlock
Giữ S-lock
Yêu cầu X-lock
Giữ S-lock
Yêu cầu X-lock Deadlock
Trang 28Conversion deadlock
T1 chờ T2 trả khóa đọc trên A, và T2 chờ T1 trả khóa đọc trên A Hệ thống bị treo
Trang 29Tránh deadlock
Chuyển về dạng tuần tự - phối hợp transaction, mức
độ cô lập và lock
Trang 31Thank You!