笔记四 事务,死锁

https://www.cnblogs.com/jackson0714/p/TSQLFundamentals_08.html  

 

锁模式(开启事务时候,系统自动带的)

1.排他锁--当更新一条数据的时候,事务为这条数据请求排他锁,其他事务请求查询或者更新删除这条数据,只能进入阻塞队列等待这个更新事务的完成
2.共享锁 --当查询一条数据是,事务为这条数据请求共享锁,其他事务可以查询此数据,但是不能操作(更新或删除)这条数据

set Lock_TIMEOUT 5000 --锁等待时间不超过5秒
set Lock_TIMEOUT -1 --无限等待

查询未提交的sql语句

select * from T with(nolock)

 死锁的原因查找


1.

SELECT request_session_id AS 会话id ,
resource_type AS 请求锁定的资源类型 ,
resource_description AS 描述 ,
request_mode AS 模式 ,
request_status AS 状态,
OBJECT_NAME(resource_associated_entity_id) tableName
FROM sys.dm_tran_locks
where resource_type='OBJECT'

2.

SELECT session_id ,
text,
connect_time ,
last_read 
FROM sys.dm_exec_connections
CROSS APPLY sys.dm_exec_sql_text
(most_recent_sql_handle) AS ST
WHERE session_id IN (62, 56 )

 

 

 

 

 杀死死锁

kill 70  --kill spid

 

 

事务在未提交前,数据库的整张表是锁死的(可以用vs 设置断点调试),这个时候可以开启读提交快照处于打开状态

 

进程中的锁:锁住资源,只能允许一个进程访问

posted @ 2020-12-08 09:52  海龟123  阅读(114)  评论(0编辑  收藏  举报