680 likes | 1.73k Vues
Chương 4 . Xử lý truy xuất đồng thời. Đặt vấn đề. DataBase. A. A. C. B. D. Tranh chấp dữ liệu. Nội dung bài học. Giao dịch (Transaction) Các vấn đề của truy xuất đồng thời Kỹ thuật khóa trong SQL Server. Nội dung bài học. Giao dịch (Transaction) Khái niệm giao dịch
E N D
Đặtvấnđề DataBase A A C B D Tranhchấp dữ liệu
Nội dung bàihọc • Giaodịch (Transaction) • Cácvấnđềcủatruyxuấtđồngthời • Kỹthuậtkhóatrong SQL Server
Nội dung bàihọc • Giaodịch (Transaction) • Kháiniệmgiaodịch • Cáctínhchất ACID củagiaodịch • Sửdụnggiaodịchtrong SQL server • Cácvấnđềcủatruyxuấtđồngthời • Kỹthuậtkhóatrong SQL Server
Kháiniệmgiaodịch • Giao dịchlà 1 đơn vị xử lý nguyên tố gồm 1chuỗi các hành động tương tác lên CSDL. • Khithựchiệnmộtgiaodịchhoặcphảithựchiện tất cả các hành độngcủa nó hoặc không thực hiện hành độngnào hết. • Một số thuật ngữ liên quan đến giao dịch: • Begin [transaction/tran]: bắt đầu một transaction • Commit [transaction/tran]: hoàn tất một transaction • Rollback [transaction/tran] : quay lui, hủy bỏ toàn bộ phần giao dịchđã thực hiện trước đó
Tínhchất ACID củagiaodịch • Tínhnguyêntố (Atomicity) • Khôngthể chia nhỏđượcnữa • Tínhnhấtquán (Consistancy) • GiaodịchkhôngphávỡtrạngtháinhấtquáncủaCSDL • Tínhđộclập (Isolation) • Giaodịchkhôngảnhhưởng/ chịuảnhhưởngcủagiaodịchkhác • Tínhbềnvững (Durability) • Sau khi giao dịchcommit thành công, tất cả những thay đổi trên CSDL mà giao dịchđã thực hiện phải được ghi nhận chắc chắn (vào ổ cứng). • HQT CSDL luôn phải có cơ chế phục hồi dữ liệu để đảm bảo điều này, thường dùng cơ chế ghi nhận bằng transaction log
Đểđảmbảotính Atomicity • Để đảm bảo tính chất A của giao dịch, người sử dụng phải điều khiểntường minhsự rollback của giao dịch. • Cần kiểm tra lỗi sau khi thực hiện mỗi thao táctrong giao dịchđể có thể xử lý rollback kịp thời • Kiểmtralỗi: dùngtry…catchhoặc @@error • Vídụ: TAIKHOAN (MaTK, ChuTK, SoDuTK) Viếtthủtụcđểchuyểnkhoảnmộtsốtiềntừtàikhoảnnày sang tàikhoảnkhác
Nội dung bàihọc • Giaodịch (Transaction) • Cácvấnđềcủatruyxuấtđồngthời • Mấtdữliệuđãcậpnhật (Lost Updated) • Đọcphảidữliệurác (Dirty Read) • Khôngthểđọclại (Unrepeatable Read) • “Bóng ma” dữliệu (Phantom) • Kỹthuậtkhóatrong SQL Server
Mấtdữliệuđãcậpnhật(Lost Updated) • P1và P2xửlýđồngthời: A=30 A=15 A=20 A=20 A=20 A=15 A=30 A=15 A=30 A=30
Đọcphảidữliệurác(Dirty Read) • P1và P2xửlýđồngthời: A=50 B=40 B=30 B=30 A=50 B=30 B=40 10 B=40 B=40 C=90 C=90
Khôngthểđọclại (Unrepeatable Read) • P1và P2xửlýđồngthời: A=50 A=60 A=50 A=50 A=50 A=60 A=60 A=60
Bóng ma dữliệu (Phantom) • P1và P2xửlýđồngthời: A=50 B=30 C=70 A=50 C=70 C=70 A=50
Nội dung bàihọc • Giaodịch (Transaction) • Cácvấnđềcủatruyxuấtđồngthời • Kỹthuậtkhóatrong SQL Server • Kỹthuậtkhóa (Locking) • Cácmứcđộcôlập • Khóatrựctiếptrongcâulệnh • Deadlock
Kỹthuậtkhóa • Mộtgiaodịch P trướckhimuốnthaotác (read/write) lênmộtđơnvịdữliệu A phảiphátramộtyêucầuxinkhóa A: lock(A) • Nếuyêucầuđượcchấpthuậnthìgiaodịch P mớiđượcphépthaotáclênđơnvịdữliệu A • Saukhithaotácxong, giaodịch P phảiphátralệnhgiảiphóng A: unlock(A)
Vídụkỹthuậtkhóa Lock(A), Read(A) A=50 A=50 Read(A) Lock(A), A=A-30 A=20 A=A+30 A=80 A=60 Write(A) A=20 A=80 Write(A) , Unlock(A) A=30 , Unlock(A) Read(A) A=80 Read(A) Lock(A), A=A-30 Write(A) Read(A) , Unlock(A) Read(A) Lock(A), A=A+30 Write(A) , Unlock(A)
Khóađọc + khóaghi • Read lock • GiaodịchgiữSlockđượcphépĐỌCdữliệu, nhưngkhôngđượcphépghi. • NhiềugiaodịchcóthểđồngthờigiữSlocktrêncùng 1 đơnvịdữliệu • Write lock • GiaodịchgiữXlockđượcphépGHI + ĐỌC dữliệu • Tại 1 thờiđiểmchỉcótốiđa1 giaodịchđượcquyềngiữXlocktrên 1 đơndữliệu. • KhôngthểthiếtlậpSlocktrênđơnvịdữliệuđangcódạngXlock. • = Shared lock (Slock) = Exclusive lock (Xlock)
Khóadựđịnhghi • Update lock = Intent - to - update lock (Ulock): Khóa dự định ghi • Ulock sử dụng khi đọc dữ liệu với dự định ghi trở lại trên dữ liệu này. • Ulock là chế độ khoá trung gian giữa Slock và Xlock • Khi thực hiện thao tác ghi lên dữ liệu thì bắt buộc Ulock phải tự động chuyển thành Xlock • GiaodịchgiữUlockđượcphépGHI + ĐỌC dữliệu • Tại 1 thờiđiểmchỉcótốiđa1 giaodịchđượcquyềngiữUlocktrên 1 đơndữliệu. • CóthểthiếtlậpSlocktrênđơnvịdữliệuđangcódạngUlock
Nội dung bàihọc • Cácvấnđềcủatruyxuấtđồngthời • Kỹthuậtkhóa • Kỹthuậtkhóatrong SQL Server • Kỹthuậtkhóa (Locking) • Mứccôlậptronggiaodịch • Khóatrựctiếptrongcâulệnh • Deallock
Mứcđộcôlậpcủagiaodịch • Mụcđích: • Tựđộng đặt khóa cho các thao tác (đọc) trong kết nối dữ liệu hiện hành. • Cácmứcđộcôlập • Read Uncommitted • Read Committed • Repeatable Read • Serializable
Read Uncommitted • Đặcđiểm: • Đọcdữliệu: khôngcầnphảithiếtlậpSLock • Ghidữliệu: SQL Server tựđộngthiếtlậpXLocktrênđơnvịdữliệuđượcghi, XLockđượcgiữchođếnhếtgiaodịch
Read Uncommitted + vấnđề Lost Updated KHACHHANG ABC ABC ABC XYZ XYZ XYZ Xlock Xlock Xlock
Read Uncommitted + vấnđề Dirty Read KHACHHANG ABC ABC Xlock
Read Uncommitted • Ưu điểm: • Giảiquyếtvấnđề Lost Updated • KhôngcầnthiếtlậpSlockkhiđọc=> khôngcảntrởgiaodịchkhácgiữkhóaXlock. • Hạnchế: • Cókhảnăngxảyra 3 vấnđềcủatruyxuấtđồngthời: Dirty Read, Unrepeatable Read, Phantom
Read Committed • Đặc điểm: • Đọcdữliệu: SQL server tựđộngthiếtlậpSLock trên đơn vị dữ liệu được đọc, SLock được giải phóngngay sau khi đọc xong • Ghidữliệu: SQL server tựđộngthiếtlậpXLock trên đơn vị dữ liệu được ghi, XLock được giữ chođến hết giao dịch
Read Commited + vấnđề Dirty Read KHACHHANG LêVănTuyên ABC ABC Xlock Slock Slock
Read Commited + vấnđềUnrepeatable Read KHACHHANG LêVănTuyên ABC ABC Slock Slock Xlock
Read Committed • Ưu điểm: • Giải quyết vấn đề Dirty Read, Lost Updated • SLock được giải phóng ngay ==> không cản trở nhiều đến thao tác ghidữliệucủa các giao dịchkhác. • Hạnchế: • Chưa giải quyết được vấn đề Unrepeatable Read, Phantom
Repeatable Read • Đặc điểm: • Đọcdữliệu: SQL server tựđộngthiếtlập Slock trên đơn vị dữ liệu được đọc và giữ Slock đến hếtgiao dịch. • Ghidữliệu: SQL server tựđộngthiếtlậpXLock trên đơn vị dữ liệu được ghi, XLock được giữ chođến hết giao dịch.
Repeatable Read + vấnđề Unrepeated Read KHACHHANG LêVănTuyên LêVănTuyên ABC Slock Xlock Xlock
Repeatable Read + vấnđề Phantom HANGHOA Nồicơmđiện Sharp Nồicơmđiện Sharp Slock Slock IPad IP IPad Cái 100 10000000
Repeatable Read • Ưu điểm: • Giải quyết được 3 vấn đề: Lost Updated, Dirty Read và Unrepeatable Read • Khuyết điểm: • Chưa giải quyết được vấn đề Phantom, do vẫn cho phép insert những dòng dữliệu thỏa điều kiện thiết lập Slock • Slock được giữ đến hết giao dịch==> cản trở việc cập nhật dữ liệu của cácgiaodịchkhác
Serializable • Đặc điểm: • Đọcdữliệu: SQL server tựđộngthiếtlậpSLock trên đơn vị dữ liệu được đọc và giữ Slock này đến hết giao dịch • Không cho phép thêmnhững dòng dữ liệu thỏa mãn điều kiện thiết lập Slock • Ghidữliệu: SQL server tựđộngthiếtlậpXLock trên đơn vị dữ liệu được ghi, ELock được giữ chođến hết giao dịch
Serializable + vấnđề Phantom HANGHOA Nồicơmđiện Sharp Nồicơmđiện Sharp Slock IP IPad Cái 100 10000000
Serializable • Ưu điểm: • Giải quyết được 4 vấn đề: Lost Updated, Dirty Read,Unrepeatable ReadvàPhantom • Khuyết điểm: • Slock được giữ đến hết giao dịch==> cản trở việc cập nhật dữ liệu của cácgiaodịchkhác • Không cho phép Insert những dòng dữ liệu thỏa mãn điều kiện thiết lập Slock ==> cản trở việc thêmmớidữliệucủacácgiaodịchkhác
Lưu ý • Mứccôlậpmặcđịnhtrong SQL Server làRead Commited • MứccôlậpkhôngquantâmkhóaUlock • Tầm vực của Isolation level là ở mức connection chứ không phải mức transaction. • Khi 1 connection N được đặt mức cô lập X thì X sẽ phát huy hiệu lực trên tất cả các transaction Ti chạy trên N
Nội dung bàihọc • Cácvấnđềcủatruyxuấtđồngthời • Kỹthuậtkhóa • Kỹthuậtkhóatrong SQL Server • Kỹthuậtkhóa (Locking) • Mứccôlậptronggiaodịch • Khóatrựctiếptrongcâulệnh • Deadlock
Đặtvấnđề • Mức cô lập quyết định cách phát và giữ khóa S trong một transaction và có hiệu lực trên tất cả các thao tác đọc trong transaction đó. • Thực tế, ta cần phát và giữ khóa Slocktheo các cách khác nhau cho các thao tác đọc khác nhau trong cùng một transaction
Khóatrựctiếptrongcâulệnh • Cúpháp:
KếthợpMứccôlập + Khóatrựctiếp • Trong transaction luôn có các thao tác yêu cầu bảo vệ nghiêm ngặt và các thao tác ít yêu cầu bảo vệ nghiêm ngặt • Dùng mứccôlậpứng với yêu cầu bảo vệ ít nghiêm ngặt nhất • Bổ sung lock trựctiếpvào các thao tác yêu cầu bảo vệ nghiêm ngặt hơn mức mà mứccôlậpđó cung cấp.
Nội dung bàihọc • Cácvấnđềcủatruyxuấtđồngthời • Kỹthuậtkhóa • Kỹthuậtkhóatrong SQL Server • Kỹthuậtkhóa (Locking) • Mứccôlậptronggiaodịch • Khóatrựctiếptrongcâulệnh • Deadlock
Deadlock • Khi xử lý đồng thời, không tránh khỏi việc transaction này phải chờ đợi transaction khác • Nếu vì lý do gì đó mà hai transaction lại chờ lẫn nhau vĩnh viễn, không cái nào trong hai có thể hoàn thành được thì ta gọi đó là hiện tượng Dead Lock
Xửlý Deadlock trong SQL Server • SQL Server sẽ chọn 1 trong 2 transaction gây deadlock để hủy bỏ, khi đó transaction còn lại sẽ được tiếp tục thực hiện cho đến khi hoàn tất • Transaction bị chọn hủybỏ là transaction mà SQL ước tính chi phí cho phần việc đã làm được ít hơn transaction còn lại.