SQL 事務隔離學習

 1 select --* 
 2 request_session_id as spid,
 3 resource_type as restype,
 4 resource_database_id as dbid,
 5 DB_NAME(resource_database_id) as dbname,
 6 resource_description as res,
 7 resource_associated_entity_id as resid,
 8 case when resource_type= 'OBJECT' then OBJECT_NAME( resource_associated_entity_id )
 9 end 
10  as objectName,
11 request_mode as mode,
12 request_status as status
13 from sys.dm_tran_locks
14 
15 
16 select --* 
17 session_id as spid,
18 connect_time,
19 last_read,
20 last_write,
21 most_recent_sql_handle,
22 text
23 from sys.dm_exec_connections
24 cross apply sys.dm_exec_sql_text(most_recent_sql_handle) --as a
25 where session_id in (56,57)
26 
27 select --*
28 session_id as spid,
29 login_time,
30 host_name,
31 program_name,
32 login_name,
33 nt_user_name,
34 last_request_start_time,
35 last_request_end_time
36 from sys.dm_exec_sessions
37 where session_id in (56,57)
38 
39 select --*
40 [session_id],
41 [blocking_session_id],
42 [command],
43 [sql_handle],
44 text,
45 [database_id],
46 [wait_type],
47 [wait_time],
48 [wait_resource]
49 from sys.dm_exec_requests
50 cross apply sys.dm_exec_sql_text([sql_handle])
51 where blocking_session_id>0

ISOLATION   LEVEL note 讀操做 寫操做
READ   UNCOMMITTED(with nolock) 髒讀 不請求共享鎖 不妨礙獲取排他鎖
READ COMMITED 不可重複讀 讀操做不會事務持續期間內保留共享鎖,
    甚至在語句結束前也不能一直保留共享鎖,
    這意味着在一個事務處理內部對相同數據資源的兩個讀操做之間,沒有共享鎖會鎖定該資源
所以,其餘事務能夠在兩個讀操做
    之間更改數據資源,
    讀操做於是可能每次獲得不一樣的取值
REPEATABLE   READ(holdlock) 幻讀 共享鎖一直保持到事務完成爲止 能阻塞Update,不能阻Insert   ,
    可以防止併發負面影響:丟失更新
SERIALIZABLE   讀操做鎖定知足查詢搜索條件的鍵的整個範圍 能阻塞Update,Insert
SNAPSHOT 基於行版本控制(非共享鎖) 
     數據庫級別開啓
    set allow_snapshot_isolation on 
讀操做讀取的數據行   是事務啓動前最後提交的版本 進行更新衝突檢測
READ COMMITTED   SNAPSHOT 基於行版本控制(非共享鎖) 
    數據庫級別開啓
     set read_committed_snapshot_on 
讀操做讀取的數據行   是語名啓動前最後提交的版本 不進行更新衝突檢測
相關文章
相關標籤/搜索