1. Trang chủ
  2. » Luận Văn - Báo Cáo

Quản lý giao tác trong CSDL quan hệ và phân tán

96 1,5K 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 96
Dung lượng 0,95 MB

Nội dung

Giả sử rằng các giao tác T1 và T2 được đệ trình gần như cùng tại một thời điểm và các thao tác của chúng được thực hiện xen kẽ như thể hiện trong hình 1.3 a; khi đó giá trị cuối cùng của

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Nguyễn Văn Dương

QUẢN LÝ GIAO TÁC TRONG CSDL

QUAN HỆ VÀ PHÂN TÁN

LUẬN VĂN THẠC SĨ

Hà Nội - 2008

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Nguyễn Văn Dương

QUẢN LÝ GIAO TÁC TRONG CSDL

Trang 3

MỤC LỤC

MỞ ĐẦU 5

CHƯƠNG 1: GIỚI THIỆU VỀ XỬ LÝ GIAO TÁC 7

1.1 Giới thiệu về xử lý giao tác 7

1.1.1 Hệ thống đơn người dùng và đa người dùng 7

1.1.2 Các giao tác, các thao tác Đọc và Ghi, vùng đệm DBMS 8

1.1.3 Vì sao điều khiển đồng thời là cần thiết 12

1.1.4 Tại sao khôi phục là cần thiết 16

1.2 Các khái niệm hệ thống và giao tác 17

1.2.1 Các trạng thái giao tác và các thao tác bổ sung 17

1.2.2 File log hệ thống (the system log) 19

1.2.3 Điểm xác định hoàn thành của giao tác 20

1.3 Các đặc trưng của giao tác 21

1.4 Lịch biểu và khả năng phục hồi 23

1.4.1 Lịch biểu của các giao tác 23

1.4.2 Đặc điểm của lịch biểu dựa trên khả năng phục hồi 26

1.5 Thứ tự của lịch biểu 29

1.5.1 Lịch biểu có thứ tự, không có thứ tự và lịch biểu có thứ tự xung đột 30

1.5.2 Kiểm tra thứ tự xung đột của một lịch biểu 35

1.5.3 Sử dụng tính thứ tự 39

1.5.4 Tương đương khung nhìn và tính sắp thứ tự được khung nhìn 41

1.6 Các kiểu tương đương khác của các lịch biểu 42

CHƯƠNG 2: CÁC KỸ THUẬT ĐIỀU KHIỂN ĐỒNG THỜI 44

2.1 Kỹ thuật sử dụng khóa cho điều khiển đồng thời 44

2.1.1 Bảng khoá hệ thống và bảng các loại khóa 45

2.1.2 Khóa 2 kỳ (Two - phase locking) 59

2.1.3 Khóa chết và xử lý khóa chết 61

2.2 Điều khiển đồng thời dựa vào Timestamps Ordering 69

2.2.1 Tem thời gian (Timestamps) 70

Trang 4

2.2.2 Thuật toán Timestamp Ordering 70

2.3 Các kỹ thuật điều khiển đồng thời đa phiên bản 73

2.3.1 Kỹ thuật đa phiên bản dựa trên Timestamp Ordering 74

2.3.2 Khóa 2 kỳ sử dụng khóa chứng thực 75

2.4 Các kỹ thuật điều khiển đồng thời dựa trên tính hợp lệ 77

2.5 Đa hạt (Multiple Granularity) 80

CHƯƠNG 3: QUẢN LÝ GIAO TÁC TRONG SQL 84

3.1 Xếp hàng thứ tự 85

3.2 Tính nguyên tử 87

3.3 Giao tác chỉ đọc 88

3.4 Vấn đề Dirty Read 88

3.4.1 Dirty read không gây nguy hiểm 89

3.4.2 Dirty read có thể gây nguy hiểm 90

KẾT LUẬN 92

TÀI LIỆU THAM KHẢO 94

Trang 5

CÁC THUẬT NGỮ VIẾT TẮT

2PL Two - Phase Locking

ACID Atomicity, Consistency, Isolation, Durability CSDL Cơ sở dữ liệu

DBMS Database Management System

HQTCSDL Hệ quản trị cơ sở dữ liệu

OLTP Online Transaction Processing

SQL Structured Query Languege

TO Timestamp Ordering

Trang 6

DANH MỤC CÁC BẢNG BIỂU, HÌNH MINH HỌA

Hình 1.1 Xử lý đan xen và xử lý song song của giao tác đồng thời 8

Hình 1.2 Hai giao tác mẫu, Giao tác T1 và Giao tác T2 12

Hình 1.3 Một số vấn đề xuất hiện khi thực thi đồng thời không có điều khiển 14

Hình 1.4 Sơ đồ chuyển trạng thái thực thi giao tác 19

Hình 1.5 Lịch biểu tuần tự và không tuần tự 29

Hình 1.6: Hai lịch biểu cho kết quả tương đương với X = 100 33

Hình 1.7 Xây dựng đồ thị ưu tiên cho lịch biểu A tới D (hình 1.5) để kiểm tra thứ tự xung đột 36

Hình 1.8 Ví dụ phân tích khả năng tuần tự 39

Hình 1.8: (d) Đồ thị của lịch biểu E; (e) Đồ thị của lịch biểu F 39

(f) Đồ thị với 2 lịch biểu tuần tự tương đương 40

Hình 2.1: Các thao tác khóa và mở khóa đối với khóa nhị phân 47

Hình 2.2 Thao tác khóa và mở khóa đối với 2 chế độ khóa shared/exclusive 51

Hình 2.3 Giao tác không tuân theo khóa 2 kỳ 59

Hình 2.4 Minh họa vấn đề khóa chết 64

Hình 2.5 Đồ thị chờ (Phi chu trình) 69

Hình 2.6 Các bảng khóa tương thích 79

Hình 2.7 Ma trận khóa tương thích đối với khóa đa hạt 84

Trang 7

MỞ ĐẦU

Ngày nay việc ứng dụng các hệ cơ sở dữ liệu vào các lĩnh vực hoạt động của xã hội đã trở thành phổ biến Để khai thác tốt các CSDL cần phải có các

hệ QTCSDL tốt Ngoài các chức năng như định nghĩa, cập nhật và truy vấn

cơ sở dữ liệu, các hệ QTCSDL phải làm tốt việc quản lý các giao tác, nhất là trong môi trường đa chương trình, nhằm đảm bảo tính nhất quán của cơ sở dữ liệu

Ở nước ta, việc sử dụng các hệ QTCSDL là phổ biến nhưng việc nghiên cứu các kỹ thuật trong việc xây dựng các hệ QTCSDL chưa được thực hiện nhiều Luận văn nhằm nghiên cứu về các giao tác và quản lý giao tác trong các hệ QTCSDL Môi trường được lựa chọn là các hệ thống đa chương trình

xử lý các giao tác đồng thời Đây là một vấn đề có ý nghĩa lý thuyết và thực tiễn, giúp việc khai thác các CSDL được đúng đắn

Luận văn bao gồm phần mở đầu, ba chương nội dung và phần kết luận Chương 1 “GIỚI THIỆU VỀ XỬ LÝ GIAO TÁC” trình bày khái niệm về giao tác được sử dụng để biểu diễn một đơn vị logic xử lý cơ sở dữ liệu phải được hoàn thành trọn vẹn để đảm bảo tính đúng đắn, thảo luận vấn đề kiểm soát đồng thời xuất hiện khi nhiều giao tác được đệ trình cùng một lúc có thể gây trở ngại lẫn nhau dẫn đến việc sinh ra các kết quả sai và vấn đề khôi phục

từ các giao tác bị hỏng Chương 2 “CÁC KỸ THUẬT ĐIỀU KHIỂN ĐỒNG THỜI ” sẽ trình bày các công nghệ liên quan đến việc điều khiển trong các quá trình truy cập cơ sở dữ liệu Chương 3 “QUẢN LÝ GIAO TÁC TRONG SQL” sẽ mô tả việc thể hiện các giao tác SQL thông qua một số chương trình

cụ thể Cuối cùng là phần kết luận tổng kết lại những gì đã làm được trong luận văn, hướng phát triển của luận văn

Trang 8

Cuối cùng tác giả xin bày tỏ lòng biết ơn chân thành tới TS Nguyễn Tuệ, thầy đã luôn ân cần, chỉ bảo, động viên, giúp đỡ tác giả trong suốt quá trình thực hiện luận văn Tác giả xin chân thành cảm ơn gia đình, bạn bè, đồng nghiệp đã luôn động viên và giúp đỡ về nhiều mặt trong thời gian qua, xin chân thành cảm ơn các thầy cô giáo Trường Đại học Công nghệ và Khoa sau đại học đã tạo điều kiện giúp đỡ để tác giả hoàn thành Luận văn này

Trang 9

CHƯƠNG 1: GIỚI THIỆU VỀ XỬ LÝ GIAO TÁC

1.1 Giới thiệu về xử lý giao tác

Trong phần này sẽ giới thiệu các khái niệm của các giao tác thực thi đồng thời và cách khôi phục lại do các giao tác lỗi

1.1.1 Hệ thống đơn người dùng và đa người dùng

Một tiêu chuẩn để phân loại một hệ cơ sở dữ liệu đó là dựa vào số lượng người dùng có thể truy cập vào hệ thống tại cùng một thời điểm Hệ quản trị

cơ sở dữ liệu (DBMS - Database Management System) là đơn người dùng (single-user) nếu tại một thời điểm chỉ có một người dùng truy cập hệ thống

và là đa người dùng (multi-user) nếu có nhiều người dùng có thể truy cập hệ thống một cách đồng thời Ví dụ: Hệ thống đặt vé máy bay được sử dụng đồng thời bởi hàng trăm đại lý bán vé Các hệ thống trong các nhà băng, các hãng bảo hiểm, các sở giao dịch chứng khoán và các hệ thống khác tương tự đều được nhiều người sử dụng đệ trình các giao tác một cách đồng thời [1] Nhiều người dùng sử dụng các hệ thống máy tính có thể truy cập các cơ

sở dữ liệu cùng một lúc là do khái niệm đa chương trình, nó cho phép máy tính thực thi nhiều chương trình -hoặc tiến trình- tại cùng một thời điểm Nếu chỉ có 1 bộ xử lý trung tâm (CPU), trên thực tế nó chỉ có thể thực thi nhiều nhất 1 xử lý tại một thời điểm Tuy nhiên, các hệ điều hành đa chương trình thực thi một số câu lệnh của một tiến trình, sau đó hoãn tiến trình đó lại và thực thi một số câu lệnh của tiến trình tiếp theo và v v Một tiến trình sẽ lại được tiếp tục tại điểm mà nó bị hoãn khi đến lượt nó được sử dụng CPU lại Như vậy, việc thực hiện đồng thời của các tiến trình thực chất là sự đan xen, như minh họa ở hình 1.1, chỉ ra 2 tiến trình A và B được thực hiện một các đồng thời theo cách đan xen Sự đan xen giữ gìn sự bận rộn của CPU khi một

Trang 10

tiến trình đòi hỏi một thao tác vào hoặc ra, chẳng hạn như việc đọc một khối

dữ liệu từ đĩa [1]

Nếu hệ thống máy tính có nhiều bộ xử lý (nhiều CPU), việc xử lý song song của nhiều tiến trình có thể thực hiện được, như minh họa trong hình 1.1 với các tiến trình C và D [1]

Trong DBMS đa người dùng, các mục dữ liệu được lưu trữ là nguồn tài nguyên chính cho các chương trình ứng dụng hoặc người sử dụng tương tác truy cập đồng thời để liên tục lấy thông tin từ cơ sở dữ liệu và thay đổi cơ sở

dữ liệu [1]

Hình 1.1Xử lý đan xen và xử lý song song của giao tác đồng thời

1.1.2 Các giao tác, các thao tác Đọc và Ghi, vùng đệm DBMS

Mô ̣t giao tác l à mô ̣t đơn vị logic x ử lý CSDL, nó bao gồm một hoặc nhiều thao tác truy cập dữ liệu như chèn, xoá, sửa đổi hoặc lấy thông tin ra Các thao tác trong cơ sở dữ liệu cấu thành một giao tác có thể hoặc được nhúng vào một chương trình ứng dụng hoặc được chỉ rõ một cách tương tác thông qua một ngôn ngữ truy vấn bậc cao như SQL [1]

Trang 11

Mô ̣t hê ̣ thống OLTP (xử lý giao tác trực tuyến ) hoạt động theo thời gian thực nhằm thu t hập và xử lý dữ liệu có liên quan đến giao tác và gởi các thay đổi đến các cơ sở dữ liê ̣u dùng chung và các file khác

Trong viê ̣c xử lý giao tác trực tuyến , các giao tác được thực hiện ngay , trái với việc xử lý theo lô , các giao tác được lưu trong một khoảng thời gian sau đó mới được thực hiê ̣n Đa số các xử lý theo lô như viê ̣c chuyển khoản đươ ̣c thực hiê ̣n vào giờ đêm Các kết quả của một xử lý giao tác trực tuyến thì

có ngay trong cơ sở dữ liê ̣u Nó khẳng định giao tác đã hoàn thành Các ví dụ thông dụng nhất của viê ̣c xử lý giao tác trực tuyến là hệ thống đặt chổ Hàng Không và hê ̣ thống giao di ̣ch Ngân hàng

Hãng IBM đã định nghĩa các loại giao tác sau:

Tại một thời điểm có một câu lệnh được thực hiện trên mộ t cơ sở dữ liê ̣u

Một đơn vi ̣ công viê ̣c (bao gồm nhiều câu lê ̣nh ) đươ ̣c thực hiê ̣n trên mô ̣t

cơ sở dữ liê ̣u

Một đơn vi ̣ công viê ̣c trên môi trường phân bố (bao gồm nhiều câu lê ̣nh ) đươ ̣c thực hiện trên nhiều cơ sở dữ liê ̣u , tại một thời điểm thì một câu lệnh đươ ̣c thực hiê ̣n trên mô ̣t cơ sở dữ liê ̣u

Một yêu cầu trên hê ̣ thống phân bố (bao gồm nhiều câu lê ̣nh ) thực hiê ̣n trên nhiều cơ s ở dữ liệu , tại một thời điểm thì có nhiều câu lệnh được thực hiê ̣n trên mô ̣t cơ sở dữ liê ̣u

Các hệ quản trị cơ sở dữ liệu thực hiện các giao tác bằng cách sử dụng các lệnh hoặc là được nhúng vào trong chương trình ứng dụng hoặc tương tác theo danh nghĩa qua một ngôn ngữ truy vấn bậc cao như SQL Trong chương trình ứng dụng, biên giới giao tác được xác định một cách rõ ràng thông qua

Trang 12

các câu lệnh Begin Transaction và End Transaction Trong trường hợp này tất

cả các thao tác truy cập cơ sở dữ liệu giữa 2 câu lệnh đó được coi như tạo ra một giao tác Một chương trình ứng dụng có thể chứa nhiều hơn một giao tác nếu nó chứa nhiều biên giới giao tác Nếu các thao tác CSDL không cập nhật CSDL mà chỉ lấy thông tin ra thì gọi đó là giao tác được gọi là giao tác chỉ đọc (read only transaction)

Chúng ta giải thích các khái niệm xử lý giao tác thông qua một mô hình một cơ sở dữ liệu đơn giản.Về cơ bản, một cơ sở dữ liệu được miêu tả như một tập hợp các file dữ liệu và mỗi bản ghi của file có một số các trường Các thao tác truy cập CSDL cơ bản mà một giao tác có thể có là [1]:

Read_item(X): Đọc một mục dữ liệu có tên X trong CSDL vào một biến

chương trình Để đơn giản ký hiệu, ta giả sử biến đó cũng có tên là X

Write_item(X): Ghi giá trị của biến chương trình X vào một mục của

CSDL có tên X

Đơn vị cơ bản của truyền dữ liệu từ đĩa vào bộ nhớ chính là một khối Việc thực hiện một câu lệnh read_item(x) bao gồm các bước sau [1]:

Bước 1: Tìm địa chỉ của khối đĩa chứa mục dữ liệu X

Bước 2: Sao chép khối đĩa đó vào một vùng đệm trong bộ nhớ chính (nếu khối đĩa đó chưa có trong vùng đềm bộ nhớ chính)

Bước 3: Sao chép dữ liệu X từ vùng đệm vào biến chương trình X

Việc thực hiện một câu lệnh write_item(X) bao gồm các bước sau:

Bước 1: Tìm địa chỉ của khối đĩa chứa mục dữ liệu X

Bước 2: Sao chép khối đĩa đó vào một vùng đệm trong bộ nhớ chính (nếu khối đĩa đó chưa có trong vùng đệm)

Trang 13

Bước 3: Sao chép mục dữ liệu X từ biến chương trình X vào đúng vị trí của nó trong vùng đệm

Bước 4: Lưu khối đã được cập nhật từ vùng đệm trở lại đĩa (hoặc là ngay lập tức hoặc sau 1 khoảng thời gian)

Trong thực tế, bước 4 là một bước cập nhật cơ sở dữ liệu trên đĩa Trong một số trường hợp vùng đệm không được lưu ngay vào đĩa nếu có sự thay đổi được tạo ra cho vùng đệm Thông thường, quyết định khi nào lưu lại một khối đĩa đã được thay đổi trong vùng đệm bộ nhớ chính được điều khiển bởi bộ phận quản lý phục hồi dữ liệu (recovery manager) của DBMS phối hợp với hệ điều hành cơ sở Nói chung, DBMS sẽ duy trì một số vùng đệm trong bộ nhớ chính để chứa các khối dữ liệu bao gồm các mục cơ sở dữ liệu đang được xử

lý Khi tất cả các vùng đệm này đã bị chiếm giữ và có thêm các khối dữ liệu phải được sao chép vào bộ nhớ thì chính sách thay thế một số vùng đệm được

sử dụng để lựa chọn vùng đệm nào sẽ được thay thế Nếu lựa chọn vùng đệm

đã có thay đổi dữ liệu trong vùng đệm đó phải được ghi trở lại đĩa trước khi được tái sử dụng [1]

Một giao tác bao gồm các thao tác read_item và write_item để truy cập

và cập nhật cơ sở dữ liệu Hình 1.2 thể hiện một ví dụ về 2 giao tác đơn giản (a) T1 (b) T2

Trang 14

Cơ chế phục hồi và điều khiển đồng thời chủ yếu liên quan các câu lệnh truy cập cơ sở dữ liệu trong một giao tác Các giao tác được nhiều người dùng khác nhau đệ trình có thể thực hiện một cách đồng thời và có thể truy cập và cập nhật các mục cơ sở dữ liệu giống nhau Nếu việc thực hiện đồng thời này không được điều khiển có thể sẽ dẫn đến nhiều vấn đề, chẳng hạn như việc cơ

sở dữ liệu không nhất quán

1.1.3 Vì sao điều khiển đồng thời là cần thiết

Nhiều vấn đề có thể xảy ra khi các giao tác đồng thời thực hiện theo cách thức không được điều khiển Ta sẽ minh hoạ một số vấn đề này bằng việc tham khảo cơ sở dữ liệu đặt vé máy bay đã được đơn giản hoá, trong đó một bản ghi được lưu trữ cho mỗi chuyến bay Hình 1.2 (a) thể hiện giao tác T1, giao tác này chuyển N chỗ từ một chuyến bay có số chỗ được lưu trữ trong mục CSDL có tên X sang chuyến bay khác có số chỗ được lưu trữ trong mục CSDL có tên Y Hình 1.2(b) thể hiện giao tác T2 đơn giản hơn, giao tác này đặt trước M chỗ trên chuyến bay thứ nhất (X) được tham chiếu trong giao tác

T1 Để làm đơn giản ví dụ, ta không đưa vào đây các phần phụ của giao tác như kiểm tra xem nếu một chuyến bay có đủ chỗ sẵn sàng trước khi đặt thêm các chỗ hay không [1]

Khi một chương trình truy cập cơ sở dữ liệu được viết, nó có số các chuyến bay, ngày bay và số chỗ được đặt trước như là một tham số Như vậy,

có thể sử dụng cùng một chương trình đó để thực hiện nhiều giao tác, mỗi giao tác với từng chuyến bay và số chỗ được đặt khác nhau Với mục đích điều khiển đồng thời, một giao tác là một thực hiện cụ thể của chương trình trên một ngày bay, chuyến bay và số chỗ cụ thể Trong hình 1.2(a) và (b) các giao tác T1 và T2 là các thực hiện cụ thể của các chương trình tham chiếu đến các chuyến bay cụ thể mà số chỗ của chúng được lưu trong các mục dữ liệu X

Trang 15

và Y trong cơ sở dư liệu Nếu hai giao tác này chạy đồng thời, có thể dẫn đến các vấn đề sau đây:

a Cập nhật bị mất (Lost Update)

Vấn đề này xảy ra khi hai giao tác truy cập vào các mục CSDL như nhau

có các thao tác xen kẽ nhau theo cách làm cho giá trị của một số mục dữ liệu không chính xác Giả sử rằng các giao tác T1 và T2 được đệ trình gần như cùng tại một thời điểm và các thao tác của chúng được thực hiện xen kẽ như thể hiện trong hình 1.3 a); khi đó giá trị cuối cùng của mục X là không chính xác bởi vì T2 nhận được giá trị của X trước khi T1 thay đổi nó trong cơ sở dữ liệu và do đó giá trị được cập nhật tạo ra từ T1 bị mất Cụ thể, nếu ban đầu có X= 80 (ban đầu có 80 chỗ ngồi trên chuyến bay), N=5 (T1 chuyển 5 chỗ từ chuyến bay tương ứng với X sang chuyến bay tương ứng với Y ), và M=4 (giao tác T2 dành 4 chỗ trên chuyến bay X) Kết quả cuối cùng phải là 79 nhưng vì có sự xen kẽ của các thao tác như được chỉ ra trong hình 1.3 (a) nên X=84 vì cập nhật trong T1 chuyển 5 chổ khỏi X bị mất [1][4]

Write_item (X); /* mục X có giá trị không chính xác vì cập nhật của nó bởi T 1 bị “lạc”*/

Y := Y+N ;

Write_item (Y);

Hình 1.3a) Vấn đề cập nhật bị mất

Trang 16

b Vấn đề cập nhật tạm thời (hoặc Dirty Read)

Vấn đề xẩy ra khi một giao tác cập nhật một mục cơ sở dữ liệu và sau đó

giao tác thất bại do một lý do nào đấy Mục được cập nhật được giao tác khác

truy cập trước khi nó phải được thay đổi trở lại giá trị ban đầu của nó Hình

1.3(b) trình bày một ví dụ trong đó T1 cập nhật mục X và sau đó thất bại trước

khi hoàn thành, do đó hệ thống phải thay đổi X trả lại giá trị ban đầu của nó

Tuy nhiên, trước khi nó có thể làm điều đó thì giao tác T2 đã đọc giá trị “tạm

thời” của X, giá trị này sẽ không được ghi lại một cách thường trực trong cơ

sở dữ liệu do sự hư hỏng của T1 Giá trị của mục X được T2 đọc được gọi là

dữ liệu rác (dirty) bởi vì nó được tạo ra bởi một giao tác chưa được hoàn

thành và ghi lại Vấn đề này gọi là vấn đề dirty read [1][4]

Read_item (Y);

Giao tác T 1 thất bại

và phải thay đổi giá

trị của X trở về giá trị cũ của nó

trong khi đó T 2 đã đọc giá trị

“tạm thời” không chính xác của X

Hình 1.3 b) vấn đề cập nhật tạm thời

Trang 17

Vấn đề tóm tắt không chính xác : Nếu một giao tác đang tính toán một

hàm tổng nhóm trên một số bản ghi trong khi các giao tác khác đang cập nhật các bản ghi đó, hàm nhóm có thể tính một số giá trị trước khi chúng được cập nhật và các giá trị khác sau khi chúng được cập nhật Ví dụ, giả sử một giao tác T3 đang tính tổng số vé được đặt trước trên tất cả các chuyến bay, trong khi đó giao tác T1 đang thực hiện Nếu sự đan xen của các thao tác thể hiện trong hình 4.3(c) xẩy ra, kết quả của T3 sẽ bị thiếu hụt số chỗ N bởi vì T3 đọc giá trị X sau khi bị trừ đi N nhưng đọc giá trị Y trước N chỗ được cộng thêm vào nó [1]

Sum:= 0;

read_item(A) ; Sum:= sum +A;

Read_item (X);

X := X-N;

Write_item (X);

Read_item (X); Sum:= sum +X; /*T3 đọc X

Read_item (Y); sau khi trừ đi N và đọc

Sum:= sum +Y; Y trước khi được cộng

thêm N Tổng kết sai */

Read_item (Y);

Y := Y+N ; Write_item (Y);

Hình 1.3 c)Vấn đề tóm tắt thiếu chính xác

Vấn đề khác có thể xẩy ra được gọi là đọc không lặp lại, trong đó một giao tác T đọc một mục dữ liệu 2 lần và mục dữ liệu đó được thay đổi bởi

Trang 18

giao tác T’ khác giữa hai lần đọc Như vậy, T nhận được hai giá trị khác nhau với hai lần đọc cùng mục dữ liệu của nó Điều này có thể xẩy ra, nếu trong một giao tác đặt chỗ, một khách hàng đang hỏi về một chỗ có trên một số chuyến bay Khi khách hàng quyết định trên một chuyến bay cụ thể, khi đó giao tác đọc số chỗ trên chuyến bay đó hai lần trước khi hoàn thành việc đặt chỗ [1]

1.1.4 Tại sao khôi phục là cần thiết

Mỗi khi một giao tác được đệ trình tới một DBMS để thực hiện, hệ thống chịu trách nhiệm đảm bảo hoặc (1) tất cả các thao tác trong giao tác được kết thúc thành công và ảnh hưởng của chúng được ghi lại một cách thường trực trong cơ sở dữ liệu, hoặc (2) giao tác không có bất cứ ảnh hưởng nào lên cơ

sở dữ liệu hoặc lên các giao tác khác DBMS phải không cho phép một số thao tác của một giao tác T có thể được áp dụng lên cơ sở dữ liệu trong khi các thao tác khác của T không được áp dụng Điều này xẩy ra nếu một giao tác thất bại sau khi một số thao tác của nó được thực hiện nhưng trước khi thực hiện toàn bộ các thao tác

Các kiểu lỗi: lỗi được phân thành lỗi thiết bị, lỗi hệ thống và lỗi giao tác

Có nhiều nguyên nhân để một giao tác thất bại trong khi thực hiện:

1 Một hỏng hóc máy tính: một hỏng hóc phần cúng, phần mềm, hoặc mạng xẩy ra trong hệ thống máy tính trong khi thực hiện giao tác

2 Lỗi giao tác hoặc lỗi hệ thống: một số thao tác trong một giao tác có thể làm cho giao tác bị lỗi, chẳng hạn như tràn số nguyên lỗi chia cho 0 Thất bại giao tác cũng có thể xẩy ra do các giá trị của tham số không đúng hoặc do một lỗi lập trình logic Thêm vào đó, người dùng có thể ngắt một giao tác trong khi thực thi nó

Trang 19

3 Các lỗi cục bộ hoặc các điều kiện ngoại lệ do giao tác phát hiện: trong khi thực hiện giao tác, các điều kiện nào đó có thể xẩy ra cần loại bỏ giao tác Ví dụ dữ liệu cho giao tác có thể không tìm thấy

4 Buộc tuân theo điều khiển đồng thời : phương pháp điều khiển đồng thời có thể quyết định bỏ dở một giao tác, sẽ được khởi động lại sau đó, bởi vì

nó vi phạm trật tự hoặc bởi vì nhiều một giao tác đang trong trạng thái bế tắc

5 Hỏng hóc đĩa : một số khối đĩa có thể mất dữ liệu do hàm đọc hoặc ghi sai.Điều này có thể xẩy ra trong một thao tác đọc hoặc của giao tác

6 Các vấn đề vật lý và các thảm họa : các vấn đề này được xem như danh sách vô tận các vấn đề bao gồm nguồn điện , cháy , trộm , sự phá hoại , đĩa quá tải…

Các lỗi thuộc kiểu 1, 2, 3 và 4 phổ biến hơn các lỗi thuộc kiểu 5 và 6 Khi một lỗi thuộc kiểu từ 1 đến 4 xẩy ra, hệ thống phải giữ thông tin đầy đủ

để khôi phục lại từ lỗi Lỗi đĩa hoặc các lỗi do thảm hoạ thuộc kiểu 5 hoặc 6 không xẩy ra một cách thường xuyên

1.2 Các khái niệm hệ thống và giao tác

1.2.1 Các trạng thái giao tác và các thao tác bổ sung

Một giao tác là một đơn vị nguyên tử của công việc, nó hoặc là được hoàn thành toàn bộ hoặc không làm gì cả Đối với mục đích khôi phục, hệ thống cần lưu lại vết của một giao tác khi bắt đầu, kết thúc, xác nhận hoặc huỷ bỏ Do đó, bộ quản lý khôi phục lưu vết của các thao tác dưới đây [1]:

- BEGIN_TRANSACTION : Điều này đánh dấu bắt đầu thực hiện giao tác

- READ hoặc WRITE : Điều này chỉ ra các thao tác đọc và viết trên các mục cơ sở dữ liệu, chúng được thực hiện như một phần của giao tác

- END_TRANSACTION : Điều này chỉ ra rằng các thao tác READ và WRITE của giao tác đã kết thúc và đánh dấu kết thúc việc thực hiện giao

Trang 20

tác Tuy nhiên tại điểm này cần phải kiểm ra xem các thay đổi do giao tác tạo ra có thể được áp dụng một cách thường trực đối với cơ sở dữ liệu (commited – được lưu) hoặc có phải giao tác bị huỷ bỏ (aborted)

do vi phạm trật tự hoặc vì các lý do khác

- COMMIT_ TRANSACTION : Điều này báo hiệu một kết thúc thành công của giao tác sao cho mọi sự thay đổi (update) được giao tác thực hiện có thể được chuyển an toàn tới cơ sở dữ liệu và sẽ không bị bỏ ra

- ROLLBACK (hoặc ABORT) : Điều này báo hiệu rằng giao tác kết thúc không thành công, do đó bất kỳ sự thay đổi hoặc ảnh hưởng nào mà giao tác có thể áp dụng đến cơ sở dữ liệu phải được huỷ bỏ

Hình 1.4 trình bày một sơ đồ trạng thái giao tác, nó mô tả một giao tác đi qua các trạng thái thực hiện của nó như thế nào Một giao tác đi vào trạng thái tích cực (active state) ngay sau khi nó bắt đầu thực hiện, tại đó nó có thể đưa

ra các thao tác READ và WRITE Khi giao tác kết thúc, nó chuyển tới trạng thái được ghi nhận một phần (partial commited state) Tại điểm này, cần một

số giao thức khôi phục để đảm bảo rằng một lỗi hệ thống sẽ không dẫn đến việc không có khả năng ghi lại các thay đổi của giao tác một cách thường trực (thường là bằng việc ghi lại các thay đổi trong log hệ thống) Mỗi khi việc kiểm ra này thành công thì giao tác được xem là đã tiếp cận đến điểm ghi nhận và đi vào trạng thái ghi nhận (commited state) Mỗi khi giao tác được ghi nhận, nó chấm dứt việc thực hiện của nó một cách thành công và mọi thay đổi của nó phải được ghi lại một cách thường trực trong cơ sở dữ liệu [1][4] Tuy nhiên, một giao tác có thể dẫn tới trạng thái thất bại (failed state) nếu một trong các kiểm tra là thất bại hoặc nếu giao tác bị huỷ bỏ trong khi nó

ở trạng thái hoạt động Giao tác này sau đó phải được xem lại để xoá bỏ ảnh hưởng của các thao tác WRITE của nó lên cơ sở dữ liệu Trạng thái kết thúc (terminated) tương đương với việc là giao tác ra khỏi hệ thống Thông tin về

Trang 21

giao tác được duy trì trong các bảng hệ thống trong khi giao tác đang thực hiện được huỷ bỏ khi giao tác kết thúc Các giao tác thất bại hoặc bị huỷ bỏ có thể được khởi động lại sau đó, hoặc một cách tự động hoặc sau khi được người dùng đệ trình lại như các giao tác mới [1]

Hình 1.4 Sơ đồ chuyển trạng thái thực thi giao tác

1.2.2 File log hệ thống (the system log)

Để có thể khôi phục lại các hư hỏng ảnh hưởng các giao tác, hệ thống duy trì một file log (nhật ký DBMS )để lưu giữ dấu vết của tất cả các thao tác của giao tác ảnh hưởng đến các giá trị của các mục dữ liệu Thông tin này cần đến để cho phép khôi phục lại các hư hỏng Log được lưu trên đĩa, do đó nó không bị ảnh hưởng bởi bất kỳ loại hư hỏng nào ngoại trừ trường hợp hư hỏng đĩa hoặc thảm hoạ Thêm vào đó file log này được sao lưu một cách định kỳ ra băng hoặc phòng các trường hợp thảm hoạ Bây giờ chúng ta sẽ đưa ra danh sách các bản ghi, được gọi là các bản ghi log, được ghi vào trong file và hành động thực hiện của nó [1][9]

1 [Start_transaction, T ] : Chỉ ra rằng giao tác T đã bắt đầu thực hiện

2 [Write_item, T ,X ,old_value, new_value] : Chỉ ra rằng giao tác T đã thay đổi giá trị của mục cơ sở dữ liệu X từ giá trị cũ sang giá trị mới

ACTIVE

BEGIN

TRANSACTION

READ WRITE END

COMMIT

TERMINATED FAILED

Trang 22

3 [Read_item,T,X]: Chỉ ra rằng giao tác T đã đọc giá trị của mục cơ sở

dữ liệu X

4 [Commit,T] : Chỉ ra rằng giao tác T đựơc kết thúc thành công , và xác nhận rằng những ảnh hưởng của nó có thể được ghi nhận (ghi lại một cách thường trực) vào trong cơ sở dữ liệu

5 [Abort ,T] : Chỉ ra rằng giao tác T bị huỷ bỏ

Để ý rằng ở đây chúng ta giả thiết rằng tất cả các thay đổi thường trực đối với cơ sở dữ liệu xảy ra bên trong các giao tác vì vậy khái niệm khôi phục

từ giao tác hư hỏng chung quy là hoặc loại bỏ, hoặc làm lại các thao tác của giao tác một cách riêng rẽ từ file log Nếu hệ thống đổ vỡ, chúng ta có thể khôi phục đến một trạng thái cơ sở dữ liệu thích hợp bằng cách xem xét file log và sử dụng các kỹ thuật phục hồi Bởi vì log chứa một bản ghi của mỗi thao tác WRITE làm thay đổi giá trị của một vài mục cơ sở dữ liệu, nên có thể loại bỏ (undo) ảnh hưởng của các thao tác WRITE của giao tác T bằng cách lần lùi thông qua log và thiết lập lại các mục do thao tác WRITE của T làm thay đổi thành các giá trị-cũ của nó Việc làm lại các thao tác của một giao tác cũng có thể cần nếu mọi cập nhật của nó được ghi lại trong log nhưng một hư hỏng xuất hiện trước khi chúng ta có thể tin chắc rằng tất cả các giá trị-mới này đã được ghi một cách thường trực vào cơ sở dữ liệu hiện tại trên đĩa Việc làm lại các thao tác của một giao tác T được áp dụng bằng cách lần lên thông qua log và thiết lập tất cả các mục được thay đổi bằng thao tác WRITE của T thành giá trị-mới của chúng [1]

1.2.3 Điểm xác định hoàn thành của giao tác

Một giao tác T tiến đến điểm xác nhận khi toàn bộ các thao tác truy cập

cơ sở dữ liệu của nó đã được thực hiện thành công và ảnh hưởng của tất cả các thao tác của giao tác lên cơ sở dữ liệu đã được ghi lại vào file log Ngoài điểm xác nhận, giao tác được gọi là đã được xác nhận, và ảnh hưởng của nó

Trang 23

được xem như đã được ghi lại một cách thường trực trong cơ sở dữ liệu Sau

đó giao tác ghi một bản ghi xác nhận [commit,T] vào trong fỉle log Nếu xẩy

ra một hư hỏng hệ thống, chúng ta tìm kiếm lùi trong file log đối với tất cả các giao tác T đã ghi một bản ghi [start_transaction,T] vào trong file log nhưng vẫn chưa ghi bản ghi [commit,T] của chúng; các giao tác này có thể sẽ được cuộn lại để loại bỏ ảnh hưởng của nó lên cơ sở dữ liệu trong tiến trình khôi phục Các giao tác đã ghi bản ghi commit của nó vào log cũng phải được ghi lại tất cả các thao tác WRITE của nó vào log, vì vậy ảnh hưởng của nó trên cơ sở dữ liệu có thể làm lại từ các bản ghi log [1][9]

Chú ý rằng file log phải được lưu giữ trên đĩa Việc cập nhật một file đĩa bao gồm việc sao chép khối thích hợp của file từ đĩa vào một buffer trong bộ nhớ trong, cập nhật buffer trong bộ nhớ trong và sao chép buffer vào đĩa Một cách phổ biến là lưu một hoặc nhiều khối của file log trong các vùng đệm của

bộ nhớ trong cho tới khi các vùng đệm được điền đầy bằng các bản ghi log và sau đó chúng được ghi lại vào đĩa chỉ một lần chứ không ghi lên đĩa mỗi một lần có một bản ghi log được thêm vào Điều này tiết kiệm được chi phí ghi đĩa nhiều lần của cùng một khối file log Tại thời điểm một hệ thống sụp đổ, chỉ các bản ghi log đã được ghi trở lại trên đĩa là được xem xét trong tiến trình khôi phục bởi vì nội dung của bộ nhớ chính có thể bị mất Vì thế, trước khi một giao tác đến tới điểm xác nhận của nó, bất kỳ phần nào của file log chưa được ghi lên đĩa thì phải được ghi lên đĩa Quá trình này được gọi là bắt buộc-ghi (force-writing) file log trước khi xác nhận một giao tác [1]

1.3 Các đặc trƣng của giao tác

Các giao tác sẽ có nhiều đặc trưng Các đặc trưng này thường được gọi

là các đặc trưng ACID (Atomicity, Consistency preservation, Isolation, Durability or permanency) Các đặc trưng ACID là:

Trang 24

1 Tính nguyên tử (Atomicity): Một giao tác là một đơn vị xử lý nguyên

tử Nó hoặc là được thực hiện trọn vẹn hoặc không thực hiện gì cả [1][4][5]

2 Tính nhất quán (Consistency preservation): Một giao tác là giữ gìn kiên định nếu sự thực hiện đầy đủ của nó đưa cơ sở dữ liệu từ trạng thái kiên định sang trạng thái kiên định khác [1][4][5]

3 Tính cách ly (isolation) Một giao tác phải xuất hiện như nó được thực hiện trong sự cô lập khỏi các giao tác khác Điều đó có nghĩa là việc thực hiện của một giao tác sẽ không bị các giao tác khác thưc hiện đồng thời quấy rầy[1][4][5]

4 Tính bền vững (durability or permanency): Các thay đổi được áp dụng cho cơ sở dữ liệu bởi một giao tác được xác nhận phải bền bỉ trong cơ

sở dữ liệu Các thay đổi này phải không bị mất do bất cứ hư hỏng nào[1][4][5]

Tính chất nguyên tử đòi hỏi rằng chúng ta thực hiện một giao tác cho đến khi hoàn thành Trách nhiệm của hệ thống con khôi phục giao tác của DBMS đảm bảo tính nguyên tử Nếu một giao tác thất bại để hoàn thành do một lý do nào đấy, một hệ thống như vậy đổ vỡ ở giữa việc thực hiện giao tac,

kỹ thuật khôi phục phải loại bỏ mọi ảnh hưởng của giao tác lên cơ sở dữ liệu Việc giữ gìn tính nhất quán nói chung được xem như trách nhiệm của những người lập trình, những người viết các chương trình cơ sở dữ liệu hoặc các modul của hệ quản trị cơ sở dữ liệu bắt tuân theo các ràng buộc toàn vẹn Nhắc lại rằng một trạng thái cơ sở dữ liệu là một tập hợp các mục dữ liệu (giá trị) được lưu giữ trong cơ sở dữ liệu tại một thời điểm cho trước Một trạng thái nhất quán của cơ sở dữ liệu thoả mãn các ràng buộc được chỉ ra trong lược đồ cũng như các ràng buộc bất kỳ khác sẽ giữ trên cơ sở dữ liệu Một chương trình cơ sở dữ liệu phải được viết theo cách đảm bảo rằng nếu cơ sở

Trang 25

dữ liệu là ở trong một trạng thái nhất quán trước khi thực hiện thao tác thì nó

sẽ ở trong trạng thái nhất quán sau khi hoàn thành việc thực hiện giao tác với giả thiết rằng không có sự trở ngại với các giao tác khác xảy ra [1]

Tính cô lập được hệ thống con kiểm soát sự đồng thời của DBMS bắt buộc Nếu mỗi một giao tác không làm cho các cập nhật của nó nhìn thấy được đối với các giao tác khác cho đến khi nó được xác nhận, một dạng cô lập được bắt buộc, nó giải quyết vấn đề cập nhật tạm thời và loại bỏ các rollback đồng loạt Đã có những cố gắng định nghĩa mức cô lập của một giao tác Một giao tác được gọi là có mức cô lập 0 nếu nó không viết đè các đọc rác (dirty read) của các giao tác bậc cao Cô lập ở mức 1 giao tác không mất các cập nhật và cô lập mức 2 không có mất các cập nhật và không có các đọc rác Cuối cùng, cô lập mức 3 (cũng được gọi là cô lập đúng) có các đọc lặp cộng với các tính chất mức 2

Cuối cùng tính chất bền vững là trách nhiệm của hệ thống con phục hồi của DBMS

1.4 Lịch biểu và khả năng phục hồi

Khi các giao tác thực thi đồng thời theo cách đan xen nhau thì thứ tự thực hiện của các thao tác từ các giao tác khác nhau được xem như một lịch biểu (schedule) Trong phần này, trước hết chúng ta định nghĩa khái niệm của lịch biểu, sau đó mô tả các đặc điểm các kiểu lịch biểu làm dễ việc khôi phục khi xẩy ra các thất bại

1.4.1 Lịch biểu của các giao tác

Một lịch biểu (hoặc lịch sử) S của n giao tác T1, T2, …,Tn là một thứ tự của các thao tác của các giao tác chịu ràng buộc rằng với mỗi giao tác Ti tham gia trong S, các thao tác của Ti trong S phải xuất hiện theo thứ tự như chúng xuất hiện trong Ti Tuy nhiên, để ý rằng các thao tác từ các Tj khác có thể

Trang 26

được đan xen với các thao tác của Ti trong S Lúc này, ta xem thứ tự của các

thao tác trong S là có thứ tự hoàn toàn mặc dù về mặt lý thuyết có thể làm

việc với các lịch biểu mà các thao tác của nó tạo nên các thứ tự từng phần [1] Với mục đích khôi phục và kiểm soát đồng thời, chúng ta quan tâm chính đến các thao tác read-item và write-item của các giao tác cũng như các thao tác commit và abort Để mô tả ngắn gọn một lịch biểu ta sử dụng các ký hiệu

r, w, c và a cho các thao tác read-item, write-item, commit và abort một cách tương ứng và bổ sung các chỉ số định danh giao tác (số giao tác) vào từng thao tác trong lịch biểu Trong cách ký hiệu này , mục cơ sở dữ liệu X được đọc hoặc viết đi theo các thao tác r và w trong dấu ngoặc đơn “()” Ví dụ lịch biểu của hình 1.4(a) sau đây gọi là Sa và có thể được viết như sau:

Hai thao tác trong một lịch biểu được gọi là xung đột nếu chúng thoả mãn cả

3 điều kiện sau

(1) Chúng thuộc các giao tác khác nhau

Trang 27

(2) Chúng truy cập vào cùng mục dữ liệu X (3) Ít nhất một trong các thao tác là write_item(X)

Ví dụ, trong lịch biểu Sa, các thao tác r1(X) và w2(X) là xung đột , tương tự các thao tác r2(X ) với w1(X) và w1(X) với w2(X) là xung đột Tuy nhiên, các thao tác r1(X) và r2(X ) không xung đột bởi vì chúng đều là các thao tác đọc ; các thao tác w2 (X) và w1(Y) không xung đột bởi vì chúng thao tác trên các mục dữ liệu phân biệt X và Y ; và các thao tác r1(X) và w1(X) không xung đột bởi vì chúng thuộc cùng một giao tác

Một lịch biểu S của n giao tác T1,T2, … ,Tn được gọi là một lịch biểu đầy đủ nếu các điều kiện sau đây được đảm bảo [1]:

1 Các thao tác trong S chính xác là các thao tác trong T1,T2, … ,Tn

kể cả một giao tác chấp nhận hay huỷ bỏ như là thao tác cuối cùng đối với mỗi giao tác trong lịch biểu

2 Đối với bất kỳ cặp thao tác từ cùng một giao tác Ti thứ tự xuất hiện của chúng trong S giống như thứ tự của chúng trong Ti

3 Đối với bất kỳ 2 thao tác xung đột nào, một trong 2 thao tác đó phải xẩy ra trước thao tác còn lại lịch biểu

Điều kiện (3) cho phép hai thao tác không xung đột xuất hiện trong lịch biểu

mà không cần xác định cái nào xuất hiện trước, điều đó đưa đến định nghĩa lịch biểu như là một thứ tự từng phần của các thao tác trong n giao tác Tuy nhiên, một thứ tự tổng thể phải được chỉ ra trong lịch biểu đối với mọi cặp thao tác xung đột (điều kiện 3) và với mọi cặp thao tác từ cùng một giao tác (điều kiện 2) Điều kiện 1 tuyên bố một cách đơn giản rằng mọi thao tác trong các giao tác phải xuất hiện trong một lịch biểu đầy đủ Bởi vì mỗi giao tác hoặc là được xác nhận (commited) hoặc là bị huỷ bỏ (aborted), một lịch biểu đầy đủ sẽ không chứa giao tác hoạt động nào ở cuối lịch biểu

Trang 28

Nói chung, khó gặp các lịch biểu đầy đủ trong một hệ thống xử lý giao tác , bởi vì các giao tác mới đang tiếp tục được đệ trình với hệ thống Vì vậy, cần định nghĩa khái niệm phép chiếu được xác nhận (commited projection) C(S) của một lịch biểu S, nó chỉ bao gồm các thao tác trong S thuộc về các giao tác đã được xác nhận- nghĩa là các giao tác Ti mà thao tác xác nhận cicủa nó là ở trong S

1.4.2 Đặc điểm của lịch biểu dựa trên khả năng phục hồi

Đối với một vài lịch biểu việc khôi phục từ các thất bại của giao tác là

dễ, trong khi đó với các lịch biểu khác quá trình phục hồi là rất rắc rối Do vậy việc mô tả đặc tính của các kiểu lịch biểu có thể phục hồi cũng như các lịch biểu mà việc phục hồi đối với nó là đơn giản là rất quan trọng

Trước tiên, chúng ta muốn đảm bảo rằng mỗi khi một giao tác T được xác nhận thì không bao giờ cần rollback T Các lịch biểu thoả mãn một cách

lý thuyết tiêu chuẩn này được gọi là các lịch biểu khôi phục được, và những lịch biểu không thoả mãn tiêu chuẩn được gọi là không khôi phục được và như vậy là không được chấp nhận Một lịch biểu là khôi phục được nếu không

có một giao tác T trong S xác nhận cho đến khi mọi giao tác T’ đã ghi một mục mà T đọc được xác nhận Một giao tác T “đọc” từ giao tác T’ trong một lịch biểu S nếu một mục X nào đó trước tiên được T’ ghi và sau đó T đọc Hơn nữa, T’ không bị huỷ bỏ trước khi T đọc mục X và không có một giao tác nào ghi X sau khi T’ ghi và trước khi T đọc nó (trừ những giao tác đã bị huỷ bỏ trước khi T đọc X) [1]

Các lịch biểu có thể khôi phục yêu cầu một tiến trình khôi phục phức tạp Nhưng nếu các thông tin được lưu đầy đủ trong sổ ghi hệ thống thì một thuật toán phục hồi dữ liệu có thể được đưa ra Các lịch biểu Sa và Sb là 2 lịch biểu có thể khôi phục do nó thỏa mãn định nghĩa trên Coi lịch biểu Sa’ được

Trang 29

đưa ra dưới đây giống như lịch biểu Sa chỉ trừ việc có thêm hai thao tác xác nhận được bổ sung vào Sa

Sa’: r1(X); r2(X); w1(X); r1(Y); w2(X); c2; w1(Y); c1;

Sa’ là lịch biểu có thể khôi phục cho dù có bị vấn đề cập nhật mất dữ liệu Tuy nhiên, xét 2 lịch biểu Sc và Sd sau đây:

Sc: r1(X); w1(X); r2(Y); r1(Y); w2(X); c2; a1;

Sd: r1(X); w1(X); r2(Y); r1(Y); w2(X); w1(Y); c1; c2;

Se: r1(X); w1(X); r2(Y); r1(Y); w2(X); w1(Y); a1; a2;

Sc không phải là lịch biểu có thể khôi phục do T2 đọc X từ T1 và sau đó

T2 xác nhận hoàn thành trước khi T1 xác nhận Nếu T1 hủy bỏ sau phép toán

c2 trong lịch biểu Sc thì giá trị của X mà T2 đọc không còn giá trị nữa và T2phải bị hủy bỏ sau khi nó đã được xác nhận hoàn thành, dẫn đến lịch biểu Sckhông phải là lịch biểu có thể khôi phục Để lịch biểu Sc trở thành lịch biểu có thể khôi phục thì phép toán c2 trong Sc phải được hoãn lại cho đến khi T1 đã được xác nhận hoàn thành nh ư đ ư ợc ch ỉ ra trong Sd Nếu T1 hủy bỏ thay cho xác nhận hoàn thành thì T2 cũng hủy bỏ như trong lịch biểu Se do giá trị của X nó đọc không còn hợp lệ nữa [1]

Trong một lịch biểu có thể khôi phục, không có giao tác đã xác nhận hoàn thành nào cần phải được rollback Tuy nhiên, nó có khả năng xuất hiện hiện tượng rollback dây chuyền (cascading rollback) hoặc hủy bỏ dây chuyền (cascading abort), ở đ ó một giao tác không xác nhận hoàn thành phải được rollback vì nó đọc một mục dữ liệu từ một giao tác bị lỗi Điều này được minh họa trong lịch biểu Se, giao tác T2 phải được rollback do nó lấy dữ liệu X từ

T1 mà T1 sau đó bị hủy bỏ

Trang 30

Do rollback dây chuyền tầng có thể tốn nhiều thời gian do đó nhiều giao tác có thể bị rollback nên việc mô tả đặc trưng của lịch biểu mà ở đó hiện tượng này được đảm bảo là không xuất hiện là việc quan trọng Một lịch biểu được gọi là không rollback dây chuyền hoặc tránh được rollback dây chuyền nếu mọi giao tác trong lịch biểu chỉ đọc những mục dữ liệu đã được ghi bởi các giao tác đã được xác nhận hoàn thành Trong trường hợp này, tất cả các khoản mục được đọc sẽ không bị loại bỏ vì vậy không xảy rollback dây chuyền Để thỏa mãn tiêu chuẩn này, thao tác câu lệnh r2(X) trong lịch biểu Sephải được hoãn lại cho đến khi T1 đã được xác nhận hoàn thành (hoặc hủy bỏ), do đó làm chậm T2 nhưng đảm bảo không bị rollback dây chuyền nếu T1hủy bỏ [1]

Cuối cùng, loại lịch biểu giới hạn hơn được gọi là lịch biểu chặt chẽ Trong lịch biểu này, các giao tác có thể không đọc mà cũng không ghi vào X cho đến giao tác cuối cùng đã ghi X được xác nhận hoàn thành (hoặc hủy bỏ) Các lịch biểu chặt chẽ làm đơn giản hóa quá trình khôi phục dữ liệu Trong một lịch biểu chặt chẽ, quá trình khôi phục (undo) một thao tác write(X) của một giao tác bị huỷ đơn giản là trả lại hình ảnh trước đó (giá trị cũ) của mục

dữ liệu X Thủ tục đơn giản này luôn luôn thực hiện đúng với lịch biểu chặt chẽ nhưng lại không thực hiện với các lịch biểu it tầng hoặc lịch biểu có khả năng khôi phục [1]

Ví dụ: Cho lịch biểu Sf : Sf: w1(X,5); w2(X,8); a1;

Giả sử giá trị ban đầu của X là 9, giá trị này trước đó đã được lưu trữ

trong tệp log hệ thống cùng với thao tác w(X,5) Nếu T1 hủy bỏ như trong Sf, thủ tục khôi phục sẽ trả giá trị của X là 9, mặc dù nó đã bị thay đổi bằng 8 do giao tác T2, do đó dẫn đến khả năng cho kết quả không đúng Tuy lịch biểu Sf

là không dây chuyền, nó không phải là lịch biểu chặt chẽ do nó cho phép T2

Trang 31

ghi X mặc dù giao tác cuối cùng của T1 ghi X vẫn chưa được xác nhận hoàn thành (hoặc hủy bỏ)

1.5 Thứ tự của lịch biểu

Trong phần trước, chúng ta đã biết đến đặc trưng lịch biểu dựa trên đặc tính khả năng khôi phục Bây giờ chúng ta mô tả đặc trưng của các loại lịch biểu được cho là đúng khi thực thi các giao tác đồng thời Giả sử có 2 người

sử dung- hai thư ký đặt vé máy bay, đệ trình cho hệ QTCSDL hai giao tác T1

và T2 như ở hình 1.5 gần như cùng một lúc

Nếu không có sự xen kẽ các thao tác thì chỉ có thể có 2 tác động [1]:

1 Thực hiện toàn bộ các thao tác của giao tác T1, tiếp sau là các thao tác của giao tác T2

2 Thực hiện toàn bộ các thao tác của giao tác T2 tiếp sau là các thao tác của giao tác T1

Điều này được thể hiện trong hình 4.5(a) và 4.5(b)

Trang 32

Nếu sự xen kẽ của các thao tác được phép thì sẽ có nhiều thứ tự có thể trong đó hệ thống có thể thực hiện các thao tác riêng rẽ của các giao tác Hai lịch biểu có thể được chỉ ra trong hình 4.5(c) Khái niệm xếp thứ tự của lịch biểu được sử dụng để xác định lịch biểu nào là đúng các thực hiện giao tác có

sự xen kẽ của các thao tác của chúng trong các lịch biểu [1]

Hình 1.5c)d) Các lịch biểu không theo thứ tự thực hiện các giao tác T1 và T2

1.5.1 Lịch biểu có thứ tự, không có thứ tự và lịch biểu có thứ tự xung đột

Lịch biểu A và B trong hình 1.5(a) và 1.5(b) được gọi là theo thứ tự bởi

vì các thao tác của mỗi giao tác được thực hiện một cách liên tiếp mà không

có các thao tác xen kẽ của các giao tác khác Trong một lịch biểu có thứ tự, các giao tác nguyên vẹn được thực hiện theo một trật tự : T1 rồi đến T2 trong hình 4.5(a) và T2 rồi đến T1 trong hình 1.5(b) Các lịch biểu C và D trong hình 1.5(c) được gọi là không theo thứ tự bởi vì có sự xen kẽ thao tác từ 2 giao tác

Trang 33

Một cách hình thức, một lịch biểu S là theo thứ tự nếu đối với mỗi giao tác T tham gia trong lịch biểu, toàn bộ thao tác của T được thực hiện một cách liên tiếp trong lịch biểu, ngược lại thì lịch biểu được coi là không theo thứ tự

Do đó, trong một lịch biểu theo thứ tự tại một thời điểm chỉ một giao tác hoạt động – việc xác nhận (hoặc huỷ bỏ) của một giao tác hoạt động khởi tạo việc thực hiện giao tác kế tiếp Không có sự xen kẽ xẩy ra trong một lịch biểu theo thứ tự Chúng ta có thể có một giả thiết hợp lý là mỗi một lịch biểu có thứ tự được xem là đúng đắn, nếu ta xem các giao tác là độc lập Chúng ta có thể giả thiết như vậy bởi vì mỗi giao tác được giả thiết là đúng đắn nếu được thực hiện trên chính nó Chừng nào mỗi giao tác được thực hiện từ đầu đến cuối

mà không có sự xen kẽ từ các thao tác của giao tác khác, chúng ta nhận được một kết quả cuối cùng chính xác trên cơ sở dữ liệu Vấn đề với các lịch biểu

có thứ tự là chúng hạn chế tính đồng thời hoặc xen kẽ của các giao tác Trong một lịch biểu theo thứ tự, nếu một giao tác chờ một thao tác I/O hoàn thành, thì chúng ta không thể chuyển bộ xử lý sang giao tác khác, do đó lãng phí thời gian xử lý CPU Thêm vào đó, nếu giao tác T khá dài, các giao tác khác phải đợi T hoàn thành tất cả các hoạt động của nó trước khi bắt đầu Do đó các lịch biểu theo thứ tự được xem không chấp nhận được trong thực tế [1]

Để minh hoạ, xét các lịch biểu trong hình 1.5 và giả sử các giá trị ban đầu của các mục cơ sở dữ liệu là X=90, Y=90 và N=3, M=2 Sau khi thực thi các giao tác T1 và T2 , chúng ta hy vọng giá trị cơ sở dữ liệu là X=89 và Y=93 theo ý nghĩa của các giao tác Chắc chắn là việc thực hiện lịch biểu theo thứ tự A hoặc B đều đưa ra các kết quả đúng đắn Xét các lịch biểu không theo thứ tự C và D ở hình 1.5 Lịch biểu C sẽ đưa ra kết quả X=92 và Y=93, trong đó X là không đúng, trong khi đó lịch biểu D đưa ra kết quả đúng

Lịch biểu C đưa ra kết quả không đúng vì vấn đề cập nhật bị mất Giao tác T2 đọc giá trị của X trước khi giá trị này được thay đổi bởi giao tác T1, do

Trang 34

đó chỉ ảnh hưởng của T2 lên X được phản ánh trong cơ sở dữ liệu Ảnh hưởng của T1 trên X bị mất, bị T2 viết đè lên, dẫn tới kết quả không chính xác cho mục X Tuy nhiên, một số lịch biểu không theo thứ tự vẫn đưa ra kết quả đúng, như lịch biểu D Chúng ta muốn xác định các lịch biểu không thứ tự nào luôn luôn cho kết quả đúng và lịch biểu nào có thể cho kết quả sai Khái niệm được sử dụng để mô tả đặc trưng các lịch biểu theo cách này là sự sắp thứ tự được của một lịch biểu

Một lịch biểu S của n giao tác là sắp thứ tự được nếu nó tương đương với một lịch biểu có thứ tự của cùng n giao tác đó Chúng ta sẽ định nghĩa sự tương đương của các lịch biểu ngay sau đây Để ý rằng có n! lịch biểu có thứ

tự có thể có của n giao tác và có nhiều hơn nhiều các lịch biểu không có thứ

tự Chúng ta có thể tạo ra hai nhóm các lịch biểu không thứ tự: những lịch biểu tương đương với một (hoặc nhiều) lịch biểu có thứ tự và như vậy là có thể sắp thứ tự được, và những lịch biểu không tương đương với một lịch biểu

có thứ tự nào và như vậy là không sắp thứ tự được [2]

Nói rằng một lịch biểu không thứ tự S là sắp thứ tự được là tương đương với việc nói rằng nó là đúng, bởi vì nó tương đương với một lịch biểu có thứ

tự được xem là đúng Câu hỏi còn lại là: Khi nào hai lịch biểu được xem là tương đương? Có nhiều cách để định nghĩa tính tương đương của lịch biểu Cách đơn giản nhất, nhưng ít thoả mãn nhất là định nghĩa tính tương đương lịch biểu bao hàm việc so sánh ảnh hưỏng của các lịch biểu lên cơ sở dữ liệu Hai lịch biểu được gọi là tương đương kết quả nếu chúng đưa ra cùng trạng thái cuối cùng của một cơ sở dữ liệu [1,2]

Tuy nhiên, hai lịch biểu khác nhau có thể ngẫu nhiên đưa ra trạng thái cuối cùng như nhau.Ví dụ trong hình 1.6 các lịch biểu S1 và S2 sẽ đưa ra trạng thái cơ sở dữ liệu cuối cùng là như nhau nếu chúng thực thi trên một cơ sở dữ liệu với một giá trị khởi tạo X=100; nhưng đối với các giá trị khởi tạo khác

Trang 35

của X, các lịch biểu này không phải là tương đương kết quả Hơn nữa, các lịch biểu này thực hiện các giao tác khác nhau, do đó chúng không nên được xem là tương đương Như vậy, chỉ riêng tính tương đương kết quả không thể được sử dụng để định nghĩa sự tương đương của các lịch biểu

Hai lịch biểu được xem như là tương đương xung đột nếu thứ tự của 2 thao tác xung đột bất kỳ là như nhau trong cả hai lịch biểu Nếu hai thao tác xung đột được áp dụng trong các trật tự khác nhau trong 2 lịch biểu thì ảnh hưởng có thể khác nhau trên cơ sở dữ liệu hoặc trên các giao tác khác trong lịch biểu, và do đó các lịch biểu là không tương đương xung đột Ví dụ, nếu một thao tác đọc và ghi xẩy ra theo theo thứ tự r1(X), w2(X) trong lịch biểu S1

và theo thứ tự ngược lại w2(X), r1(X) trong lịch biểu S2, thì giá trị do thao tác

r1(X) có thể khác nhau trong hai lịch biểu Một cách tương tự, nếu hai thao tác ghi xuất hiện theo thứ tự w1(X), w2(X) trong S1 và theo thứ tự ngược lại

Trang 36

w2(X), w1(X) trong S2 thì thao tác r(X) tiếp theo trong 2 lịch biểu sẽ đọc các giá trị khác nhau; hoặc nếu chúng là các thao tác cuối cùng ghi mục X trong các lịch biểu thì giá trị cuối cùng của mục X trong cơ sở dữ liệu sẽ khác nhau

Sử dụng khái niệm tương đương xung đột, chúng ta định nghĩa một lịch biểu S là sắp thứ tự được xung đột nếu nó là tương đương (xung đột) với một lịch biểu có thứ tự S’ nào đó Trong trường hợp như vậy, chúng ta có thể sắp xếp thứ tự lại các thao tác không xung đột trong S cho đến khi tạo được một lịch biểu theo thứ tự tương đương S’ Theo định nghĩa này , lịch biểu D của hình 1.5(c) là tương đương với lịch biểu theo thứ tự A của hình 1.5(a) Trong

cả 2 lịch biểu, read_item(X) của T2 đọc giá trị của X được ghi bởi T1, trong khi đó các thao tác read_item khác đọc các giá trị cơ sở dữ liệu từ trạng thái

cơ sở dữ liệu ban đầu Thêm và đó, T1 là giao tác cuối cùng để ghi Y và T2 là giao tác cuối cùng để ghi X trong cả hai lịch biểu Bởi vì A là lịch biểu theo thứ tự và lịch biểu D là tương đương với A, D là một lịch biểu sắp thứ tự được Chú ý rằng các thao tác r1(Y) và w1(Y) của lịch biểu D không xung đột với các thao tác r2(X) và w2(X) vì chúng truy cập đến các mục dữ liệu khác nhau Do đó, có thể chuyển r1(Y), w1(Y) ra trước r2(X), w2(X) dẫn đến lịch biểu theo thứ tự tương đương T1,T2 [1]

Lịch biểu C của hình 1.5(c) là không tương đương với cả hai lịch biểu theo thứ tự A và B do đó nó là không sắp thứ tự được Việc cố gắng sắp xếp lại thứ tự của các thao tác của lịch biểu C để tìm ra một lịch biểu có thứ tự tương đương là thất bại, bởi vì r2(X) và w1(X) xung đột nghĩa là không thể chuyển r2(X) xuống để được một lịch biểu theo thứ tự tương đương T1,T2 Một cách tương tự, bởi vì w1(X) và w2(X) xung đột , nên không thể chuyển

r2(X) xuống để nhận được một lịch biểu theo thứ tự tương đương T1,T2 Tương tự, vì w1(X) và w2(X) là xung đột, chúng ta không thể chuyển w1(X) xuống để nhận được lịch biểu có thứ tự tương đương T2, T1

Trang 37

1.5.2 Kiểm tra thứ tự xung đột của một lịch biểu

Có một thuật toán đơn giản để xác định tính sắp thứ tự xung đột của một lịch biểu Phần lớn các phương pháp kiểm soát đồng thời không kiểm tra đối với tính sắp được thứ tự Thuật toán này chỉ nhằm làm hiểu hơn về các giao thức điều khiển đồng thời

Thuật toán 5.1 có thể được sử dụng để kiểm tra một lịch biểu đối với tính có thể sắp thứ tự xung đột Thuật toán chỉ chú ý đến các thao tác read_item và write_item trong một lịch biểu để xây dựng một đồ thị ưu tiên (hoặc một đồ thị sắp thứ tự), đó là một đồ thị có hướng G=(N,E) gồm tập các đỉnh N={T1.T2,….,Tn} và tập các cạnh có hướng E={e1,e2,…,en} Có một đỉnh trong đồ thị cho một giao tác Ti trong lịch biểu Mỗi cạnh ei trong đồ thị

có dạng (Tj  Tk), 1 <= j <= n , 1 <= k <= n , trong đó Tj là đỉnh đầu của ei

và Tk là đỉnh cuối của cạnh ei Một cạnh như vậy sẽ được tạo ra nếu một trong các thao tác trong Tj xuất hiện trong lịch biểu trước một số thao tác xung đột trong Tk [1]

Thuật toán 5.1 Kiểm tra tính sắp thứ tự xung đột của một lịch biểu S [1]

1 Đối với mỗi giao tác T i tham gia trong lịch biểu S tạo một đỉnh có nhãn là T i trong đồ thị ưu tiên

2 Với mỗi trường hợp trong S ở đó T j thực hiện một thao tác read_item(X) sau khi T i thực hiện một thao tác write_item(X) thì tạo

ra một cạnh (T i T j ) trong đồ thì ưu tiên

3 Với mỗi trường hợp trong S, ở đó T j thực hiện một thao tác write_item(X) sau khi T i thực hiện một thao tác read_item(X) thì tạo

ra một cạnh (T i T j ) trong đồ thị ưu tiên

4 Với mỗi trường hợp trong S, ở đó T j thực hiện một thao tác write_item(X) sau khi T i thực hiện một thao tác write_item(X) thì tạo ra một cạnh (T i T j ) trong đồ thị ưu tiên

Trang 38

5 Lịch biểu S là sắp thứ tự được khi và chỉ khi đồ thị ưu tiên không có chu trình

Đồ thị ưu tiên được xây dựng như miêu tả trong thuật toán 1.1 Nếu có một chu trình trong đồ thị ưu tiên, lịch biểu S là không sắp thứ tự được (xung đột) nếu không có chu trình thì S là sắp thứ tự được

Trong đồ thị ưu tiên, một cạnh từ Ti tới Tj có nghĩa là giao tác Ti phải xuất hiện trước giao tác Tj trong bất kỳ lịch biểu có thứ tự tương đương với S bởi vì hai thao tác xung đột xuất hiện trong một lịch biểu theo thứ tự đó Nếu không có chu trình trong đồ thị ưu tiên, chúng ta có thể tạo ra một lịch biểu có thứ tự tương đương S’ tương đương với S bằng cách sắp xếp các giao tác tham gia trong S như sau: khi một cạnh tồn tại trong đồ thị ưu tiên từ Ti tới

Tj, Ti phải xuất hiện trước Tj trong lịch biểu theo thứ tự tương đương S’ Chú

ý rằng các cạnh (Ti  Tj) trong đồ thị ưu tiên có thể được đánh nhãn bởi tên của mục dữ liệu dẫn đến việc tạo nên cạnh

(a) Đồ thị ưu tiên đối với lịch biểu theo thứ tự A

(b) Đồ thị ưu tiên đối với lịch biểu theo thứ tự B

(c) Đồ thị ưu tiên đối với lịch biểu C (Không theo thứ tự xung đột)

Trang 39

(d) Đồ thị ưu tiên đối với lịch biểu D (theo thứ tự xung đột, tương đương với lịch biểu A)

Nói chung, nhiều lịch biểu có thứ tự tương đương với lịch biểu S nếu đồ thị ưu tiên cho S không có chu trình Tuy nhiên, nếu đồ thị ưu tiên có một chu trình, thì dễ dàng chỉ ra rằng chúng ta không thể tạo ra bất kỳ một lịch biểu có thứ tự tương đương, và như vậy S là không sắp thứ tự được Các đồ thị ưu tiên được tạo ra cho các lịch biểu từ A đến D, được minh hoạ bằng hình vẽ ở trên Đồ thị cho lịch biểu C có một chu trình, như vậy nó không phải là sắp thứ tự được Đồ thị cho lịch biểu D không có chu trình, và lịch biểu có thứ tự tương đương là T1 theo sau là T2 Các đồ thị cho lịch biểu A và B không có chu trình bởi vì các lịch biểu là có thứ tự và như vậy là sắp thứ tự được Một ví dụ khác, xét lịch biểu mà trong đó có 3 giao tác như trong hình 1.8 Hai lịch biểu E và F trong hình (b) và (c) các giao tác được thực thi một cách độc lập và các đồ thị ưu tiên đối với lịch biểu E và F được thể hiện trong phần (d) và (e) Lịch biểu F được thể hiện trong hình 1.8(e) Mặc dù chỉ một lịch biểu theo thứ tự tương đương với một lịch biểu theo thứ tự xung đột Hình 1.8(f) thể hiện một đồ thị ưu tiên mà dựa vào nó xác định được 2 lịch biểu theo thứ tự tương đương

Giao tác T3

Read_item(Y) Read_item(Z) Write_item(Y) Write_item(Z)

Trang 40

(b)

Giao tác T1 Giao tác T2 Giao tác T3

Read_item(Z) Read_item(Y) Write_item(Y)

Read_item(Y) Read_item(Z) Read_item(X)

Write_item(Y) gian Write_item(Y)

Read_item(X) Read_item(Y)

Write_item(Y)

Write_item(X)

Lịch biểu E c)

Giao tác T1 Giao tác T2 Giao tác T3

Read_item(Y) Read_item(Z) Read_item(X)

Write_item(X)

Write_item(Y) Write_item(Z) Read_item(Z)

Read_item(Y)

Write_item(Y)

Read_item(Y) Read_item(Y) Write_item(X) Write_item(X) Lịch biểu F

Hình 1.8 ví dụ khác của việc kiểm tra sự tuần tự (a) các thao tác READ và WRITE của 3 giao tác T1,T2,T3 (b) lịch biểu E (c) lịch biểu F

Thời gian

Ngày đăng: 25/03/2015, 10:24

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Navart and Elmasry, “Foundermental of Database systems”, chapter 19 and chapter 20 Sách, tạp chí
Tiêu đề: Foundermental of Database systems
[2] Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (1987) “Concurrency control and Recovery In Database Systems” Sách, tạp chí
Tiêu đề: Concurrency control and Recovery In Database Systems
[3] Raghu Ramakrishnan, Johnnes Gehrke (1987) “Database Management Systems (2nd Ed)” Sách, tạp chí
Tiêu đề: Database Management Systems (2nd Ed)
[4] Rasmus Pagh (2007), Lecture 7: Concurrency control, Database Tuning, Spring Sách, tạp chí
Tiêu đề: Lecture 7: Concurrency control
Tác giả: Rasmus Pagh
Năm: 2007
[5] Kjell Orsborn, DATABASE TECHNOLOGY - 1MB025 Fall 2005 Sách, tạp chí
Tiêu đề: DATABASE TECHNOLOGY - 1MB025
[6] Valentina Tamma, Transaction Management, Connolly &amp; Begg. Chapter 19. Third edition Sách, tạp chí
Tiêu đề: Transaction Management
[10] Jame Cook University, “Advanced Database Management (CP3020)”, Chapter 20 - Concurrency Control Techniques Sách, tạp chí
Tiêu đề: Advanced Database Management (CP3020)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w