sys.dm_exec_requests中statement_start_offset与statement_end_offset

文章目录

  • 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_typewhen 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_descriptionfrom 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.mzph.cn/news/120030.shtml

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

相关文章

TensorFlow学习:使用官方模型和自己的训练数据进行图片分类

前言 教程来源:清华大佬重讲机器视觉!TensorFlowOpencv:深度学习机器视觉图像处理实战教程,物体检测/缺陷检测/图像识别 注: 这个教程与官网教程有些区别,教程里的api比较旧,核心思想是没有变…

分享一下怎么做多门店商城系统

随着互联网的快速发展,传统实体店面临着巨大的挑战。为了更好地适应市场变化,提高竞争力,多门店商城系统应运而生。这种新型的商业模式,旨在通过线上线下融合,实现门店之间的互联互通,提高运营效率&#xf…

【会议征稿通知】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024) 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议(NNICE 2024&#xff0…

物理世界的互动之旅:Matter.js入门指南

本文简介 戴尬猴,我是德育处主任 欢迎来到《物理世界的互动之旅:Matter.js入门指南》。 本文将带您探索 Matter.js,一个强大而易于使用的 JavaScript 物理引擎库。 我将介绍 Matter.js 的基本概念,包括引擎、世界、物体和约束等…

CSS笔记-狂神

1、什么是CSS 如何学习 CSS是什么CSS怎么用(快速入门)CSS选择器(重点难点)美化网页(文字,阴影,超链接,列表,渐变…)盒子模型浮动定位网页动画(特…

【IO面试题 二】、怎么用流打开一个大文件?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:怎么用流打开一个大文件…

手写效果流式响应(langchain+fastapi+js)

这是一个前后端完整可用的小项目 后端是 Python 的 FastAPI 框架,调用 langchain 进行 openai 的模型对话。前端是纯html css javascript,没调用任何第三方库,方便集成到 Vue React 等现有前端项目。 聊天界面: 效果就是提问之…

vue项目中定制化音频展示,wavesurfer.js基本使用

效果图&#xff1a; wavesurfer是一个可定制的音频波形可视化&#xff0c;建立在Audio API和HTML5 Canvas之上。 基本使用&#xff1a; <body><script src"https://unpkg.com/wavesurfer.js"></script><div id"waveform"></di…

软考系统架构师知识点集锦二:软件工程

一、考情分析 二、考点精讲 2.1 软件过程模型 &#xff08;1&#xff09;原型模型 典型的原型开发方法模型。适用于需求不明确的场景,可以帮助用户明确需求。可以分为[抛弃型原型]与[演化型原型] 原型模型两个阶段: 1、原型开发阶段;2、目标软件开发阶段。 &#x…

【深度学习】使用Pytorch实现的用于时间序列预测的各种深度学习模型类

深度学习模型类 简介按滑动时间窗口切割数据集模型类CNNGRULSTMMLPRNNTCNTransformerSeq2Seq 简介 本文所定义模型类的输入数据的形状shape统一为 [batch_size, time_step&#xff0c;n_features]&#xff0c;batch_size为批次大小&#xff0c;time_step为时间步长&#xff0c…

设计模式:桥接模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《适配器模式》 下一篇《装饰器模式》 简介&#xff1a; 桥接模式&#xff0c;它是一种结构型设计模式&#xff0c;它的主要目的是将抽象部分与具体实现部分分离&#xff0c;使它们都可以独立地变化。…

Mingw下载---运行vscodeC++文件

下载 下载网址&#xff1a; https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 翻到最下面&#xff0c;选择win64的安装&#xff1a; 下载完&#xff0c;解压到没有空格和中文字符的路径。不然在vscode中运行不了C代码。

软考高级之系统架构师之数据流图和流程图

数据流图 概述 数据流图&#xff0c;DFD&#xff0c;用于表示业务信息系统中的数据流&#xff0c;它表达系统中的据传从输入到存储间所涉及的程序。采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程&#xff0c;是结构化系统分析方法的主要表达工具…

源码推荐【源码好优多】

一、影视小程序 特点&#xff1a;可独立部署、消耗环境小、安全可靠。使用微信小程序技术开发。部署简单容易。该项目的部署需要具备微擎框架的开发以及部署能力 二、java博客管理系统 博客管理系统是一个融合线上、线下的网民在线交流管理信息化系统。它的使用为网民、运营者搭…

Flutter最全面试题大全

在理解这些问题之前&#xff0c;建议看一下Flutter架构原理&#xff0c;如下链接&#xff1a; https://blog.csdn.net/wang_yong_hui_1234/article/details/130427887?spm1001.2014.3001.5501 目录 一. 有个Text节点&#xff0c;由于文字内容过多&#xff0c;发生了溢出错误&…

三步,金蝶K3的数据可视化了

数据可视化的一大特点就是“一图胜千言”&#xff0c;没什么能比图表更直观展现数据的了。那&#xff0c;金蝶K3系统上那海量数据能不能也做成数据可视化报表&#xff1f;操作复杂吗&#xff0c;难度大吗&#xff1f; 换了别的软件来做&#xff0c;操作多、难度大是板上钉钉&a…

排序算法-堆积树排序法(HeapSort)

目录 排序算法-堆积树排序法&#xff08;HeapSort&#xff09; 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法&#xff08;HeapSort&#xff09; 1、说明 堆积树排序法是选择排序法的改进版&#xff0c;可以减少在选择排序法中的比较次数&#xff0c;进而减少排序…

计算机服务器中了devos勒索病毒怎么办?企业数据库被encryped

计算机网络技术的不断发展&#xff0c;为人们的生活提供了更多的帮助&#xff0c;但也为我们的企业带来了更多的数据安全威胁。近期&#xff0c;云天数据恢复中心收到很多企业的求助&#xff0c;企业的数据库遭到了devos后缀勒索病毒攻击&#xff0c;导致企业数据库无法打开&am…

TypeScript 基础学习

第一节&#xff1a;为什么使用ts? js 只能是动态类型检查&#xff0c;ts 是静态类型检查 第二节&#xff1a;优化编译 生成的配置文件名字叫tsconfig 第三节&#xff1a;变量类型 联合类型 可选属性 类型别名 接口 接口和类型别名的区别 接口扩展 类型扩展 类型断言&#…

为爱出发,与善同行丨纬创软件2023北京善行者圆满收官

2023年10月21日&#xff0c;北京善行者徒步活动在昌平正式开走。800支队伍3200名善行者队员进行32公里的公益行走。纬创软件组建「北京台协纬创软件队」&#xff0c;4名队员踏上32公里的征程&#xff0c;通过徒步筹款的方式传递善行理念&#xff0c;为贫困山区的孩子们建立“爱…