sys.dm_exec_requests中statement_start_offset与statement_end_offset

news2024/7/6 19:25:35

文章目录

  • 1.缘起
  • 2.根因
  • 3.示例
  • 4.附录

1.缘起

mssql中查早阻塞与及其相关联的sql时,遇到如下内容,故记录一下,

substring(dest_blocked.text,der.statement_start_offset/2+1,(case when der.statement_end_offset=-1 then  DATALENGTH(der.statement_end_offset)
	 else der.statement_end_offset end-der.statement_start_offset)/2+1) as blocked_statement

2.根因

statement_start_offset与statement_end_offset主要用于定位sql的起始与结束位置,但是为何要/2+1,从网路上查询得知:

It's because data returned from sys.dm_exec_sql_text function is in Unicode. 
1 character takes 2 bytes. The SUBSTRING works on character data types (not on bytes). 
So we need to divide the number of bytes by 2 + 1 to have location of the first character in SQL Query that is inside text.

主要是因为sys.dm_exec_sql_text返回的offset是unicode,也就是说返回的是bytes数,1个字符要占用2个bytes,而substring使用character为单位取值,故需要除以2

3.示例

看一下示例:
主要用于返回substring取值的sql与不使用substring取值的完整sql
substring取值的sql

select 'a' as A_query,der.session_id,der.statement_start_offset,der.statement_end_offset, substring(dest.text,der.statement_start_offset/2+1,(case when der.statement_end_offset= -1 then datalength(dest.text)
else der.statement_end_offset end - der.statement_start_offset)/2+1) as statement from sys.dm_exec_requests der
cross apply sys.dm_exec_sql_text(der.sql_handle) dest
union
select 'b' as b_query,der.session_id,der.statement_start_offset,der.statement_end_offset, dest.text as statement from sys.dm_exec_requests der
cross apply sys.dm_exec_sql_text(der.sql_handle) dest
order by session_id

返回如下:
在这里插入图片描述
注意上图中的A_query字段:
a 代表使用substring取值的sql
b 代表不使用substring取值的完整sql

如下,是返回的完整sql:
substring取值的sql(sql_1)

EXECUTE [cmCriticalManufacturingODSLink]..[dbo].sp_executesql @sqlcommand, N'@sqlrowcnt int OUTPUT', @sqlrowcnt=@sqlrowcnt output

不使用substring取值的完整sql(sql_2)

(@sqlcommand nvarchar(max),@sqlrowcnt As int OUTPUT)EXECUTE [cmCriticalManufacturingODSLink]..[dbo].sp_executesql @sqlcommand, N'@sqlrowcnt int OUTPUT', @sqlrowcnt=@sqlrowcnt output

由于statement_start_offset返回是104个bytes,换算成字符就是52个字符
比对上面sql_1与sql_2,可以看到sql_1刚好从第53个字符开始截取,这也就是要+1的原因

4.附录

标题1中的完整sql:

select dtl.resource_type,
case when dtl.resource_type in ('database','file','metadata') then resource_type
     when dtl.resource_type in ('object') then object_name(dtl.resource_associated_entity_id,dtl.resource_database_id) 
	 when dtl.resource_type in ('key','page','rid') then (select object_name(object_id,dtl.resource_database_id) from sys.partitions where hobt_id=dtl.resource_associated_entity_id)
	 else 'unidentifer' end as parent_object,
	 dtl.request_mode,
	 dtl.request_status,
	 dowt.wait_duration_ms,
	 dowt.wait_type,
	 dowt.session_id as blocked_session_id,
	 des_blocked.login_name as blocked_user,
	 substring(dest_blocked.text,der.statement_start_offset/2+1,(case when der.statement_end_offset=-1 then  DATALENGTH(der.statement_end_offset)
	 else der.statement_end_offset end-der.statement_start_offset)/2+1) as blocked_statement,
	 dowt.blocking_session_id,
	 der.blocking_session_id,
	 des_blocking.login_name,
	 dest_blocking.text,
	 dowt.resource_description
	 from sys.dm_tran_locks dtl 
join sys.dm_os_waiting_tasks dowt on dtl.lock_owner_address=dowt.resource_address
join sys.dm_exec_requests der on dowt.session_id=der.session_id
join sys.dm_exec_sessions des_blocked on dowt.session_id=des_blocked.session_id
join sys.dm_exec_sessions des_blocking on dowt.blocking_session_id=des_blocking.session_id
join sys.dm_exec_connections dec on des_blocking.session_id=dec.most_recent_session_id
cross apply sys.dm_exec_sql_text( dec.most_recent_sql_handle) dest_blocking
cross apply sys.dm_exec_sql_text( der.sql_handle) as dest_blocked
where dtl.resource_database_id=db_id() and dtl.resource_type not in ('database','file') 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GZ035 5G组网与运维赛题第1套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第1套 赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) 子任务2:5G室内与室外站点建设(20分) 竞赛模块2--5G公共网络运维与优化(3…

【ETL工具】本地环境IDEA远程DEBUG调试Flume代码

🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…

推开科研成果落地“最后一扇门”

科研成果只有落地了,才能发挥出它真正的价值。虽然中国近几年已经飞速发展,但是我们的自主创新能力依然比不了发达国家。而且,尽管科研成果在理论和实践上已经取得了很大的进展,但如何将其落地到实际生产中仍然存在很多问题。其中…

如何训练Embedding Model

BGE的技术亮点: 高效预训练和大规模文本微调;在两个大规模语料集上采用了RetroMAE预训练算法,进一步增强了模型的语义表征能力;通过负采样和难负样例挖掘,增强了语义向量的判别力;借鉴Instruction Tuning的…

如何在k8s的Java服务镜像(Linux)中设置中文字体

问题描述:服务是基于springboot的Java服务,在项目上是通过Maven的谷歌插件打包,再由k8s部署的。k8s的镜像就是一个Java服务,Java服务用到了中文字体。 解决这个问题首先需要搞定镜像字体的问题。有很多类似的解决方案,…

window环境下安装node.js8+angular6

安装node.js8 1.登录node官网 node官网Node.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/en2.找到适合自己的版本 选择下载 安装的时候一键next傻瓜式安装即可 设置淘宝镜像: npm config set registry https://regist…

动态增删kdtree(ikdtree)主要思路

ikdtree本质上也是一种kdtree,基本的构造方法和kdtree是一样的,本文主要记录两者不一样的地方,以港大MaRS实验室最新开源的增量式 kd-tree(https://github.com/hku-mars/ikd-Tree)里面的一些代码作为示范。 以下是ikdtree结构体包…

【Linux精讲系列】——yum软件包管理

​作者主页 📚lovewold少个r博客主页 ⚠️本文重点:Linux系统软件包管理工具yum讲解 😄每日一言:踏向彼岸的每一步,都是到达彼岸本身。 目录 前言 Linux系统下的软件下载方式 yum 查看软件包 如何安装软件 如何卸…

业务连续性和恢复性计划:保障企业IT业务的可靠性

第一章:引言 在当今数字化时代,企业对信息技术的依赖愈发显著,IT系统的稳定性和可用性变得至关重要。无论是自然灾害、硬件故障还是网络攻击,都可能导致业务中断,从而带来严重的经济损失和声誉损害。为了保障企业IT业…

UI自动化测试工具推荐

UI自动化测试已经成为现代软件开发过程中不可或缺的一部分。它能够提供诸多优势,包括提高测试效率、减少人力成本、提升软件质量等。同时,可视化工具为UI自动化测试带来了更多便利和灵活性。然而,可视化工具也存在一些潜在的劣势。本文将探讨…

【电路笔记】-波特图(Bode Diagrams)

波特图(Bode Diagrams) 文章目录 波特图(Bode Diagrams)1、概述2、定义3、波特图的呈现4、常见的波特图4.1 一阶滤波器4.2 二阶滤波器 5、总结 1、概述 上世纪30年代末,一位名叫 Hendrick Wade Bode 的美国工程师设计了一个著名的表示法来研究频域中的交流电路。 这…

stable diffusion简介和原理

Stable Diffusion中文的意思是稳定扩散,本质上是基于AI的图像扩散生成模型。 Stable Diffusion是一个引人注目的深度学习模型,它使用潜在扩散过程来生成图像,允许模型在生成图像时考虑到文本的描述。这个模型的出现引起了广泛的关注和讨论&am…

Python 算法高级篇:回溯算法的优化与剪枝技巧

Python 算法高级篇:回溯算法的优化与剪枝技巧 引言 1. 什么是回溯算法?2. 回溯算法的优化与剪枝技巧2.1 剪枝技巧2.1.1 可行性剪枝2.1.2 最优性剪枝 2.2 优化方法 2.2.1 记忆化搜索2.2.2 双向搜索 3. 代码示例3.1 旅行推销员问题 4. 总结 引言 回溯算法…

Windows下如何编译FFmpeg

ffmpeg一般在linux环境中使用,但是我们目前很多的开发工具是windows,为了方便在windows下调试和使用ffmpeg,我们需要再windows下面编译和使用ffpeg,本文只讲述windows下如何编译ffmpeg的内容。   windows下编译ffmpeg有很多的方…

「Dr. Bomkus 的试炼」——最详尽的通关资讯!

🧪 Dr. Bomkus 的试炼:新的冒险来临 天才科学家Dr. Bomkus一直在不知疲倦地打造他的最新作品。但是遇到了一些问题!现在,他需要你的帮助。 为了找到真正的有价值之人,Dr. Bomkus准备了六场试炼。这一系列令人激动的挑战…

VR全景餐厅,为餐饮老板开启了新纪元

在近两年的“元宇宙”概念的催生下,VR全景技术逐渐渗透到我们生活的方方面面,从舌尖到指尖、从田间到车间、从衣食住行到娱乐消费等,越来越多的行业、领域开始引入VR全景了,并在各自的垂直领域开拓了VR全景新时代。 而一直以来&am…

VBA技术资料MF73:将Logo添加到页眉侧

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

SENet 学习

ILSVRC 是一个比赛,全称是ImageNet Large-Scale Visual Recognition Challenge,平常说的ImageNet比赛指的是这个比赛。 使用的数据集是ImageNet数据集的一个子集,一般说的ImageNet(数据集)实际上指的是ImageNet的这个子…

解决javascript报错:SyntaxError: Invalid Unicode escape sequence

在处理cookie时报这个错: 网上搜了一圈都说是反斜杠问题,要把\替换成/ 但是试了网上的replace替换: replace(/\\/g, /) 结果没有用!!! 然后我干脆直接做了一个最简单字符串赋值,再打印出来。…

GZ035 5G组网与运维赛题第2套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第2套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) 子任务2:5G室内与室外站点建设(20分) 竞赛模块2--5G公共网络运维与优化(…