I'm Ych

Colorful day | 一条代码鱼

0%

Sql server 死锁、运行状态检查

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

查询当前死锁或者正在执行的操作

1
2
3
4
SELECT request\_session\_id spid,OBJECT\_NAME
(resource\_associated\_entity\_id)tableName
FROM sys.dm\_tran\_locks
WHERE resource\_type='OBJECT'

查询当前运行状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT \[Spid\] = session\_id,
  ecid ,
  \[Database\] = DB\_NAME(sp.dbid),
  \[User\] = nt\_username,
  \[Status\] = er.status ,
  \[Wait\] = wait\_type ,
  \[Individual Query\] = SUBSTRING(qt.text,
  er.statement\_start\_offset / 2,
  ( CASE WHEN er.statement\_end\_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) \* 2
ELSE er.statement\_end\_offset
END - er.statement\_start\_offset ) / 2),
  \[Parent Query\] = qt.text,
  Program = program\_name,
  hostname,
  nt\_domain,
  start\_time
FROM sys.dm\_exec\_requests er
INNER JOIN sys.sysprocesses sp ON er.session\_id = sp.spid
CROSS APPLY sys.dm\_exec\_sql\_text(er.sql\_handle) AS qt
WHERE  session\_id > 50
AND session\_id NOT IN ( @@SPID ) 
ORDER BY 1,2

杀死当前进程

1
KILL spid

直接杀死session是会存在比较大风险的,只有可以保证数据可以重复运行时在建议如此暴力操作 PS:代码里的减号(-)怎么都会变成短折线呢。。。