Thuật toỏn TO đa phiờn bản nhằm loại bỏ hoàn toàn khụng khởi động lại giao dịch trong mụi trường cơ sở dữ liệu tập trung. Trong thuật toỏn TO đa phiờn bản, cỏc phộp cập nhật khụng sửa đổi cơ sở dữ liệu, mỗi thao tỏc ghi tạo ra một phiờn bản mới của mục dữ liệu. Mỗi phiờn bản được đỏnh dấu bằng nhón thời gian của giao dịch tạo ra nú. Vỡ thế, thuật toỏn đa phiờn bản phải mất nhiều khụng gian nhớ để lưu về thời gian. Khi xử lý giao dịch ở một trạng thỏi của cơ sở dữ liệu được thực hiện tuần tự theo thứ tự nhón thời gian.
Sự tồn tại của cỏc phiờn bản hoàn toàn trong suốt đối với người sử dụng. Người sử dụng đưa ra yờu cầu bằng cỏch tham chiếu mục dữ liệu mà khụng chỉ ra phiờn bản cụ thể nào. Bộ quản lý giao dịch sẽ gỏn một nhón thời gian cho mỗi giao dịch, nú cũng được dựng để theo dừi nhón thời gian của mỗi phiờn bản. Cỏc thao tỏc được bộ lập lịch xử lý như sau:
1. Thao tỏc Ri(x) được dịch thành một thao tỏc đọc trờn một phiờn bản của x, thực hiện bằng cỏch tỡm một phiờn bản của x, giả sử là xv sao cho ts(xv) là nhón thời gian lớn nhất trong số cỏc nhón thời gian nhỏ hơn ts(Ti). Ri(xv) được gửi đến bộ xử lý dữ liệu.
2. Thao tỏc Wi(x) được dịch thành Wi(xv) để ts(xv) = ts(Ti) và được gửi đến bộ xử lý dữ liệu khi và chỉ khi khụng cú giao dịch nào khỏc cú nhón thời gian lớn hơn ts(Ti) đó đọc giỏ trị của một phiờn bản của x, giả sử là xr với ts(xr) > ts(xs). Núi cỏch khỏc nếu bộ lập lịch đó xử lý một thao tỏc Rj(xr) sao cho ts(Ti) < ts(xr) < ts(Tj) thỡ thao tỏc Wi(x) bị loại bỏ.
Cỏc quy tắc trờn sẽ bảo đảm cho một bộ lập lịch xử lý cỏc yờu cầu đọc và ghi của cỏc giao dịch tạo ra được cỏc lịch biểu khả tuần tự. Cỏc phiờn bản của cơ sở dữ liệu cú thể được xúa bỏ để tiết kiệm khụng gian bộ nhớ, nếu hệ quản trị cơ sở dữ liệu khụng cũn nhận một giao dịch nào cú yờu cầu truy cập đến cỏc phiờn bản đó xúa.
4.8 CÁC THUẬT TOÁN ĐIỀU KHIỂN ĐỒNG THỜI LẠC QUAN Cỏc thuật toỏn điều khiển đồng thời bằng khúa chốt và bằng nhón thời gian giả sử rằng tương tranh giữa cỏc giao dịch thường xảy ra và khụng cho phộp một giao dịch truy cập một mục dữ liệu nếu một giao dịch tương tranh đang truy cập mục dữ liệu đú. Vỡ vậy, việc thực hiện một thao tỏc của giao dịch phải tuõn thủ cỏc quỏ trỡnh theo thứ tự: kiểm tra, đọc, tớnh toỏn và ghi. Thuật toỏn khụng xột đến cỏc giao dịch cập nhật vỡ chỳng gõy ra cỏc vấn đề về nhất quỏn. Cỏc hành động chỉ đọc khụng cú tớnh toỏn và ghi. Giả thiết ghi cú cả hành động Commit. Ngược lại, cỏc giao dịch lạc quan (Optimistic) làm chậm quỏ trỡnh kiểm tra cho đến trước quỏ trỡnh ghi. Vỡ vậy, một thao tỏc được trao cho bộ lập lịch lạc quan khụng bao giờ bị trễ. Cỏc thao tỏc đọc, tớnh toỏn và ghi được thực hiện tự do mà khụng cú cập nhật vào cơ sở dữ liệu thực sự. Mỗi giao dịch lỳc đầu đều cập nhật trờn cỏc bản sao cục
bộ của mục dữ liệu và kiểm tra những cập nhật này cú duy trỡ tớnh nhất quỏn của cơ sở dữ liệu hay khụng. Nếu nhất quỏn, thỡ cỏc thay đổi được ghi vào cơ sở dữ liệu thực tế. Ngược lại, giao dịch sẽ bị hủy bỏ và phải khởi động lại.
Hỡnh 4.9: Cỏc pha thực hiện giao dịch
Thiết kế thuật toỏn điều khiển đồng thời lạc quan dựa nhón thời gian, vỡ hai lý do:
• Phần lớn cỏc nghiờn cứu về cỏc phương phỏp đồng thời lạc quan chỉ tập trung vào cỏc hệ quản trị cơ sở dữ liệu tập trung. • Cỏc thuật toỏn lạc quan chưa được cài đặt trờn bất kỳ một hệ
quản trị cơ sở dữ liệu thương mại hoặc thử nghiệm nào. Bản cài đặt duy nhất IMS-FASTPATH của hóng IBM cung cấp cỏc hàm cơ sở truy cập đến cơ sở dữ liệu theo cỏch thức lạc quan tập trung.
Thuật toỏn điều khiển đồng thời lạc quan được mở rộng cho cỏc hệ quản trị cơ sở dữ liệu phõn tỏn. Khỏc với thuật toỏn TO bi quan, khụng chỉ lạc quan mà cũn gỏn nhón thời gian. Nhón thời gian chỉ được liờn kết với cỏc giao dịch, khụng cú nhón thời gian đọc và nhón thời gian ghi. Hơn nữa, nhón thời gian khụng được gỏn cho giao dịch vào lỳc bắt đầu bước kiểm tra, vỡ nhón thời gian chỉ cần cho bước kiểm tra và nếu gỏn sớm cú thể gõy ra loại bỏ giao dịch một cỏch khụng cần thiết.
Một giao dịch Tiđược chia nhỏ bởi bộ quản lý giao dịch tại vị trớ gốc thành một số giao dịch con, mỗi giao dịch con được thực hiện tại
nhiều vị trớ khỏc nhau. Ký hiệu Tij là một giao dịch con của Ti thực hiện tại trạm j. Đến bước kiểm tra, thực hiện cục bộ là một dóy cỏc thao tỏc được mụ tả trong hỡnh 4.10. Một nhón thời gian được gỏn cho giao dịch và được sao lại cho tất cả cỏc giao dịch con của nú. Kiểm tra cục bộ của Tijđược thực hiện theo cỏc quy tắc sau đõy:
Quy tắc 1: Với mọi giao dịch Tk sao cho ts(Tk) < ts(Tij) đó hoàn tất bước ghi trước khi Tij bắt đầu quỏ trỡnh đọc (hỡnh 4.10a), thỡ việc kiểm tra thành cụng cỏc bước thực hiện giao dịch theo đỳng thứ tự tuần tự.
Quy tắc 2: Nếu cú một giao dịch Tk sao cho ts(Tk) < ts(Tij) và Tk đó hoàn tất quỏ trỡnh ghi trong khi Tij đang trong bước đọc (hỡnh 4.10b), thỡ kiểm tra thành cụng nếu WS(Tk) ∩ RS(Tij) = ∅.
Quy tắc 3: Nếu cú một giao dịch Tk sao cho ts(Tk) < ts(Tij) và Tk chưa hoàn tất quỏ trỡnh đọc trước khi Tij hoàn tất pha đọc (hỡnh 4.10c), thỡ kiểm tra thành cụng nếu WS(Tk) ∩ RS(Tij) = ∅ và WS(Tk) ∩ WS(Tij) = ∅.
Theo quy tắc 1, cỏc giao dịch thực hiện tuần tự theo đỳng dấu thời gian. Quy tắc 2 đảm bảo khụng cú mục dữ liệu nào được cập nhật bởi Tk lại được Tijđọc và Tk kết thỳc việc ghi cỏc cập nhật của nú vào cơ sở dữ liệu trước khi Tij bắt đầu ghi. Vỡ thế cỏc cập nhật của Tij sẽ khụng bị ghi chồng lờn bởi cỏc cập nhật của Tk. Quy tắc 3 tương tự như quy tắc 2 nhưng khụng đũi hỏi Tk kết thỳc việc ghi trước khi Tij bắt đầu ghi, chỉ yờu cầu cỏc cập nhật của Tk khụng ảnh hưởng đến ghi hoặc đọc của Tij.
Khi giao dịch đó được kiểm tra cục bộđểđảm bảo tớnh nhất quỏn cục bộ, thỡ yờu cầu cần phải được kiểm tra toàn cục đểđảm bảo rằng tớnh nhất quỏn toàn cục. Đỏng tiếc hiện nay chưa cú phương phỏp nào để kiểm tra việc này. Người ta sử dụng phương phỏp nếu một giao dịch được kiểm tra toàn cục khi tất cả cỏc giao dịch đi trước nú theo thứ tự tuần tự húa cục bộđều kết thỳc. Đõy là phương phỏp bi quan vỡ nú thực hiện kiểm tra toàn cục sớm và làm trễ một giao dịch. Tuy nhiờn, nú đảm bảo cho cỏc giao dịch thực hiện theo cựng một thứ tự tại mỗi trạm.
Cỏc thuật toỏn điều khiển đồng thời lạc quan cho phộp mức độ hoạt động đồng thời cao. Trong trường hợp cỏc tương tranh giao dịch ớt xảy ra, cơ chế lạc quan thực hiện hiệu quả hơn là cơ chế khúa. Nhược điểm chủ yếu của cỏc thuật toỏn lạc quan là chi phớ lưu trữ cao. Để kiểm tra một giao dịch, thuật toỏn phải lưu cỏc tập đọc và tập ghi của nhiều giao dịch đó kết thỳc. Đặc biệt là cỏc tập đọc và tập ghi của cỏc giao dịch đó kết thỳc nhưng đó đang tiến hành, khi giao dịch Tijđi đến vị trớ j cũng phải được lưu lại để kiểm tra Tij.
4.9 QUẢN Lí BẾ TẮC
Phần lớn cỏc thuật toỏn điều khiển đồng thời theo khúa và bằng nhón thời gian cú thể dẫn đến bế tắc (Deadlock) trong giao dịch. Cỏc thuật toỏn điều khiển đồng thời theo khúa truy cập độc quyền đến cỏc dữ liệu và cỏc giao dịch cú thể phải đợi để nhận được khúa. Một số thuật toỏn TO đũi hỏi giao dịch phải chờđợi, như TO nghiờm ngặt. Vỡ
vậy, hệ quản trị cơ sở dữ liệu phõn tỏn cần phải cú những cơ chếđể quản lý sự bế tắc. Một bế tắc cú thể xảy ra khi cỏc giao dịch phải chờ đợi một giao dịch khỏc. Một cỏch khụng hỡnh thức, một tỡnh huống bế tắc là một tập cỏc yờu cầu khụng bao giờ được đỏp ứng từ cơ chếđiều khiển đồng thời.
Vớ dụ 4.13: Xột giao dịch Ti và Tj đang giữ cỏc khúa ghi trờn hai thực thể x và y [nghĩa là wli(x) và wlj(y)]. Giả sử Ti cần một rli(y) hoặc một wli(y). Vỡ y đang bị khúa bởi giao dịch Tj, Ti sẽ phải đợi cho đến khi Tj giải phúng khúa ghi trờn y. Tuy nhiờn, trong khi chờđợi, Tj lại yờu cầu một khúa (đọc hoặc ghi) trờn x thỡ cú thể xảy ra bế tắc. Vỡ Ti sẽ bị phong tỏa và chờ đợi Tj giải phúng khúa trờn y, trong khi đú, Tj cũng sẽđợi Ti giải phúng khúa trờn x. Như vậy, giao dịch Ti và Tj sẽ cựng phải chờđợi vụ hạn để giao dịch kia giải phúng khúa tương ứng. Nếu bế tắc đó tồn tại trong hệ thống, thỡ nú sẽ biến mất cho đến khi cú sự can thiệp của bờn ngoài. Sự can thiệp cú thể do người sử dụng, quản trị hệ thống, hoặc hệđiều hành hoặc hệ quản trị cơ sở dữ liệu phõn tỏn.
Sự bế tắc cú thể phõn tớch bằng một đồ thị chờ WFG (Wait For Graph) cú hướng được biểu diễn mối liờn hệ chờ đợi giữa cỏc giao dịch. Cỏc nỳt là cỏc giao dịch đang xảy ra đồng thời trong hệ thống. Một cung Ti → Tj tồn tại trong WFG nếu giao dịch Ti đang đợi giao dịch Tj giải phúng khúa trờn một thực thể nào đú.
• Giao dịch Ti đang đợi giao dịch Tj giải phúng khúa trờn một thực thể y.
• Giao dịch Tj đang đợi giao dịch Ti giải phúng khúa trờn một thực thể x.
Như vậy một bế tắc chỉ xảy ra khi trong WFG tồn tại một chu trỡnh. Trong mụi trường phõn tỏn, đồ thị WFG sẽ phức tạp hơn bởi vỡ hai giao dịch cú mặt trong bế tắc cú thểđang chạy ở những vị trớ khỏc nhau, gọi là bế tắc toàn cục. Do đú, trong hệ thống phõn tỏn cần phải xõy dựng một đồ thị chờ toàn cục GWFG (Global WFG), là hợp của tất cả cỏc đồ thị chờ cục bộ LWFG (Local WFG).
Vớ dụ 4.14:Xột bốn giao dịch T1, T2, T3 và T4 với cỏc mối liờn hệ chờđợi được biểu thị như sau T1 → T2→ T3 → T4→ T1. Nếu T1 và T2 trờn vị trớ 1, T3 và T4 chạy trờn vị trớ 2. Với cỏc LWFG tại hai vị trớ được trỡnh bày trong hỡnh 4.12a, khụng thể phỏt hiện được bế tắc. Bế tắc toàn cục cú thể phỏt hiện được bằng đồ thị toàn cục GWFG được trỡnh bày trong hỡnh 4.12b. Cỏc cung chờ đợi giữa cỏc vị trớ được vẽ bằng cỏc đường nột đứt.
Hỡnh 4.12: Một vớ dụ về đồ thị LWFG và GWFG
Cú ba phương phỏp xử lý bế tắc: ngăn chặn, trỏnh, phỏt hiện và giải tỏa bế tắc.
4.9.1 Ngăn chặn bế tắc
Ngăn chặn bế tắc (Deadlock Prevention) là phương phỏp bảo đảm khụng để xảy ra bế tắc. Bộ quản lý giao dịch phải kiểm tra giao dịch ngay khi nú bắt đầu và khụng cho phộp nú thực hiện nếu cú khả năng gõy ra bế tắc. Vỡ vậy phải khai bỏo cỏc mục sẽđược truy cập của giao dịch và được lưu trữ tại bộ quản lý giao dịch. Nếu tất cả cỏc mục dữ
liệu cần truy cập cú sẵn, bộ quản lý giao dịch cho phộp giao dịch tiến hành, ngược lại giao dịch sẽ khụng được phộp tiến hành.
Nhằm đảm bảo an toàn việc truy cập cỏc mục dữ liệu, hệ thống cần phải cú một tập cực đại cỏc mục, ngay cả khi kết thỳc giao dịch mà vẫn khụng cần truy cập đến chỳng. Điều này sẽ làm giảm cỏc hoạt động đồng thời và cũng phải mất thờm cỏc chi phớ đỏnh giỏ một giao dịch tiến hành an toàn hay khụng.
4.9.2 Trỏnh bế tắc
Phương phỏp trỏnh bế tắc (Deadlock Avoidance) sử dụng kỹ thuật điều khiển đồng thời khụng gõy ra bế tắc hoặc yờu cầu bộ lập lịch phỏt hiện trước cỏc tỡnh huống bế tắc và ngăn chặn khụng cho xảy ra được. Phương phỏp đơn giản nhất để trỏnh bế tắc là xếp thứ tự cỏc tài nguyờn, mỗi tiến trỡnh truy cập đến cỏc tài nguyờn theo thứ tựđú. Giải phỏp này đó được đề xuất cho cỏc hệđiều hành. Cỏc đơn vị khúa trong cỏc cơ sở dữ liệu phõn tỏn được xếp theo thứ tự và cỏc giao dịch yờu cầu khúa theo thứ tựđú. Việc xếp thứ tự cỏc đơn vị khúa cú thể thực hiện toàn cục hoặc cục bộ tại cỏc vị trớ. Trờn cỏc vị trớ cỏc đơn vị khúa cũng cần phải xếp thứ tự và yờu cầu cỏc giao dịch truy cập cỏc mục tại nhiều vị trớ nhận khúa bằng cỏch duyệt qua cỏc vị trớ theo một thứ tự định trước.
Một phương phỏp khỏc sử dụng nhón thời gian để đặt quyền ưu tiờn cho cỏc giao dịch và giải quyết bế tắc bằng cỏch hủy bỏ giao dịch cú quyền ưu tiờn cao hơn hoặc thấp hơn. Bộ quản lý khúa cần được sửa đổi theo hướng, nếu yờu cầu khúa của một giao dịch Ti bị từ chối, thỡ bộ quản lý khúa khụng tựđộng buộc Ti phải chờ đợi. mà nú thực hiện phộp kiểm tra dự phũng cho giao dịch đang yờu cầu và giao dịch hiện đang giữ khúa (giả sử là Tj). Nếu việc kiểm tra tốt thỡ Ti được phộp chờ Tj. Ngược lại, một trong hai giao dịch phải bị hủy bỏ.
Cỏc thuật toỏn WAIT-DIE và WOUND-DIE được thiết kế dựa trờn việc gỏn nhón thời gian cho giao dịch. WAIT-DIE là thuật toỏn
khụng tước quyền (Nonpreempty) nếu yờu cầu khúa của Ti bị từ chối do khúa đang được Tj giữ, thỡ nú khụng bao giờ tước quyền Tj. Quy tắc WAIT-DIE như sau: Nếu Ti yờu cầu khúa trờn mục dữ liệu đó được khúa bởi Tj thỡ Ti được phộp chờ khi và chỉ khi Ti già hơn Tj. Nếu Ti trẻ hơn Tj thỡ Ti bị hủy bỏ và được khởi động lại với nhón thời gian cũ.
Thuật toỏn WOUND-DIE là thuật toỏn tước quyền (Preempty) được khẳng định theo quy tắc sau: Nếu Ti yờu cầu khúa trờn mục dữ liệu đó được Tj khúa thỡ Ti được phộp chờ khi và chỉ khi nú trẻ hơn Tj. Ngược lại Tj bị hủy và khúa được trao cho Ti.
Như vậy cú cỏc trường hợp: Ti chờ, Ti bị hủy bỏ và Ti làm cho Tj bị hủy bỏ. Kết quả hủy bỏ và làm giao dịch khỏc bị hủy bỏ là như nhau, giao dịch bị hủy bỏ sẽđược khởi động lại. Hai quy tắc trờn được mụ tả như sau:
• if ts(Ti) < ts (Tj) then Ti chờelse Ti bị hủy bỏ (WAIT-DIE) • if ts(Ti) < ts (Tj) then Tj bị hủy bỏelse Ti chờ (WOUND-DIE) Thuật toỏn WAIT-DIE ưu tiờn cỏc giao dịch trẻ và khụng ưu tiờn cỏc giao dịch già. Một giao dịch già phải đợi lõu hơn khi nú trở nờn già hơn. Ngược lại quy tắc WOUND-DIE ưu tiờn cỏc giao dịch già và nú khụng bao giờ đợi một giao dịch trẻ. Trong cả hai thuật toỏn, giao dịch trẻ hơn bị hủy bỏ và chỳng cú sự tước quyền cỏc giao dịch đang hoạt động hay khụng.
Phương phỏp trỏnh bế tắc thớch hợp hơn cỏc phương phỏp ngăn chặn bế tắc trong cỏc mụi trường cơ sở dữ liệu. Nhược điểm cơ bản là chỳng đũi hỏi phải hỗ trợ lỳc chạy để quản lý bế tắc, làm tăng thờm chi phớ lỳc chạy để thực hiện giao dịch.
4.9.3 Phỏt hiện và giải tỏa bế tắc
Phỏt hiện và giải tỏa bế tắc (Deadlock Detection And Resolution) là một phương phỏp quản lý bế tắc phổ biến nhất. Việc phỏt hiện bế
tắc được thực hiện bằng cỏch phõn tớch GWFG xem cú hỡnh thành chu trỡnh hay khụng. Giải tỏa bế tắc thụng thường được thực hiện bằng cỏch chọn ra một hoặc nhiều giao dịch tước quyền rồi hủy bỏ chỳng