SQLSERVER数据库锁,block问题

已邀请:

Ø  查询当前正在执行的语句

SELECT

der.[session_id],der.[blocking_session_id],

sp.lastwaittype,sp.hostname,sp.program_name,sp.loginame,

der.[start_time] AS '开始时间',

der.[status] AS '状态',

dest.[text] AS 'sql语句',

DB_NAME(der.[database_id]) AS '数据库名',

der.[wait_type] AS '等待资源类型',

der.[wait_time] AS '等待时间',

der.[wait_resource] AS '等待的资源',

der.[logical_reads] AS '逻辑读次数'

FROM sys.[dm_exec_requests] AS der

INNER JOIN master.dbo.sysprocesses AS sp ON der.session_id=sp.spid

CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest

--WHERE [session_id]>50 AND session_id<>@@SPID

ORDER BY der.[session_id]

GO

 

/uploads/files_user1/answer/5e7b04a845245665691.png

155


/uploads/files_user1/answer/5e7b04adcf1a5324205.png

171

/uploads/files_user1/answer/5e7b04b52805f811329.png

Ø  是否堵塞

SELECT spid,blocked,waittime,waittype,waitresource,p.dbid,cpu,physical_io,memusage,open_tran

,status,login_time,last_batch,hostname,program_name,hostprocess,loginame,cmd,text

FROM master.dbo.sysprocesses p CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) s

WHERE blocked > 0 OR spid IN(SELECT blocked FROM master.dbo.sysprocesses WHERE blocked > 0)

go

 

Ø  检查锁表

select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName

from   sys.dm_tran_locks t where resource_type='OBJECT' order by spid asc;

 

Ø  查询导致死锁的sql语句

dbcc inputbuffer(spid);

Ø  解锁

declare @spid  int

Set @spid  = 123--锁表进程

declare @sql varchar(1000)

set @sql='kill '+cast(@spid  as varchar)

exec(@sql)

 

Ø  杀掉进程

kill spid

/uploads/files_user1/answer/5e7b04c175780598269.png

/uploads/files_user1/answer/5e7b04c60a41b438820.png


参考:https://www.cnblogs.com/zhengyazhao/p/10917575.html


快照隔离启用校验:


#如下SQL如果查询结果是0或者false,则没有启用,要执行后面的SQL启用

select is_read_committed_snapshot_on from sys.databases where name='数据库名';


#执行此SQL需要数据库无连接,最好重启后立即执行,否则会一致等待,同时如果这个不调业务上会出现锁等待
alter database 

数据库名   set READ_COMMITTED_SNAPSHOT on;



#查询数据库的全局参数

select * from sys.databases where name='数据库名'


#查询option

DBCC UserOptions


#查询当前数据库有哪些会话

sp_who 


#杀掉会话

 kill [spid] 

要回复问题请先登录注册