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 |
讀操做讀取的數據行 是語名啓動前最後提交的版本 | 不進行更新衝突檢測 |