Sql server 死锁是由于Sql server的执行过程中,当大数据插入更新或游标操作时,方法使用不当所导致。数据库大批量数据初始化时,应当删除索引,对数据进行初始化后,进行索引重建等操作。
1.查询当前死锁或者正在执行的操作的Sql语句如下
- SELECT request_session_id spid,OBJECT_NAME
- (resource_associated_entity_id)tableName
- FROM sys.dm_tran_locks
- WHERE resource_type='OBJECT'
2.查询当前运行状态的Sql如下
- 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
3.杀死当前进程
直接杀死session是会存在比较大风险的,只有可以保证数据可以重复运行时在建议如此暴力操作
PS:代码里的减号(-)怎么都会变成短折线呢。。。