Cơ sở dữ liệu - Chương 8: Transaction và bài toán đồng thời
Cơ sở dữ liệu -
Chương 8: Transaction và bài toán đồng thời
Trước khi transaction đọc hay chỉnh sẳ dữ liệu, nó cần được bảo vệ tránh ảnh hưởng của các transaction khác đang chỉnh sửa cùng dữ liệu
64 trang |
Chia sẻ: huyhoang44 | Lượt xem: 655 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Cơ sở dữ liệu - Chương 8: Transaction và bài toán đồng thời, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
GV Phi Loan - FIT - UIH
Chương 8
1
GV Phi Loan - FIT - UIH
Nội dung
• Transaction là gì?
• Tính chất cu ̉a Transaction
• Thực thi transaction tường minh
• Bài toán đồng thời và cơ chế qua ̉n l{ khóa
– Các loại khóa
– Cơ chế quản l{ khóa
– Giải quyết tình huống ngheñ khóa
2
GV Phi Loan - FIT - UIH
Khái quát về Transaction
• A transaction is a sequence of operations
performed as a single logical unit of work.
• Nêú 1 transaction thành công, tất ca ̉ các chỉnh
sửa dư ̃ liệu trong transaction đó sẽ được
công nhâ ̣n (commit). Nếu có lỗi khi thực thi
transaction, tất ca ̉ mo ̣i sửa đỏ̂i dư ̃ liệu sẽ bị
xóa và CSDL trở về lại tình tra ̣ng ban đầu
trước khi thực thi transaction đó.
3
GV Phi Loan - FIT - UIH
Bốn thuộc tính cơ bản (ACID) cu ̉a
transaction
• Tính nguyên tố (Atomicity): một transaction phải
là 1 đơn vị công việc nguyên tử; hoặc tất cả các sửa đổi dữ
liệu đều được thực thi hoặc không 1 sửa đổi nào được thực
thi.
• Tính nhất quán (Consistency): một giao tác phải
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.
• Tính cô lập (Isolation) : Những chỉnh sửa được làm
bởi transaction hiện hành phải được cô lập khỏi những chỉnh
sửa được làm bởi các transaction hiện hành khác.
• Tính bền vững (Durability): những thay đổi của
CSDL do giao tác thực hiện thành công là bền vững, không bị
mất đi kể cả khi có lỗi xảy ra sau đó.
4
GV Phi Loan - FIT - UIH
Phân loại Transaction
• Giao tác tường minh (explicit transaction): được khai
báo bằng lệnh BEGIN TRANSACTION
• Giao tác ngầm định (implicit transaction): giao tác
mới sẽ tự động bắt đầu ngay khi giao tác trước đó hoàn
tất, nhưng mỗi transaction được kết thúc tươ ̀ng minh bằng
lê ̣nh COMMIT hay ROLLBACK
• Giao tác tự động chuyển giao (autocommit
transaction): mỗi một lệnh được xem như 1 transaction.
5
GV Phi Loan - FIT - UIH
Transaction trong SQL server
• Để hoàn thành các yêu cầu của 4 tính chất
ACID trên, SQL Server cung cấp các chức năng
sau:
– Quản lý Transaction (Transaction
management)
– Quản l{ Khoá (Locking Management)
– Ghi nhật ký (Logging)
6
GV Phi Loan - FIT - UIH
QUA ̉N LÝ TRANSACTION
7
GV Phi Loan - FIT - UIH
Định nghĩa transaction tươ ̀ng minh
• BEGIN TRAN[SACTION] [transaction_name]
Dùng để đánh dấu việc bắt đầu của 1
transaction
• COMMIT [TRAN[SACTION]
[transaction_name]
Hay
COMMIT WORK
Dùng để đánh dấu việc kết thúc của 1
transaction tường minh
8
GV Phi Loan - FIT - UIH
Ví dụ
9
GV Phi Loan - FIT - UIH
Làm thế nào để quay về lại trước những
thay đổi
ROLLBACK [TRAN[SACTION]
[transaction_name |savepoint_name ]
Dùng để quay ngược một transaction tường
minh hay ngầm định về lại điểm bắt đầu, hay
về điểm dừng (save-point) bên trong 1
transaction
10
GV Phi Loan - FIT - UIH
Ví dụ
BEGIN TRANSACTION
USE Pubs
UPDATE Titles
SET Royalty = Royalty + 20
WHERE type LIKE 'busin%'
IF (SELECT MAX(Royalty) FROM Titles WHERE Type LIKE 'busin%')
>$25
BEGIN
ROLLBACK TRANSACTION
PRINT 'Transaction Rolled back'
END
ELSE
BEGIN
COMMIT TRANSACTION
PRINT 'Transaction Committed'
END
11
GV Phi Loan - FIT - UIH
Tạo điểm dừng cho 1 TRANSACTION
• Lệnh SAVE TRANSACTION dùng để đặt 1 điểm dừng
(save point) bên trong 1 transaction. Điểm dừng chia
transaction thành 1 các phần khác nhau sao cho
transaction có thể quay về lại điểm dừng này nếu 1
phần của transaction bị loại bỏ có điều kiện.
• Cú pháp
SAVE TRAN[SACTION]
{savepoint_name }
12
GV Phi Loan - FIT - UIH
Thực thi một transaction với điểm dừng
BEGIN TRANSACTION
UPDATE Employee
SET cCurrentPosition = '0015'
WHERE cEmployeeCode = '000002‘
UPDATE Position
SET iCurrentStrength = iCurrentStrength + 1
WHERE cPositionCode = '0015'
SAVE TRANSACTION trnTransaction1
UPDATE Requisition
SET siNoOfVacancy=siNoOfVacancy - 10
WHERE cRequisitionCode='000004'
UPDATE Position
SET iCurrentStrength=iCurrentStrength+10
WHERE cPositionCode='0015‘
13
GV Phi Loan - FIT - UIH
Thực thi một transaction với điểm dừng
IF (SELECT iBudgetedStrength-iCurrentStrength
FROM Position WHERE cPositionCode = '0015') <0
BEGIN
PRINT 'Transaction 1 has been committed
but transaction 2 has not been committed.'
ROLLBACK TRANSACTION trnTransaction1
END
ELSE
BEGIN
PRINT 'Both the transactions have been committed.'
COMMIT TRANSACTION
END
14
GV Phi Loan - FIT - UIH
Ví du ̣: dùng transaction
và cơ chế qua ̉n lý lỗi
BEGIN TRY;
BEGIN TRANSACTION;
UPDATE Production.ProductInventory
SET Quantity -= 100
WHERE ProductID = 527
AND LocationID = 6 -- misc storage
AND Shelf = ‘B’ AND Bin = 4;
UPDATE Production.ProductInventory
SET Quantity += 100
WHERE ProductID = 527 AND LocationID = 50
AND Shelf = ‘F’ AND Bin = 11;
COMMIT TRANSACTION;
15
GV Phi Loan - FIT - UIH
Ví du ̣: dùng transaction
và cơ chế qua ̉n lý lỗi
END TRY
BEGIN CATCH;
ROLLBACK TRANSACTION;
RAISERROR(’Inventory Transaction Error’, 16, 1);
RETURN;
END CATCH;
16
GV Phi Loan - FIT - UIH
Hàm XACT_STATE()
• Chỉ ra yêu câù đang cha ̣y hiện thơ ̀i có transaction
ngươ ̀i dùng nào đang hoa ̣t đô ̣ng không và
transaction đó có thể được commit hay không?
17
1 Yêu cầu hiê ̣n thời có 1 transaction người dùng đang hoạt
động có thê ̉ commit được
0 Không có transaction nào đang hoạt động
-1 Yêu cầu hiện thời có 1 transaction người dùng đang hoa ̣t
động nhưng có lõ̂i nên transaction được xem là
uncommittable, không thê ̉ commit hay rollback về điê ̉m
dư ̀ng . Yêu cầu không thê ̉ “write” được chon đêń khi
transaction được rollback hoàn toàn.
GV Phi Loan - FIT - UIH
Ví dụ hàm Xact_State()
BEGIN TRY
BEGIN TRANSACTION;
DELETE FROM Production.Product
WHERE ProductID = 980;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF (XACT_STATE()) = -1
BEGIN
PRINT 'The transaction is in an uncommittable
state.‘ + ' Rolling back transaction.'
ROLLBACK TRANSACTION;
END;
18
GV Phi Loan - FIT - UIH
Ví dụ hàm Xact_State()
IF (XACT_STATE()) = 1
BEGIN
PRINT 'The transaction is committable.' +
‘ Committing transaction.'
COMMIT TRANSACTION;
END;
END CATCH;
GO
19
GV Phi Loan - FIT - UIH
Các lệnh không hợp lệ trong transaction
• Rollback phải có khả năng “undo”, vì vậy các
lệnh sau không được dùng:
– CREATE DATABASE, ALTER DATABASE
– CREATE TABLE, ALTER TABLE, TRUNCATE TABLE
– CREATE INDEX
– Tất cả lệnh DROP
– SELECT...INTO
– GRANT or REVOKE
– DISK INIT, RECONFIGURE, LOAD DATABASE,
LOAD TRANSACTION
20
GV Phi Loan - FIT - UIH
QUA ̉N LÝ KHÓA
SQL Server uses a dynamic, cooperative locking
mechanism to protect the consistency of the data in
the database.
21
GV Phi Loan - FIT - UIH
Nội dung
• Các mode khóa
– Khóa Intent
• Tương thích giư ̃a các khóa
22
GV Phi Loan - FIT - UIH
Transaction và cơ chế khóa
• Trước khi transaction đo ̣c hay chỉnh sửa dư ̃
liê ̣u, nó cần được ba ̉o vê ̣ tránh a ̉nh hưởng
của các transaction khác đang chỉnh sửa cùng
dư ̃ liê ̣u.
• Transaction yêu cầu khóa trên dư ̃ liệu đang
dùng.
• Có nhiều mode khóa khác nhau phu ̣ thuô ̣c vào
mư ́c độ phu ̣ thuô ̣c dư ̃ liệu của transaction.
23
GV Phi Loan - FIT - UIH
Transaction và cơ chế khóa
• Nếu transaction yêu cầu 1 mode khóa xung
đột Database Engine sẽ bắt transaction này
dư ̀ng (pause) cho đêń khi khóa trươ ́c đó
được giải phóng.
• Tât́ ca ̉ các khóa sẽ được giải phóng khi
transaction hoàn thành (bằng commit hay roll
back)
24
GV Phi Loan - FIT - UIH
25
GV Phi Loan - FIT - UIH
Lock Granularity and Hierarchies
• Multigranular locking : cho phép khóa các tài
nguyên trong 1 transaction ở các mư ́c khác
nhau.
– Mục đích: gia ̉m thiểu chi phí khóa.
• Khóa ở mư ́c nho ̉ hơn như mư ́c row sẽ làm tăng
tính đồng thời nhưng tăng chi phí vì câǹ nhiều
khóa nếu có nhiều hàng câǹ khóa.
• Khóa ở mư ́c cao hơn như mư ́c table, sẽ ha ̣n
chế truy xuất đến các phâǹ khác cu ̉a bảng mà
transaction hiện hành không dùng đến, nhưng
gia ̉m được chi phí.
26
GV Phi Loan - FIT - UIH
Các mode khóa
27
GV Phi Loan - FIT - UIH
Intent locks
• SQL Server không chỉ khóa theo yêu câù
mà còn thông báo intent của khóa ở mư ́c
cao hơn.
• Xét 2 transaction: T1 và T2, mõ̂i
transaction sẽ modify các hàng khác
nhau. Để modify 1 hàng, SQL Server cần
phải thực hiện khóa exclusive trên hàng
có { định modify.
28
GV Phi Loan - FIT - UIH
Intent locks
• Nếu SQL Server chỉ thực hiện 2 khóa
exclusive cho T1 trên R1 và T2 trên R2, SQL
Server sẽ pha ̉i kha ̉o sát cả cấu trúc cây để xác
định hàng nào bị khóa? Để gia ̉m chi phí SQL
Server sẽ tuyến bó̂ intent của nó lên mức cao
hơn của cây bằng cách đă ̣t khóa intent các
hàng phía trên và ngược về gốc.
29
GV Phi Loan - FIT - UIH
30
GV Phi Loan - FIT - UIH
Intent locks
• Bằng cách khảo sát khóa intent, SQL
Server có thể nhanh chóng xác định là
hiện có 1 intent-exclusive lock trên bảng
nhưng các hàng T1 năm̀ ở phâǹ khác của
cây, nên SQL Server có thể vâñ có được
khóa mà T2 yêu cầu.
31
GV Phi Loan - FIT - UIH
Sự tương thích khóa
Lock compatibility
• Tương thích khóa dùng để kiểm soát các transaction
có chiếm các khóa trên cùng tài nguyên cùng lúc hay
không?
• Nếu tài nguyên đã bị khóa bởi 1 transaction, mô ̣t yêu
câù khóa mơ ́i được câṕ chỉ khi mode của khóa được
yêu câù tương thích vơ ́i mode của khóa hiện có.
– Nếu không tương thích vơ ́i khóa hiện có,
transaction yêu câù khóa mơ ́i sẽ đợi cho đến khi
khóa hiện tại được giải phóng hay hết thơ ̀i gian
đợi.
32
GV Phi Loan - FIT - UIH
Sự tương thích khóa
Lock compatibility
• Không có mode khoá nào tương thích với
khóa exclusive (X). Trong khi đang có khóa X
thì không transaction nào có thê ̉ chiêḿ được
bât́ kz loa ̣i khóa nào (trên tài nguyên đó cho
đêń khi khóa X được gia ̉i phóng.
33
GV Phi Loan - FIT - UIH
Sự tương thích khóa
Lock compatibility
• Nếu khóa shared (S) đang được dùng trên 1
tài nguyên, các transaction khác có thê ̉ chiếm
các khóa shared hay khóa update (U) ngay
trên tài nguyên đó ngay ca ̉ khi transaction đầu
chưa hoàn tất. Tuy nhiên các transaction
không thể có được khóa exclusive cho đêń khi
khóa shared được giải phóng
34
GV Phi Loan - FIT - UIH
Lock Compatibility Matrix
35
GV Phi Loan - FIT - UIH
Quiz
• Nếu transaction T1 hiện đang giữ khóa
update (U) trên 1 hàng. Transaction T2 yêu
cầu cấp khóa shared ngay trên hàng đó. T2
có được cấp khóa không???
• Tại sao khóa IX hiện hành có thê ̉ tích hợp
được với 1 khóa IX khác??
– Because the intent locks are never held at the
actual resource level ; they are at least one
level above in the tree.
36
GV Phi Loan - FIT - UIH
Concurrency Effects
37
Các bài toán đồng thời
GV Phi Loan - FIT - UIH
Tính cô lập và bài toán đồng thời
Isolation and Concurrency Problems
• Khi người dùng truy xuất tài nguyên cùng lúc
thì được go ̣i là truy xuất tài nguyên đồng thời
(resource concurrently).
• Do dư ̃ liê ̣u bị truy xuất đồng thời nên cần có
cơ chế bảo vệ khi nhiều người dùng cùng sửa
đỏ̂i tài nguyên.
38
GV Phi Loan - FIT - UIH
Dynamic Lock Management
• SQL Server sử dụng cơ chế quản l{ khóa
động để tăng tính đò̂ng thời trong CSDL.
– Nếu transaction chỉnh sửa 1 hàng trong
ba ̉ng, SQL Server sẽ cấp 1 lock hàng (row
lock).
– Nếu ba ̉ng có nhiều khóa hàng, SQL server se ̃
cấp khóa ba ̉ng hay khóa trang thay thế.
39
GV Phi Loan - FIT - UIH
Các mức cô lập transaction
(transaction isolation level)
• Nên chọn mư ́c cô lâ ̣p cho transaction không làm a ̉nh
hưởng đến các khóa đang có đê ̉ tránh dư ̃ liệu bị sửa
đô ̉i.
• Mô ̣t transaction luôn nhâ ̣n khóa đô ̣c quyền trên bât́
kz dư ̃ liệu nào mà nó sửa đô ̉i và sẽ giư ̃ khóa cho đến
khi transaction hoàn tât́.
• Mức cô lâ ̣p càng thâṕ thì ngươ ̀i dùng càng có nhiều
kha ̉ năng truy xuât́ dư ̃ liệu đồng thơ ̀i, nhưng cũng
gây ra nhiều a ̉nh hưởng tương tranh và ngược la ̣i..
40
GV Phi Loan - FIT - UIH
Các mư ́c cô lập
• Để chọn mư ́c cô lâ ̣p thích hợp thì pha ̉i cân đôí
giư ̃a yêu cầu ba ̉o toàn dư ̃ liệu của ư ́ng dụng
với chi phí cu ̉a mỗi mư ́c cô lâ ̣p.
• Mức cô lâ ̣p cao nhất là tuần tự hóa
(serializable)
• Mức cô lâ ̣p thấp nhất là cho phép đọc dư ̃ liệu
chưa được commit (read uncommitted).
4
1
GV Phi Loan - FIT - UIH
Bốn mư ́c cô lập theo chuẩn ISO
1. Read uncommitted: mức thâṕ nhât́, transaction bị
cô lâ ̣p chỉ đu ̉ để ba ̉o đa ̉m các dư ̃ liệu bị lỗi vâ ̣t lý
không được đo ̣c mà thôi
2. Read committed: mức mă ̣c định của Database
Engine
3. Repeatable read
4. Serializable: mức cao nhât́, các transaction hoàn
toàn bị cô lâ ̣p khỏi các transaction khác
42
GV Phi Loan - FIT - UIH
Các mức cô lập của SQL server DB Engine
1. READ UNCOMMITTED: các lệnh có thể đo ̣c các hàng
bị chỉnh sửa bởi các transaction khác dù chưa
được commit
2. READ COMMITTED: các lệnh không thể đo ̣c dữ liệu
đã bị sửa đô ̉i nhưng chưa commit bởi các
transaction khác.
3. REPEATABLE READ: các lệnh không thể đo ̣c dữ liệu
đã bị sửa đô ̉i bởi các transaction khác và không có
transaction nào có thể sửa đô ̉i dư ̃ liệu đã được đo ̣c
bởi transaction hiện hành cho đến khi transaction
hiện hành hoàn tất.
43
GV Phi Loan - FIT - UIH
Các mức cô lập của SQL server DB Engine
4. SNAPSHOT: dư ̃ liệu được đọc bởi bất kz lệnh
nào trong 1 transaction thì sẽ đuợc giư ̃ giống
như lúc bắt đầu transaction.
5. SERIALIZABLE
44
GV Phi Loan - FIT - UIH
Các mức cô lập và ảnh hưởng cu ̉a
tính đồng thơ ̀i
45
GV Phi Loan - FIT - UIH
Nonstandard Isolation Level:
snapshot
• Có thể ca ̉i tiến tính đò̂ng thời và có đặc
tính tương tự như mư ́c serializable.
– Dư ̃ liệu được đọc bởi 1 lệnh trong
transaction sẽ ở tra ̣ng thái giống như lúc
bắt đầu transaction.
– The statements in a transaction get a
snapshot of the committed data as it
existed at the start of the transaction
46
GV Phi Loan - FIT - UIH
Nonstandard Isolation Level
• Để sử dụng mư ́c isolation này, cần phải
thay đỏ̂i tùy cho ̣n của database để có thể
dùng thêm tài nguyên trong tempdb.
• Khi bắt đầu transaction, phải xác định
snapshot isolation level.
47
GV Phi Loan - FIT - UIH
Ví dụ
USE [AdventureWorks2008]
GO
ALTER DATABASE AdventureWorks2008
SET ALLOW_SNAPSHOT_ISOLATION ON
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION
SELECT * FROM HumanResources.EmployeePayHistory;
SELECT * FROM HumanResources.Department;
GO
COMMIT TRANSACTION;
GO
48
GV Phi Loan - FIT - UIH
Lock Duration by Transaction Isolation
Level
49
GV Phi Loan - FIT - UIH
Cách sử du ̣ng khóa
• Mặc định của transaction isolation là read
committed, có nghĩa là SQL Server ba ̉o đảm là
chỉ có dữ liê ̣u nào đã commit thì mới được
đọc. Trong khi 1 hàng đang được cập nhật,
dữ liê ̣u chưa được commit, SQL Server sẽ
buô ̣c các transactions muốn đo ̣c dư ̃ liệu pha ̉i
đợi, cho đêń khi dữ liê ̣u được commit.
50
GV Phi Loan - FIT - UIH
Ví dụ về sử dụng khoá
• User1 đang thực hiện các lệnh sau để cập nhật điểm
và ngày thi cho ứng viên có mã là ‘000002’ trong bảng
ExternalCandidate.
BEGIN TRANSACTION
UPDATE ExternalCandidate
SET siTestScore = 90
WHERE cCandidateCode='000002'
UPDATE ExternalCandidate
SET dTestDate = getdate()
WHERE cCandidateCode = '000002'
51
GV Phi Loan - FIT - UIH
Ví dụ về sử dụng khoá
• Trong khi transaction trên đang thực hiện, User2 muốn lập
lịch phỏng vấn cho các ứng viên, nhưng không thể xem chi
tiết của các ứng viên có điểm thi trên 80. User2 đang sử
dụng các lệnh sau :
BEGIN TRANSACTION
SELECT * from ExternalCandidate
WHERE siTestScore > 80
UPDATE ExternalCandidate
SET dInterviewDate = getdate()+ 2
WHERE siTestScore > 80
Hãy xác định tại sao user2 không thể thực thi transaction
52
GV Phi Loan - FIT - UIH
Ví dụ về sử dụng khoá
• Các bảng sẽ bị khoá khi transaction trên máy 1
đang thực hiện.
• Khi transaction trên máy 1 kết thúc bằng cách
dùng lệnh sau:
COMMIT TRANSACTION
Thì transaction trên máy 2 mới được thực hiện.
53
GV Phi Loan - FIT - UIH
Lệnh DBCC USEROPTIONS statement
• Để xác định mức cô lập hiê ̣n hành, dùng lệnh DBCC
USEROPTIONS
USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
DBCC USEROPTIONS;
GO
54
GV Phi Loan - FIT - UIH
Phạm vi của mức cô lập
• Khi mư ́c cô lâ ̣p được xác định, khóa dùng tất
ca ̉ lê ̣nh DML trong phiên làm viê ̣c đó sẽ theo
mư ́c co lâ ̣p này.
• Mức cô lâ ̣p này duy trì cho đêń khi phiên làm
viê ̣c kêt́ thúc hay mư ́c cô lâ ̣p được cài đă ̣t
mư ́c mới.
55
GV Phi Loan - FIT - UIH
Lê ̣nh thay đổi mức cô lập
SET TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ
| SNAPSHOT
| SERIALIZABLE }
[ ; ]
5
6
GV Phi Loan - FIT - UIH
Ví dụ
SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ
GO
BEGIN TRANSACTION
SELECT * FROM publishers
SELECT * FROM authors ...
COMMIT TRANSACTION
57
GV Phi Loan - FIT - UIH
Nghẽn khóa - Deadlock
• A deadlock occurs when two or more tasks
permanently block each other because each task has
a lock on a resource that the other task(s) are trying
to lock
• Deadlock còn được go ̣i là deadly embrace
58
GV Phi Loan - FIT - UIH
Deadlocks
• Khi bị ngheñ khóa, các CTUD không thể gia ̉i
quyết bế tắc này mà DBMS pha ̉i phát hiê ̣n và
gia ̉i quyết nghẽn khóa.
– Chỉ có 1 cách là hu ̉y bo ̉ mô ̣t hay nhiều giao tác để
giải quyết bế tăć.
– Ngươ ̀i dùng không nhâ ̣n thâý được sự xuât́ hiện
của tình trạng nghẽn khóa, DBMS pha ̉i tự đô ̣ng
giải quyết tình tra ̣ng nghẽn khóa
59
GV Phi Loan - FIT - UIH
Phân loại deadlock
• Conversion
• Writer-writer
• Reader-writer (thường xuyên nhât́)
• Cascading.
60
GV Phi Loan - FIT - UIH
Phân loại deadlock
• Conversion deadlocks xa ̉y ra khi ca ̉ 2 kết nó̂i
đều đang giư ̃ khóa shared chung trên 1 tài
nguyên và ca ̉ hai đang cố chuyển thành khóa
exclusive lock cho riêng mình.
• Writer-writer deadlocks do tài nguyên yêu câù
để ba ̉o đa ̉m tât́ ca ̉ mã truy xuât́ tài nguyên pha ̉i
theo đúng thư ́ tự
• Reader-writer deadlocks xa ̉y ra khi 2 kết nối
đêu giư ̃ khóa exclusive locks trên các tài nguyên
khác nhau và kết nó̂i này yêu câù khóa shared
trên tài nguyên của kết nối kia
61
GV Phi Loan - FIT - UIH
Phân loại deadlock
• Cascading deadlocks xảy ra khi có nhiều
hơn 2 kết nối liên quan đến deadlock.
– Ngay cả khi SQL Server chọn 1 victim cho
deadlock, các deadlock khác vẫn đang tồn
ta ̣i. SQL Server la ̣i tiếp tục cho ̣n victim khác
cho đêń khi tất ca ̉ deadlock đêù được giải
quyết.
62
GV Phi Loan - FIT - UIH
Cách giải quyêt́ deadlock
• SQL Server dành riêng 1 thread chi ̉ đề dò tìm
deadlock.
• Mă ̣c định thread này hoa ̣t đô ̣ng sau mỗi 5
second. Nếu phát hiê ̣n có deadlock, thread
hoa ̣t đô ̣ng thường xuyên hơn, trươ ̀ng hợp
nếu có nhiều deadlock, thread sẽ hoa ̣t đô ̣ng
sau mỗi 100 milliseconds.
63
GV Phi Loan - FIT - UIH
Cách giải quyêt́ deadlock
• Khi có deadlock, 1 trong các process được
cho ̣n bởi deadlock monitor sẽ bị kết thúc và
rollback.
– Process được chọn được go ̣i là deadlock
victim.
– Deadlock victim thường là process phát ra ít
transaction log record nhât́.
• Có thê ̉ thay đô ̉i mặc định này bằng cách thay
đô ̉i DEADLOCK_PRIORITY trên kết nối có liên
quan đến.
64
Các file đính kèm theo tài liệu này:
- chuong_8_ktcd_dbms_8037.pdf