今天测试同时运行将增量数据导入增量数据库对应的表并同步到全量数据库中,发现其中一个进程卡着不懂了。
在SQLServer自带的manage 客户端的活动和监视器中看到了死锁
活动监视器打开方式:
在进程中的头阻塞显示了1,说明有死锁。
这个工具, 用来查看一些当时的运行状态.和干掉进程.
但是这个工具只能查看部分哪个表被锁住了. 也无法知道是哪个进程和sql导致了锁进程. 只能查看一些其它的信息.
至于如何查看死锁的表, 需要用到下面的sql. 然后根据查出来的进程id 去上面的工具中
查看详细信息… 可以查看到引起死锁的SQL
查看当前死锁
SELECT
request_session_id spid,
OBJECT_NAME(
resource_associated_entity_id
) tableName
FROM
sys.dm_tran_locks
WHERE
resource_type = 'OBJECT'
查看死锁信息
exec master.dbo.sp_who_lock;--查看当前死锁进程
exec master.dbo.p_killspid ytsafety;--杀掉引起死锁的进程
查看进程信息
SELECT * FROM sys.dm_exec_connections;
SELECT * FROM sys.dm_exec_sessions;
SELECT
spid,
blocked,
DB_NAME(sp.dbid) AS DBName,
program_name,
waitresource,
lastwaittype,
sp.loginame,
sp.hostname,
a.[Text] AS [TextData],
SUBSTRING (
A. TEXT,
sp.stmt_start / 2,
(
CASE WHEN sp.stmt_end = - 1 THEN DATALENGTH (A. TEXT) ELSE sp.stmt_end END - sp.stmt_start
) / 2
) AS [current_cmd] FROM sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A WHERE spid > 50 ORDER BY blocked DESC,
DB_NAME(sp.dbid) ASC,
a.[text];
杀掉死锁进程
kill spid