OPS 2017/12/29 Y.ch

Sql server 死锁、运行状态检查

Sql server 死锁是由于Sql server的执行过程中,当大数据插入更新或游标操作时,方法使用不当所导致。数据库大批量数据初始化时,应当删除索引,对数据进行初始化后,进行索引重建等操作。

1.查询当前死锁或者正在执行的操作的Sql语句如下

  1. SELECT request_session_id spid,OBJECT_NAME
  2. (resource_associated_entity_id)tableName
  3. FROM sys.dm_tran_locks
  4. WHERE resource_type='OBJECT'

2.查询当前运行状态的Sql如下

  1. SELECT [Spid] = session_id,
  2.   ecid ,
  3.   [Database] = DB_NAME(sp.dbid),
  4.   [User] = nt_username,
  5.   [Status] = er.status ,
  6.   [Wait] = wait_type ,
  7.   [Individual Query] = SUBSTRING(qt.text,
  8.   er.statement_start_offset / 2,
  9.   ( CASE WHEN er.statement_end_offset = -1
  10.  THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
  11.   ELSE er.statement_end_offset
  12.   END - er.statement_start_offset ) / 2),
  13.   [Parent Query] = qt.text,
  14.   Program = program_name,
  15.   hostname,
  16.   nt_domain,
  17.   start_time
  18. FROM sys.dm_exec_requests er
  19.   INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
  20.   CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
  21. WHERE  session_id > 50
  22.   AND session_id NOT IN ( @@SPID ) 
  23. ORDER BY 1,2

3.杀死当前进程

  1. KILL spid

直接杀死session是会存在比较大风险的,只有可以保证数据可以重复运行时在建议如此暴力操作

PS:代码里的减号(-)怎么都会变成短折线呢。。。

已婚,有娃,已过而立之年,奔波于北京,深圳与济南之间的靠写代码为生,喜欢玩游戏的胖子。

发表评论

电子邮件地址不会被公开。