select --*
request_session_id as spid,
resource_type as restype,
resource_database_id as dbid,
DB_NAME(resource_database_id) as dbname,
resource_description as res,
resource_associated_entity_id as resid,
case when resource_type= 'OBJECT' then OBJECT_NAME( resource_associated_entity_id )
end
as objectName,
request_mode as mode,
request_status as status
from sys.dm_tran_locks select --*
session_id as spid,
connect_time,
last_read,
last_write,
most_recent_sql_handle,
text
from sys.dm_exec_connections
cross apply sys.dm_exec_sql_text(most_recent_sql_handle) --as a
where session_id in (56,57) select --*
session_id as spid,
login_time,
host_name,
program_name,
login_name,
nt_user_name,
last_request_start_time,
last_request_end_time
from sys.dm_exec_sessions
where session_id in (56,57) select --*
[session_id],
[blocking_session_id],
[command],
[sql_handle],
text,
[database_id],
[wait_type],
[wait_time],
[wait_resource]
from sys.dm_exec_requests
cross apply sys.dm_exec_sql_text([sql_handle])
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 |
读操作读取的数据行 是语名启动前最后提交的版本 | 不进行更新冲突检测 |