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

pdf64 trang | Chia sẻ: huyhoang44 | Lượt xem: 567 | Lượt tải: 0download
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:

  • pdfchuong_8_ktcd_dbms_8037.pdf