新闻建站cms系统、政府cms系统定制开发

广州网站建设公司-阅速公司

asp.net新闻发布系统、报纸数字报系统方案
/
http://www.ysneo.com/
广州网站建设公司
您当前位置:首页>sqlserver数据库

sqlserver数据库

sqlserver 查看阻塞进程,查看数据库哪个表被锁

发布时间:2024/6/26 9:49:13  作者:Admin  阅读:52  

广告:

SELECT 
 wt.blocking_session_id AS BlockingSessionID,
 s.session_id AS SessionID,
 t.transaction_id AS TransactionID,
 wt.wait_type AS WaitType,
 wt.wait_time AS WaitTime,
 wt.wait_resource AS WaitResource,
 s.host_name AS HostName,
 s.program_name AS ProgramName,
 s.login_name AS LoginName,
 s.nt_domain AS NTDmain,
 s.nt_user_name AS NTUser,
 s.is_user_process AS IsUserProcess
FROM 
 sys.dm_tran_locks AS wt
JOIN 
 sys.dm_os_waiting_tasks AS w ON wt.lock_owner_address = w.resource_address
JOIN 
 sys.dm_exec_sessions AS s ON w.session_id = s.session_id
JOIN 
 sys.dm_tran_active_transactions AS t ON w.transaction_id = t.transaction_id
WHERE 
 wt.request_status = 'wait'
 AND wt.database_id = DB_ID() -- 可选,限制查询到当前数据库的锁信息

这个查询会返回当前阻塞其他进程的会话信息,包括会话ID、事务ID、等待类型、等待时间、等待资源等。如果你想要查看更详细的信息,可以进一步关联其他动态管理视图,如sys.dm_os_workers和sys.dm_exec_requests。

方法一:使用系统存储过程 sp_who2
-- 查看当前的阻塞进程
EXEC sp_who2

方法二:使用系统视图 sys.dm_exec_requests

-- 查看当前的阻塞进程
SELECT
 r.session_id AS 'Session ID',
 r.blocking_session_id AS 'Blocking Session ID',
 r.wait_type AS 'Wait Type',
 r.wait_resource AS 'Wait Resource',
 t.text AS 'SQL Text'
FROM
 sys.dm_exec_requests r
 CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE
 r.blocking_session_id IS NOT NULL

以上代码使用了系统视图 sys.dm_exec_requests,该视图返回了当前正在执行的请求的信息。通过观察 blocking_session_id 列,可以确定哪个会话导致了阻塞。另外,还可以查看 wait_type 和 wait_resource 列来获取阻塞的原因。

方法三:使用系统视图 sys.dm_os_waiting_tasks

-- 查看当前的阻塞进程
SELECT
 r.session_id AS 'Session ID',
 r.blocking_session_id AS 'Blocking Session ID',
 t.text AS 'SQL Text'
FROM
 sys.dm_os_waiting_tasks w
 JOIN sys.dm_exec_requests r ON w.session_id = r.session_id
 CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE
 r.blocking_session_id IS NOT NULL

以上代码使用了系统视图 sys.dm_os_waiting_tasks,该视图返回了当前正在等待的任务的信息。通过与 sys.dm_exec_requests 视图的联接,可以获得阻塞会话的详细信息。另外,还可以查看 SQL Text 列来获取阻塞会话正在执行的 SQL 语句。

查看数据库哪个表被锁:

SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id)tableName
FROM sys.dm_tran_locks
WHERE resource_type='OBJECT '
KILL 72 -- 杀掉进程

广告:

相关文章
表被锁
阻塞进程
cms新闻系统购买咨询
扫描关注 广州阅速软件科技有限公司
扫描关注 广州阅速科技