mwe*_*ber 3 sql-server locking
我已经开发了一个从ERP SAP Business One
仓库管理到仓库管理的接口,并且面临着与数据库锁有关的问题。我的程序包括对ERP
数据库的直接写入操作(在创建或更改销售订单后的异步事件处理期间填充用户定义的字段)。它被怀疑是造成每天经常发生的阻塞情况的原因。
当发生阻塞情况时,sp_who2
给我有关阻塞和阻塞进程的信息,每次都指向一个spid
被BPM
管理软件用作“根阻塞进程”。其状态spid
始终显示为“睡眠”。
“休眠”进程是否会导致其他进程的数据库锁定,例如,当事务未提交时?
如何找出睡眠过程的最后一个命令?
2)我怎样才能找出睡眠过程的最后一个命令?
您可以使用 Adam Machanic 的sp_whoisActive工具来查找主要拦截器。
您还可以使用 DMV(从 sql 2005 及更高版本开始)来找出 spid 正在执行的内容:
-- You can use "most_recent_sql_handle" in sys.dm_exec_connections to see the last statement that was executed.
SELECT c.session_id, t.text,
QUOTENAME(OBJECT_SCHEMA_NAME(t.objectid, t.dbid)) + '.'
+ QUOTENAME(OBJECT_NAME(t.objectid, t.dbid)) proc_name,
c.connect_time,
s.last_request_start_time,
s.last_request_end_time,
s.status
FROM sys.dm_exec_connections c
JOIN sys.dm_exec_sessions s
ON c.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) t
WHERE c.session_id = -- spid for the spid involved in blocking
-- for any OPEN Transactions, you can use `sys.dm_tran_session_transactions` and `sys.dm_tran_active_transactions`
SELECT st.transaction_id,
at.name,
at.transaction_begin_time,
at.transaction_state,
at.transaction_status
FROM sys.dm_tran_session_transactions st
JOIN sys.dm_tran_active_transactions at
ON st.transaction_id = at.transaction_id
WHERE st.session_id = -- spid for the spid involved in blocking
Run Code Online (Sandbox Code Playgroud)
参考:
或者,您可以将事件通知或 Profiler 与阻塞进程报告结合使用来检测数据库服务器上的阻塞情况。
归档时间: |
|
查看次数: |
5330 次 |
最近记录: |