Managing Transactions, Locks

Nội dung

ề ồ

 Đ nh nghĩa Transactions ủ  Thu c tính c a Transactions ạ  Các lo i Transaction ụ  Công d ng Transaction log  Đ nh nghĩa Lock ấ  Các v n đ  đ ng th i (Concurrency

problem).

ể  Các ki u Lock

Transaction

ộ ỗ ồ ộ là  m t  chu i  g m  m t  ho c  ế ợ ạ ớ i  v i  nhau  thành  c  k t  h p  l

ộ ề ộ ệ ố

• M t  giao  tác  (transaction)  ượ ệ nhi u  câu  l nh  SQL  đ m t kh i công vi c.  ệ ệ

ố ậ ế ớ ệ ươ

ộ ậ ộ ả

ệ ả • Các  câu  l nh  SQL  xu t  hi n  trong  giao  tác  th ườ ấ ng  có  ự ố ệ t v i nhau và th c hi n  ng đ i m t thi m i quan h  t ạ ớ ệ ệ i v i  các thao tác đ c l p. Vi c k t h p các câu l nh l ữ ẹ nhau trong m t giao tác nh m đ m b o tính toàn v n d   li u và kh  năng ph c h i d  li u.

ệ ớ

ể ộ ậ ộ ệ

ẹ ệ ọ ộ

ượ ế ợ ả ằ ụ ồ ữ ệ • Trong m t giao tác, các câu l nh có th  đ c l p v i nhau  ộ ấ ả ỏ ư t  c   các  câu  l nh  trong  m t  giao  tác  đòi  h i  nh ng  t ặ ự ả ặ ho c  ph i  th c  thi  tr n  v n  ho c  không  m t  câu  l nh  ự c th c thi.  nào đ

Transaction

ể ả ừ ả VD: giao d ch chuy n kho n 50$ t tài kho n A sang tài

ị kho n Bả

INSERT UPDATE DELETE

UPDATE

read(A) A := A – 50 write(A) read(B) B := B + 50 write(B) INSERT

Thuộc tính của Transaction

 Tính nguyên tử (Atomicity): Là một công việc đơn tử. Hoặc toàn bộ các hiệu chỉnh dữ liệu được thực hiện hoặc là tất cả chúng đều không được thực hiện.

 Tính nhất quán (Consistency): Tính nhất quán đòi hỏi sau khi giao tác kết thúc, cho dù là thành công hay bị lỗi, tất cả dữ liệu phải ở trạng thái nhất quán (tức là sự toàn vẹn dữ liệu phải luôn được bảo toàn)

 Tính cô lập (Isolation): Dữ liệu khi hiệu chỉnh được thực hiện bởi các Transaction phải độc lập với các hiệu chỉnh khác của các Transaction đồng thời khác.

 Tính bền vững (Durability): Sau khi một giao dịch thực hiện thành công, các thay đổi đã được tạo ra đối với CSDL vẫn còn ngay cả khi xảy ra sự cố hệ thống.

Transaction Properties

m icit y

Isolation

A t o

C

o

b ilit y

r a

nsistency

u

D

Transaction

Quản lý các trạng thái Transaction

 Active : Trạng thái khởi đầu, giao dịch giữ trong

 Partially committed: Sau khi lệnh cuối cùng được

trạng thái này trong khi nó đang thực hiện

 Failed: Sau khi phát hiện rằng sự thực hiện không

thực hiện.

 Aborted: Sau khi giao dịch đã bị “roll back” và CSDL đã phục hồi lại trạng thái của nó trước khi khởi động giao dịch.

 Committed: Sau khi thực hiện thành công giao dịch.

thể tiếp tục được nữa.

Quản lý các Transaction -trạng thái

Mô hình Transaction trong SQL

 Giao tác SQL được định nghĩa dựa trên các câu lệnh

(gọi là điểm đánh dấu).

 ROLLBACK TRANSACTION: Quay lui trở lại đầu giao tác

hoặc một điểm đánh dấu trước đó trong giao tác.

 COMMIT TRANSACTION: Đánh dấu điểm kết thúc một giao tác. Khi câu lệnh này thực thi cũng có nghĩa là giao tác đã thực hiện thành công.

 ROLLBACK [WORK]: Quay lui trở lại đầu giao tác.  COMMIT [WORK]: Đánh dấu kết thúc giao tác.

xử lý giao tác sau đây:  BEGIN TRANSACTION: Bắt đầu một giao tác  SAVE TRANSACTION: Đánh dấu một vị trí trong giao tác

Mô hình Transaction trong SQL

SQL Statements

 Cú Pháp: BEGIN TRANSACTION COMMIT | ROLLBACK TRANSACTION

Mô hình Transaction trong SQL

Chúng ta có thể sử dụng TRY…CACTH hoặc IF cùng

với TRANSACTION

BEGIN TRY BEGIN TRAN

-- Code for your transaction

COMMIT TRAN END TRY BEGIN CATCH

-- output an error message

ROLLBACK TRAN END CATCH

Mô hình Transaction trong SQL

 Ví dụ 6.1: Giao tác dưới đây kết thúc do lệnh

ROLLBACK TRANSACTION và mọi thay đổi vể mặt dữ liệu mà giao tác đã thực hiện (UPDATE) đều không có tác dụng.

BEGIN TRANSACTION giaotac1 UPDATE monhoc SET sodvht=4 WHERE sodvht=3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS

NULL

ROLLBACK TRANSACTION giaotac1

Mô hình Transaction trong SQL

 Giao tác dưới đây kết thúc bởi lệnh COMMIT và thực hiện thành công việc cập nhật dữ liệu trên các bảng MONHOC và DIEMTHI.

BEGIN TRANSACTION giaotac2 UPDATE monhoc SET sodvht=4 WHERE sodvht=3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS

NULL

COMMIT TRANSACTION giaotac2

Quản lý các Transaction -trạng thái

ạ ộ ủ ộ Ho t đ ng c a m t transaction

Mô hình Transaction trong SQL

Các loại Transaction

ườ

ng minh ườ

ng minh

 Explicit – T  Implicit – Không t  Auto  commit  transaction  ­  Giao  tác  t

ộ đ ng chuy n giao

ể  Distributed Transactions

Các lo i Transaction

 Tường minh - Explicit  Không tường minh – Implicit  Giao tác tự động chuyển giao (auto commit transaction)  Distributed Transactions

Explicit Transaction_Transaction tường minh

ắ ầ

ế

ộ ả ị  Là m t Transaction ph i đ nh nghĩa b t đ u m t  Transaction(Begin Transaction) và k t thúc m t  transaction(Commit Transaction)   Use BEGIN TRANSACTION to start

BEGIN TRAN [SACTION](Transaction_Name|@Tran_Name_Variable]

 Use COMMIT TRANSACTION or COMMIT WORK

to successfully complete

COMMIT [TRAN [SACTION](Transaction_Name|@Tran_Name_Variable]

Explicit Transaction_Transaction tường minh

 Save Position TRANSACTION

SAVE  TRAN [SACTION]{Transaction_Name|@Tran_Name_Variable}  Use ROLLBACK TRANSACTION or ROLLBACK  ộ ủ WORK to cancel (h y m t Transaction)  ROLLBACK  TRAN [SACTION] [Transaction_Name| @Tran_Name_Variable | savepoint_Name |@savepoint_variable]

ả ề ố ứ ự @@TRANCOUNT : Tr  v  s  th  t

ở ố ượ ồ ồ ấ mà Transaction  i đa l ng 32 c p, không nên l ng nhau. c m , t đ

Implicit Transactions(Ngầm định)

ế

ự ộ ặ

ỉ  B n  không  c n  b t  đ u  m t  transaction,  b n  ch

ộ ỗ

ộ ở  Khi  m t  Connection  đang  m   trong  ch   đ   ớ ộ ắ ầ Implicit, SQL Server b t đ u m t Transaction m i  ộ m t  cách  t   đ ng  sau  khi  Transaction  hi n  hành  ấ t ho c Roll back.  hoàn t ắ ầ ạ ầ c n Commit hay Rolback m i transaction.

ế ộ

 Ch   đ   Implicit  transaction  phát  sinh  m t  chu i

các Transaction liên t c.ụ

Implicit Transactions(Ngầm định)

ế ộ ộ ế ố

 Sau khi ch  đ  Transaction implicit đã đ ự ộ

ượ ậ c b t  ắ

đ ng b t  ON cho m t k t n i, SQL Server t ấ ỳ ầ đ u m t transaction khi nó th c thi b t k  các  ệ l nh sau:

 UPDATE   DROP  OPEN  FETCH  TRUNCATE

 ALTER  TABLE  REVOKE  CREATE  SELECT  DELETE INSERT

TABLE  GRANT

Autocommit Transaction

ể ự ộ • Autocommit  Transaction:  Mô  hình  chuy n  giao  t đ ng

ặ ị ủ ả là mô hình qu n lý transaction m c đ nh c a SQL Server.

ộ ệ ượ ế ể • M t l nh (statement) đ c chuy n giao (committed) n u

ẽ ả ự ệ ầ nó  th c  hi n  thành  công  hay  s   tr   ng ượ ạ c  l i  ban  đ u

ặ ỗ ế (roll back) n u nó g p l i.

Autocommit Transaction

ệ ượ ề • L nh  BEGIN  TRANSACTION  v t  quy n  mode  t ự

ặ ị ể ộ đ ng chuy n giao (autocommit) m c đ nh.

ở • SQL  Server tr   v ề ạ l i  mode  autocommit  khi

ườ ượ ể transaction t ng mình đã đ c chuy n giao (commit)

ả ượ ề ầ hay  tr   ng c  v   đ u  (roll  back)  hay  khi  mode

ị ắ ầ ị transaction ng m đ nh b  t t.

Distributed Transactions

ộ ạ ư

ả ượ ề ả

ủ ữ ả

ọ ủ  Là m t lo i Explicip Transaction nh ng giao tác c a nó  ế ợ ự c  k t  h p  liên  quan  nhi u  Server.  S   qu n  lý  ph i  đ ề gi a  các  nhà  qu n  lý  tài  nguyên  c a  các  server  và  đi u  này g i là transaction manager.

ữ ộ

 Các Transaction trong m t server là nh ng tham chi u t th c  ra  cũng

ự ề ộ ế ừ   là  m t  Distributed

nhi u  Database,  Transaction.

 Transaction  log:  dùng  đ   ngăn  ch n  ng

ặ ệ

ư ừ ưở ữ ệ ả ể ng  t ườ i  dùng  hi u    các  transaction  ch a  hoàn

ỉ ch nh  d   li u  nh  h t.ấ t

TRANSACTION LOG

 Dùng để theo vết tất cả các giao dịch  Phục hồi dữ liệu  Một transaction log gồm:

 Một record đánh dấu bắt đầu 1 transaction  Thông tin về transaction

 Thao tác (cập nhật, xóa, chèn)  Tên các object ảnh hưởng bởi transaction  Giá trị trước và sau của các field được cập nhật.  Con trỏ trỏ đến dòng trước và sau trong cùng 1 transaction

 Một record đánh dấu kết thúc transaction

TRANSACTION LOG (tt)

Công dụng của Transation

 Ph c  h i  các  Transaction  đ c  bi

ấ ỳ ệ

ượ ố

t:  Khi  môt  ư Application  đ a  ra  l nh  ROLL  BACK  hay  SQL  ể ộ ỗ c  dùng  đ   i,  thì  b ng  ghi  log  đ nh n  ra  m t  l ỉ Roll  Back  b t  k   hi u  ch nh  trong  su t  quá  trình  t. Transaction ch a hoàn t

ư ụ ồ ấ ả

ư

 Ph c h i t

t khi

t c  các Transaction ch a hoàn t ượ ắ ầ

SQL Server đ

c b t đ u.

ị ỗ

ờ i đ n m t th i đi m b  l

i Database l ả

ả ạ ả

ạ ế  Hoàn tr  l i  ằ :  Nh m  đ m  b o  không  phát  sinh  mâu  thu n  khi  ự ố có s  c .

Các lệnh không hợp lệ trong Transactions

 LOAD

TRANSACTION

 DUMP

 ALTER DATABASE  DROP DATABASE  RESTORE

TRANSACTION

DATABASE

 CREATE DATABASE  DISK INIT  LOAD DATABASE

 BACKUP LOG  RECONFIGURE  RESTORE LOG  UPDATE  STATISTICS

Các ví dụ của Transation

declare @tranname varchar(20) select @tranname ='MyTran' Begin tran @tranname use Northwind delete from [Order Details] where

OrderID=10248 Commit tran @tranname select * from [Order Details] where OrderID=10248 Go

Quay lại trước những thay đổi

Các ví dụ của Transation

use Northwind Update Products

set UnitPrice =UnitPrice +10 where ProductName like 'A%'

if(select MAX(unitprice) from Products where ProductName like 'A

%')>100

Begin

RollBack tran Print 'Transaction rolled back'

End Else Begin

Commit Tran print 'Transaction committed'

End

Begin Tran

Tạo điểm dừng cho một Transation

Các ví dụ của Transation

ự ừ ể ớ

use Northwind Update Products

set UnitsInStock =UnitsInStock+20 where ProductName like 'A%'

Update [Order Details]

set Discount =Discount+0.25 where ProductID in (3,7)

SAVE TRAN tran1

Th c thi 1 transaction v i đi m d ng select * from [Order Details] where ProductID in(3,7) Begin Tran

Các ví dụ của Transation

Update [Order Details]

set UnitPrice =UnitPrice +10 where ProductID in (3,7)

Update [Order Details]

set Discount =Discount+0.5 where ProductID in (3,7)

if (Select discount from [Order Details] where ProductID In(3,7))<1 Begin

print 'Transaction 1 has been committed but transaction 2  has been 2 has  not been committed' RollBack tran tran1

End Else Begin

print 'Both the transactions have been committed' Commit Tran

End

select * from [Order Details] where ProductID in(3,7)

Các ví dụ của Transation

ơ ế ả Dùng Transaction và c  ch  qu n lý l ỗ i

Begin try

begin tran

Update products

set UnitsInstock =100 where ProductID  in (3,7) update [order details] set quantity =Quantity +100 where  ProductID in(3,7) Commit tran

end try

Các ví dụ của Transation

begin catch

rollback tran raiserror ('Transaction Error',16,1) return

end catch

Hàm XACT_STATE

Hàm XACT_STATE

BEGIN TRY

BEGIN TRAN

DELETE from Products where ProductID =100 commit tran

END TRY BEGIN CATCH

IF (XACT_STATE())=­1 BEGIN

print 'The transaction is in an uncommitable  state' +'Rolling back transaction' Rollback tran

END

END CATCH

Hàm XACT_STATE

IF (XACT_STATE())=1 BEGIN

print 'The transation is committable'  +'Committing transaction' COMMIT TRaN

END IF (XACT_STATE())=0 BEGIN

print 'No The transation is committable'

+'Committing transaction'

RollBack tran

END END CATCH GO

Đ ề

ể đồ

i u khi n

ờ ng th i

 Khái niệm: là sự kết hợp xử lý đồng thời những

 Mục tiêu: đảm bảo sự tuần tự của các transaction để không gây nên các vấn đề về nhất quán và toàn vẹn dữ liệu sau đây:  Lost Updates  Uncommited data  Inconsistent retrievals

transaction trong 1 hệ CSDL đa người dùng

Đ ề

ể đồ

i u khi n

ờ ng th i (tt)

Lost Updates (tổn thất cập nhật):  Các cập nhật sẽ bị mất khi hai hay nhiều giao tác

 Các giao tác không biết về nhau. Cập nhật cuối cùng sẽ viết chồng lên các cập nhật được các giao tác khác thực hiện.

chọn cùng 1 hàng và cùng cập nhật hàng đó.

Đ ề

ể đồ

i u khi n

ờ ng th i (tt)

 Lost Updates TRANSACTION

COMPUTATION

T1: cộng 0.5 điểm T2: trừ 3 điểm

mark = mark + 0.5 mark = mark -3

Time

Transaction

step

Stored valued

1

T1

Đọc mark

6

2

T1

Mark = mark +0.5

3

T1

Ghi mark

6.5

4

T2

Đọc mark

6.5

5

T2

Mark = mark - 3

6

T2

Ghi mark

3.5

Đ ề

ể đồ

i u khi n

ờ ng th i (tt)

 Lost Updates

Time

Transaction

step

Stored valued

1

T1

Đọc mark

6

2

T2

Đọc mark

6

3

T1

Mark = mark + 0.5

4

T2

Mark = mark – 3

5

T1

Ghi mark

6.5

6

T2

Ghi mark

3.0

Đ ề

ể đồ

i u khi n

ờ ng th i (tt)

Uncommited data: mối quan hệ chưa được chuyển

 Xảy ra khi giao tác thứ 2 chọn 1 hàng đang được

giao:

cập nhật bởi 1 giao tác khác. Giao tác thứ 2 đọc

dữ liệu lúc chưa được công nhận và có thể bị

thay đổi bởi giao tác đang thực hiện việc cập

nhật.

ể đồ

ờ ng th i (tt)

Đ ề i u khi n   Uncommited data

TRANSACTION

COMPUTATION

T1: cộng 0.5 điểm T2: trừ 3 điểm

mark = mark + 0.5 mark = mark -3

Time

Transaction

step

Stored valued

1

T1

Đọc mark

6

2

T1

Mark = mark +0.5

3

T1

Ghi mark

6.5

4

T1

Rollback

5

T2

Đọc mark

6.0

6

T2

Mark = mark - 3

7

T2

Ghi mark

3.0

Implementing RDBMS concepts using  SQL Server 2000/ Session 17/ 45 of 22

Đ ề

ể đồ

i u khi n

ờ ng th i (tt)

 Uncommited data

Time

Transaction

step

Stored valued

1

T1

Đọc mark

6

2

T1

Mark = mark +0.5

3

T1

Ghi mark

6.5

4

T2

Đọc mark

6.5

5

T2

Mark = mark – 3

3.5

6

T1

Rollback

7

T2

Ghi mark

3.5

Đ ề

ể đồ

i u khi n

ờ ng th i (tt)

Inconsistent retrievals: phân tích không nhất quán  Xảy ra khi giao tác thứ 2 truy xuất cùng 1 hàng nhiều lần và dữ liệu mỗi lần đọc mỗi khác. Phân tích không nhất quán tương tự như mối quan hệ chưa được chuyển giao, một giao tác khác đang thay đổi dữ liệu trong khi giao tác thứ hai đọc dữ liệu.

Đ ề

ể đồ

i u khi n

ờ ng th i (tt)

 Inconsistent retrievals

Đ ề

ể đồ

i u khi n

ờ ng th i (tt)

 Inconsistent retrievals

T1 T2

SELECT sum(mark) From enroll WHERE SID = ‘142’

UPDATE enroll SET mark = mark +3 WHERE SID= ‘142’ AND CID = ‘C01’

UPDATE enroll SET mark = mark - 3 WHERE SID= ‘142’ AND CID = ‘C02’

Locks

ơ ấ

ữ ệ

ể ọ

ỉ ở ộ ế

ữ ệ

 Là  c   c u  ngăn  ch n  các  xung  đ t  do  các  user  ệ không  th   đ c  hay  hi u  ch nh  các  d   li u  mà  ử các d  li u này hi n đang m  m t ti n trình x   lý khác.

ẫ ụ ự

ươ

ế ướ

 Tuy  nhiên,  b n  v n  có  th   thao  tác  trên  nh ng  ộ ố ượ ể đ i  t ng  còn  ph   thu c  vào  chuy n  tác  mà  ẽ ệ ố ệ user  khác  đang  th c  hi n.  Khi  đó  h   th ng  s   ớ ủ ạ ng thích v i  ki m soát ti n trình c a b n có t quá trình tr

c đó hay không.

Locking Problems

• Lost Update (c p nh p m t d  li u):

ộ ữ ệ

ậ ọ ị

ấ ữ ệ  x y ra khi 2 hay nhi u  transaction ch n cùng m t d  li u và sau đó c p nh p dòng  ự d a trên giá tr  cũ.

ọ ữ ệ

• Uncommitted Dependency(Dirty Read _đ c d  li u sai) :

ậ ở

ở ỗ ầ

ữ ệ ộ ữ ệ  m i l n đ c.

x y ả ọ ra  khi  Transaction  th   hai  ch n  m t  dòng  mà  đang  s n  sàng  ậ c p nh t b i m t transaction. Inconsistent  Analysis  (Nonrepeatable  Real_đ c  d   li u  hai  ứ ả ầ x y ra khi transaction th  2 truy xu t cùng m t d  li u  l n) :  ữ ệ ữ ầ ớ v i vài l n đ c lên nh ng d  li u khác nhau  ẫ

• Phantom  Reads(đ c  các  m u  tin  ma):  ọ ả X y  ra  khi  hành  đông  ữ ệ ộ ượ c thi hành trên m t dòng d  li u mà nó  Insert hay delete đ ọ ủ ữ ệ thu c vùng d  li u đ c c a m t transaction khác.

ế

ơ

Transaction và c  ch  khóa

 Trước khi transaction đọc hay hiệu chỉnh dữ liệu, nó cần được bảo vệ tránh ảnh hưởng 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 phụ thuộc vào mức độ,

 Sẽ không có transaction nào được cấp khóa nếu gây xung đột với mode khóa đã được cấp trên cùng dữ liệu cho một transaction khác trước đó

phụ thuộc dữ liệu của transaction.

ế

ơ

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 đến khi khóa trước đó được giải phóng.

 Tất cả các khóa sẽ được giải phóng khi transaction

hoàn thành (bằng commit hay rolls back)

ế

ơ

Transaction và c  ch  khóa

 Các ứng dụng không trực tiếp yêu cầu khóa. Các khóa được quản lý nội bộ bởi lock manager (1 thành phần của DB Engine)

 Khi Database Engine xử lý 1 lệnh Transact-SQL, query processor sẽ xác định tài nguyên nào được truy xuất, loại khóa nào cần dùng, thiết lập mức cô lập cho transaction. Kế đến query processor yêu cầu 1 khóa phù hợp từ lock manager. Lock manager cấp khóa nếu không có xung đột.

ượ

ổ ữ ư ệ

ữ ệ ỉ c dùng cho nh ng thao tác hi u ch nh

ể ậ

ế ừ ế ậ ộ

ả ộ ể t l p m t Lock k  th a. ồ c dùng khi thao tác thu c vào gi n đ

ượ ự

ữ ả ộ

ự ụ ợ ề ồ

Các loại Locks Share locks : đ c dùng cho nh ng thao tác mà không làm  ậ ữ ệ ậ thay đ i hay c p nh t d  li u nh  l nh Select. Exclusive locks : đ ượ ư ữ ệ d  li u nh  Insert, Update, Delete.  Update locks : dùng trên nh ng tài nguyên mà có th  c p  ữ nh t.ậ Insert Locks : Dùng đ  thi Scheme llocks : đ ủ c a Table là đang th c thi. Bulk Update locks : Cho phép chia s  cho Bulk­copy thi  hành. Deadlock : x y ra khi có s  ph  thu c chu trình gi a hai  ộ ậ hay nhi u lu ng cho m t t p h p tài nguyên nào đó

Scheduler

 Khái niệm: là 1 chương trình DBMS thiết lập thứ tự các thao tác trong những transaction đồng thời

 Các phương pháp:

 Locking  Time Stamping  Optimistic

ươ

Ph

ng pháp Locking

 Dùng để điều khiển đồng thời

 1 lock được cấp để sử dụng “độc quyền” 1 hạng

 1 transaction được cấp lock trước khi truy cập dữ

mục dữ liệu trong transaction hiện hành.

liệu; sau khi transaction hoàn tất, lock phải được

 Lock manager quản lý những thông tin về lock.

giải phóng

ươ

Ph

ng pháp Locking (tt)

 Các mức Locking

 Database level

 Table level

 Page level

 Row level

 Field (attribute) level

ươ

Ph

ng pháp Locking (tt)

 Các kiểu lock

 Binary Locks

 Có 2 trạng thái: locked (1) or unlocked (0).

 Nếu 1 object bị lock bởi 1 transaction, không

 Nếu 1 object là unlocked, bất kỳ transaction nào

transaction nào được sử dụng object đó

 1 transaction phải “unlock”object sau khi hoàn tất.

cũng có thể lock object đó để sử dụng

ươ

Ph

ng pháp Locking (tt)

 Các kiểu lock

 Exclusive Locks

 Tồn tại khi transaction ghi dữ liệu

 Được sử dụng khi có khả năng đụng độ dữ liệu.

 Một exclusive lock sẽ được gán khi transaction

 Được dùng cho thao tác sửa đổi dữ liệu như lệnh INSERT, UPDATE hay DELETE. Bảo đảm là nhiều lệnh cập nhật không thực hiện trên cùng 1 tài nguyên cùng 1 lúc

muốn ghi dữ liệu và dữ liệu đó chưa bị lock

ươ

Ph

ng pháp Locking (tt)

 Các kiểu lock

 Exclusive Locks

 Ví dụ: nếu lệnh Update sửa đổi các hàng trong một bảng mà lệnh này có kết nối (join) với 1 bảng khác thì sẽ cần bao nhiêu khóa?

 Một khóa shared cho các hàng đọc được trong

 Một khóa exclusive cho các hàng được cập nhật

bảng kết nối

trong bảng update.

ươ

Ph

ng pháp Locking (tt)

 Các kiểu lock

 Shared Locks

 Một shared lock tồn tại khi các transaction đồng

 Một shared lock không làm đụng độ dữ liệu khi

thời đọc dữ liệu

 Một shared lock được gán khi transaction muốn đọc dữ liệu và dữ liệu đó không tồn tại exclusive lock.

các transaction đồng thời chỉ đọc dữ liệu

ươ

Ph

ng pháp Locking (tt)

 Các kiểu lock

 Intent Lockss

 DB Engine dùng khóa này để bảo vệ việc đặt khóa S hay X trên tài nguyên ở mức thấp hợn. Các khóa này luôn luôn được tạo trước khi khóa ở mức thấp hơn được đặt, nhằm báo hiệu có khóa mức thấp hơn.

 Các loại khóa intent là: intent shared (IS), intent exclusive (IX) và shared with intent exclusive (SIX).

ươ

Ph

ng pháp Locking (tt)

 Các kiểu lock

 Intent Locks

 Ví dụ: Khóa IS được yêu cầu ở mức bảng trước khi khóa S được yêu cầu ở 1 trang hay hàng bên trong bảng. Nhờ khóa IS ở mức bảng sẽ ngăn không cho các transaction khác đặt khóa X trên bảng này, cải thiện được việc thực thi vì khi đó DB engine chỉ cần khảo sát khóa intent ở mức bảng là có thể xác định 1 transaction khác có thể chiếm được 1 khóa trên bảng đó hay không mà không cần phải tìm từng khóa trên mỗi trang hay mỗi hàng của bảng đó.

ươ

Ph

ng pháp Locking (tt)

 Hai vấn đề với pp locking

 Schedule của transaction không khả tuần tự  Có thể tạo ra deadlock

 Giải pháp

 Khả tuần tự: two phase locking  Deadlock: phát hiện và ngăn chặn

ươ

Ph

ng pháp Locking (tt)

 Locking two-phase

 Giao

thức two-phase

 Giai đoạn growing: transaction lấy được tất cả các khoá cần thiết nhưng không khóa dữ liệu. Tất cả các khóa được đặt vào locked point.

 Giai đoạn shrinking: transaction giải phóng tất cả

locking xác định cách transaction đạt được và giải phóng, đảm bảo được tính khả tuần tự nhưng không tránh được deadlock serializability

các khoá và không lấy thêm khóa mới nào

ươ

Ph

ng pháp Locking (tt)

 Locking two-phase

 Qui tắc cho giao thức Two-Phase Locking

 Không có 2 transaction nào có khóa đụng độ  Trong cùng 1 transaction không có thao tác

 Không có dữ liệu nào bị ảnh hưởng cho đến khi

không khóa nào đi trước thao tác có khóa.

tất cả các khóa lấy được.

ươ

Ph

ng pháp Locking (tt)

 Locking two-phase

ươ

Ph

ng pháp Locking (tt)

Nghẽn khóa-Deadlock  Là một hoàn cảnh mà trong đó 2 user (hay transaction) có các khóa trên các đối tượng khác nhau và mỗi user đang chờ khóa trên đối tượng của người dùng khác

 Deadlock còn được gọi là deadly embrace

ươ

Ph

ng pháp Locking (tt)

Nghẽn khóa-Deadlock  Khi bị nghẽn khóa, các chương trình ứng dụng không thể giải quyết bế tắc này mà DBMS phải phát hiện thấy và phải giải quyết gỡ bỏ nghẽn khóa.

 Chỉ có 1 cách là hủy bỏ một hay nhiều giao tác

để giải quyết bế tắc.

 Người dùng không nhận thấy được sự xuất hiện của tình trạng nghẽn khóa, DBMS phải tự động khởi động hay hủy bỏ một hay một số thao tác

ươ

Ph

ng pháp Locking (tt)

 Deadlock

 2 transactions cùng đợi để unlock dữ liệu  Deadlocks tồn tại khi transactions T1 và T2 :

 T1 = access data items X and Y  T2 = access data items Y and X

 Nếu T1 không unlock dữ liệu Y, T2 không thể bắt đầu; và nếu T2 không unlock dữ liệu X, T1 không thể tiếp tục.

ươ

Ph

ng pháp Locking (tt)

 Deadlock

Implementing RDBMS concepts using  SQL Server 2000/ Session 17/ 72 of 22

ươ

Ph

ng pháp Locking (tt)

 Deadlock: 3 kỹ thuật để điều khiển Deadlocks:

 Chặn Deadlock: Một transaction sẽ bị từ bỏ nếu yêu cầu lock mới và và lock mới này có khả năng gây nên dealock. Sau đó transaction sẽ được khởi động lại

 Phát hiện Deadlock: DBMS định kỳ kiểm tra deadlocks. Nếu có deadlock, một trong những transaction phải bị từ bỏ để transaction kia tiếp tục

 Tránh Deadlock: Transaction phải lấy được tất cả

các khóa nó cần trước khi thực thi

ơ

ế

C  ch  khóa nhi u c p  (Multigranular locking)

 Cho phép transaction khóa các loại tài nguyên khác

 Để giảm chi phí khóa, Db engine khóa tự động tài

nhau.

 Khóa ở mức nhỏ hơn như hàng, làm tăng khả năng đồng thời nhưng lại làm tăng chi phí vì cần nhiều khóa hơn khi có nhiều hàng cần khóa.

 Khóa ở mức lớn hơn, như mức bảng, thực thi đồng thời sẽ khó khăn hơn vì khi cả bảng được khóa sẽ hạn chế việc truy xuất đến các phần của bảng của các transaction khác. Nhưng chi phí sẽ thấp vì cần dùng ít khóa hơn.

nguyên tùy theo cấp độ của nhiệm vụ.

Lock granularity

 DB Engine thường thực hiện nhiều mức khóa

khác nhau để bảo vệ đầy đủ tài nguyên.

 Khóa ở nhiều mức khác nhau được gọi là lock

hierarchy.

 Ví dụ: để bảo vệ đầy đủ việc đọc 1 index, DB Engine có thể phải chiếm các khóa share trên các hàng, và khóa intent share trên các trang và bảng

ể ị

Tài nguyên có th  b  khóa

ự ươ

S  t

ng thích khóa Lock combatibility

 Tương thích khóa dùng để kiểm soát nhiều 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ầu khóa mới có thể được cấp chỉ khi mode của khóa được yêu cầu 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ầu 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.

ự ươ

S  t

ng thích khóa Lock combatibility

 Nếu khóa shared(S) đang được dùng trên 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 cả khi transaction đầu chưa hoàn tất. Tuy nhiên các transaction không thể có được khóa exclusive cho đến khi khóa shared được giải phóng.

Ví dụ: Sự tương thích khóa Lock combatibility:  Không có mode khóa nào tương thích với khóa exclusive. Trong khi đang có khóa exclusive(X) thì không transaction nào có thể chiếm được bất kỳ loại khóa nào(shared, update hay exclusive) trên tài nguyên đó cho đến khi khóa exclusive được giải phóng.

ự ươ

S  t

ng thích khóa Lock combatibility

Ví dụ: Sự tương thích khóa Lock combatibility:

ử ụ Cách s  d ng khóa

 Mặc định các transaction isolation là read committed, nghĩa là SQL Server bảo đảm 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 transaction muốn đọc dữ liệu phải đợi cho đến khi dữ liệu được commit.

ử ụ Cách s  d ng khóa

Ví dụ về cách sử dụng khóa:

ử ụ Cách s  d ng khóa

Ví dụ về cách sử dụng khóa:

ử ụ Cách s  d ng khóa

Ví dụ về cách sử dụng khóa:

ử ụ Cách s  d ng khóa

Ví dụ về cách sử dụng khóa:

ậ Các m c cô l p transaction

 Chọn mức cô lập cho transaction sẽ không làm ả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 kỳ 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ấp thì người dùng càng có nhiều khả năng truy xuất dữ liệu đồng thời, nhưng cũng gây ra nhiều ảnh hưởng tương tranh và ngược lại

ậ Các m c cô l p transaction

 Để chọn mức cô lập thích hợp thì phải cân đối giữa yêu cầu bảo toàn dữ liệu của ứng dụng với chi phí của mỗi mức cô lập. lập cao nhất

 Mức cô

tự hóa

tuần

(serializable)

 Mức cô lập thấp nhất là cho phép đọc dữ liệu

chưa được commit (read uncommitted)

B n m c cô l p theo chu n ISO

1. Read

uncommitted:

mức

thấp

nhất, transaction bị cô lập chỉ đủ để đảm bảo các dữ liệu bị lỗi vật lý không được đọc mà thôi 2. Read committed: mức mặc định của DB

Engine

3. Reapeated 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

Các m c cô l p c a SQL Server DB Engine

1. Read uncommitted: các lệnh có thể đọc các hàng bị chỉnh bởi các transaction khác dù chưa được commit 2. Read committed: các lệnh không thể đọc dữ liệu đã bị sửa đổi nhưng chưa commit bởi các transaction khác

3. Reapeated read: các lệnh không thể đọ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 đọc bởi transaction hiện hành cho đến khi transaction hiện hành hoàn tất.

Các m c cô l p c a SQL Server DB Engine

4. SNAPSHOT: dữ liệu được đọc bởi bất kỳ

lệnh nào trong 1 transaction thì sẽ được giữ giống như lúc bắt đầu transaction.

5. SERIALIZABLE

L nh DBCC USEROPTIONS

 Để xác định mức cô lập hiện hành, dùng

lệnh DBCC USEROPTIONS

USE QLBH GO SET TRANSACTION ISOLATION LEVEL

REPEATABLE READ

GO DBCC USEROPTIONS GO

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 cả lệnh DML trong phiên làm việc đó sẽ theo mức cô lập này.

 Mức cô lập này duy trì cho đến 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.

đổ

L nh thay

i m c cô l p

 SET TRANSACTION ISOLATION LEVEL

{READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE } [;]

đổ

L nh thay

i m c cô l p

 Ví dụ: SET TRANSACTION ISOLATION LEVEL

REPEATABLE READ

GO BEGIN TRANSACTION SELECT * FROM ORDERS SELECT * FROM CUSTOMERS COMMIT TRANSACTION