首页 > 数据库 >SqlServer运维——查询阻塞

SqlServer运维——查询阻塞

时间:2024-12-18 18:30:48浏览次数:6  
标签:dm 运维 SqlServer 阻塞 sys 会话 session id

目录

0. 演示阻塞

  1. 首先MSSM中打开一个查询会话,这个是进程68

执行一个更新操作,但是不提交事务

BEGIN TRANSACTION
UPDATE dbo.AAMyTestMsg SET	Mes='1' WHERE CreateTime='2024-07-18 15:04:46.873'
--COMMIT TRANSACTION
  1. 另开一个查询界面,进程:92

执行如下删除语句

DELETE	 dbo.AAMyTestMsg WHERE CreateTime='2024-07-18 15:04:46.873'

此时,会话92一直处于:正在执行查询

1. 基于sys.dm_exec_requests视图

  1. 使用sys.dm_exec_requests视图,查询一个进程被另外一个进程阻塞
SELECT session_id,
       blocking_session_id,
       wait_time,
       wait_type,
       last_wait_type,
       wait_resource,
       transaction_isolation_level,
       lock_timeout
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
GO

若是没有阻塞,则查询无结果。

在上述构造的阻塞的情形下,执行上述查询脚本,可以看到如下结果

session_id blocking_session_id wait_time wait_type last_wait_type wait_resource transaction_isolation_level lock_timeout
92 68 275165 LCK_M_U LCK_M_U RID: 13:1:3829888:1 2 -1
  • 说明1:进程92被进程68阻塞。
  • 说明2:session_id(被阻塞会话),blocking_session_id(阻塞者)

2. 在MSSM中通过“活动和监视器”查看

可以在MSSM中的直接右键服务器连接-->活动和监视器-->查看:进程

这里我们简单的摘录几个主要字段如下:

会话ID 任务状态 命令 阻塞者 头阻塞程序
68 1
92 SUSPENED DELETE 68

在界面商可以直接选中行右键-->详细信息,可以查看当前会话在执行的语句

3. 完整脚本查询阻塞

  • 基于该脚本,可以查询阻塞的的会话ID,阻塞者ID,以及当前会话的执行的SQL语句

  • 来源金蝶官方提供

SELECT t1.resource_type AS [锁类型], DB_NAME(resource_database_id) AS [数据库名], t1.resource_associated_entity_id AS [阻塞资源对象]
      ,t1.resource_description AS [资源描述信息], t1.request_mode AS [请求的锁], t1.request_session_id AS [等待会话]
      ,t2.wait_duration_ms AS [等待时间], (SELECT [text]
                                       FROM  sys.dm_exec_requests AS r WITH(NOLOCK)
                                             CROSS APPLY sys.dm_exec_sql_text(r.[sql_handle])
                                       WHERE r.session_id=t1.request_session_id) AS [等待会话执行的批SQL]
      ,(SELECT SUBSTRING(
                     qt.[text], r.statement_start_offset / 2
                     ,(CASE WHEN r.statement_end_offset=-1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.[text]))* 2 ELSE r.statement_end_offset END)
                      / 2)
        FROM  sys.dm_exec_requests AS r WITH(NOLOCK)
              CROSS APPLY sys.dm_exec_sql_text(r.[sql_handle]) AS qt
        WHERE r.session_id=t1.request_session_id) AS [等待会话执行的SQL], t2.blocking_session_id AS [阻塞会话]
      ,(SELECT [text]
        FROM  sys.sysprocesses AS p
              CROSS APPLY sys.dm_exec_sql_text(p.[sql_handle])
        WHERE p.spid=t2.blocking_session_id) AS [阻塞会话执行的批SQL]
FROM  sys.dm_tran_locks AS t1 WITH(NOLOCK)
      INNER JOIN sys.dm_os_waiting_tasks AS t2 WITH(NOLOCK)ON t1.lock_owner_address=t2.resource_address
OPTION(RECOMPILE);

结果:

锁类型 数据库名 阻塞资源对象 资源描述信息 请求的锁 等待会话 等待时间 等待会话执行的批SQL 等待会话执行的SQL 阻塞会话 阻塞会话执行的批SQL
RID AIS20241115140817 72057600326893500 1:3829888:1 U 92 893096 (@1 varchar(8000))DELETE [dbo].[AAMyTestMsg] WHERE [CreateTime]=@1 )DELETE [dbo].[AAMyTestMsg] WHERE [CreateTime]=@1 68 BEGIN TRAN UPDATE dbo.AAMyTestMsg SET Mes='1' WHERE CreateTime='2024-07-18 15:04:46.873'

标签:dm,运维,SqlServer,阻塞,sys,会话,session,id
From: https://www.cnblogs.com/shanzhiming/p/18615625

相关文章

  • 软件项目文档大全:开发至交付,运维、安全、实施资料整备
    前言:在软件项目管理中,每个阶段都有其特定的目标和活动,确保项目的顺利进行和最终的成功交付。以下是软件项目管理各个阶段的详细资料:软件项目管理部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要......
  • sqlserver查字段的默认值
    在SQLServer中,您可以通过查询系统视图来查找字段的默认值。以下是一些查询字段默认值的常用方法:使用 INFORMATION_SCHEMA.COLUMNS 视图:SELECTTABLE_NAME,COLUMN_NAME,COLUMN_DEFAULTFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=......
  • 机器学习在运维中的实时分析应用:新时代的智能运维
    随着信息化和互联网技术的迅猛发展,运维工作的复杂性和重要性不断提升。传统的运维方法已经无法满足现代企业对于系统高效、稳定运行的需求。借助机器学习技术,实时分析在运维中的应用为智能运维带来了新的契机。本文将详细探讨机器学习在运维中的实时分析应用,并通过具体代码......
  • 做运维工程师辛苦吗?
    你要知道做那一块的运维网络运维(确保网络稳定安全)应用运维(应用软件进程监控、服务和端口相应情况、故障处理等)系统运维(操作系统监控恢复等)、桌面和外围设备运维(计算机终端、外围输入输出设备等的维护)、基础环境运维(比如机房环境、电力系统、消防等)、主机和存储设备......
  • 运维神器!Docker 可视化管理面板!
    大家好,我是Java陈序员。在开发中,Docker作为优秀的容器引擎,能快速实现应用的部署,以及安装各种中间件,大大提高了开发效率。今天,给大家介绍一个开源的Docker可视化管理面板工具,帮助你更好的管理Docker!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经......
  • 运维必备--生产环境系统更新时必用的md5校验
    在生产环境下做更新的时候,为了不必要的扯皮以及更新的严谨性,一致性。更新前后需要md5文件校验。1.开发传代码包过来让他做好校验,更新包连同md5文件一起发送。2.运维接收代码包做一次文件校验,生成的md5文件跟开发提供的做对比,一致则没问题。3.更新到服务器后,再做一次文件的校......
  • 0day深信服运维安全管理系统(堡垒机)存在信息泄露漏洞
      0x01产品概述        深信服运维安全管理系统侧重于运维安全管理,集账号管理、身份认证、单点登录、资源授权、访问控制和操作审计为一体,能够对IT资产(如服务器、网络设备、安全设备、数据库等)的操作过程进行有效的运维操作审计,使运维审计由事件审计提升为操作内......
  • sql server 2008 r2 展开时报错:参数名:viewInfo ( Microsoft SqlServer Management S
    HR服务器的数据库报了一个不常见的错误,记录下来分享给大伙,如果遇到同样的问题,希望可以得到解决。服务器环境:windowsserver2008(64Bit)数据库版本:SQLserver2008R2错误提示:值不能为空。参数名:viewInfo(Microsoft.SqlServer.Management.SqlStudio.Expl;如下图:  在路径:C:\Us......
  • 【MySQL运维】mysql数据被误删的恢复方案
    前言在数据库管理过程中,数据误删是一个常见且令人头疼的问题。无论是由于人为错误还是系统故障,数据丢失都可能导致严重的后果。幸运的是,MySQL提供了多种方法来恢复误删的数据。一、使用备份恢复原理备份是最常见的数据恢复方法。通过定期备份数据库,可以在数据丢失时快速恢复到......
  • 中高级运维工程师运维面试题(一)之JVM
    这里写目录标题问题1:什么是堆?它在JVM中的作用是什么?问题2:堆中有哪些内容?问题3:什么是Eden区、Survivor区,年轻代和老年代的作用分别是什么?问题4:什么是GC?有哪些常见的垃圾回收器?问题5:栈是什么?与堆有什么区别?问题6:如何优化堆和栈?问题7:简述FullGC的触发条件以及如何优......