sys.dm_os_waiting_tasks 引发的疑问(上)
很多人在查看SQL语句等待的时候都是通过sys.dm_exec_requests查看,等待类型也是通过wait_type得出,sys.dm_os_waiting_tasks也可以看到session的等待那么有什么区别呢....
废话不多说直接开整.
测试版本2012
sys.dm_os_waiting_tasks 的字段说明:
waiting_task_address |
varbinary(8) |
等待任务的地址。 |
session_id |
smallint |
与任务关联的会话的 ID。 |
exec_context_id |
int |
与任务关联的执行上下文的 ID。 |
wait_duration_ms |
int |
此等待类型的总等待时间(毫秒)。此时间包含 signal_wait_time。 |
wait_type |
nvarchar(60) |
等待类型的名称。 |
resource_address |
varbinary(8) |
任务等待的资源的地址。 |
blocking_task_address |
varbinary(8) |
当前持有此资源的任务。 |
blocking_session_id |
smallint |
正在阻塞请求的会话的 ID。如果此列为 NULL,则表示请求未被阻塞,或锁定会话的会话信息不可用(或无法进行标识)。 -2 = 阻塞资源由孤立的分布式事务拥有。 -3 = 阻塞资源由延迟的恢复事务拥有。 -4 = 由于内部闩锁状态转换而无法确定阻塞闩锁所有者的会话 ID。 |
blocking_exec_context_id |
int |
正在阻塞的任务的执行上下文 ID。 |
做个小例子:
-----开启事务更新一张表并且不提交。
begin tran
update t1 set b = getdate()
-----做一个查询 并且开启并行
select * from t1 inner join t2 on t1.a = t2.a
option (querytraceon 8649)
查询sys.dm_os_waiting_tasks 的结果,udate :session 55, select : session 54,如图开一看到session 中出现了 21条等待(虚机给了双核4线程),那么可以看出wait_type 为LCK_M_S的有四条,这个可以理解是开并行起了四个线程要扫描表t1全部等待状态,从 resource_description 字段信息中我们看一下是否是T1表的等待。
从”ridlock fileid=1 pageid=109 dbid=7 id=lock1f03c7700 mode=X associatedObjectId=72057594038910976“ 这个信息中我们知道ridlock fileid=1 pageid=109 dbid=7
dbcc traceon (3604)
dbcc page(7,1,109,3)
确定了LCK_M_S的四条确实是扫描表所产生的等待,那么其他的CXPACKET等待是什么鬼? 从规律中可以看出CXPACKET等待的分成四组每一组4条 exec_context_id分别是 5,6,7,8(四个等待扫表的线程),还有一个上图中的第十三行“exchangeEvent id=Port1fe7a2200 WaitType=e_waitPortOpen nodeId=0” 应该是调度的线程。
sys.dm_os_waiting_tasks里在并行计划的执行中出现了 CXPACKET 和 LCK_M_S 那么我们来看一下 sys.dm_exec_requests 里是如何显示的(这里只取出试验用的字段)
blocking_session_id 竟然是0 , wait_type 竟然是CXPACKET(并行等待,我们知道主要的等待原因不是这个),另外观察 发现这里面抓取的TASK_ADDRESS 是调度线程。经过其他实验得知 sys.dm_exec_requests 在并行的等待中无法获得真正的等待类型和资源。如果取消并行,执行一个串行计划两个视图得到的结果是一样的。
例子中我们看出了sys.dm_exec_requests 和sys.dm_os_waiting_tasks 在实际使用中关于并行的区别,但不单单只有这一个疑问,4线程并行计划为什么一下会出现21条等待?并行计划怎么执行的? 我们下篇继续说....
本篇内容均为自己的理解,如有错误请大神们及时指出!!谢谢
sys.dm_os_waiting_tasks 引发的疑问(上)的更多相关文章
- sys.dm_os_waiting_tasks 引发的疑问(中)
上一篇我们说了一下sys.dm_exec_requests 和 sys.dm_os_waiting_tasks 在获取并行等待的时候得不同结果,这一篇我们谈论下我的第二个疑问:为什么一个并行计划(4线 ...
- sys.dm_os_waiting_tasks 引发的疑问(下)
前面写了两篇了,其实不光是说sys.dm_os_waiting_tasks的应用,研究了挺长时间的并行,自己有了一些理解,所以分享出来希望有什么理解错误的地方大神们及时纠正!! 给出前两篇的连接: 上 ...
- Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...
- 一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结
一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结 这是一个十分严重的线上问题 自从最近的某年某月某天起,线上服务开始变得不那么稳定(软病).在高峰期,时常有几台机器的 ...
- EMQ 学习---订阅$SYS主题,捕获客户端上下线消息
acl.config文件定义了可订阅$SYS主题的权限. {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]} ...
- 一个SQL注释引发的线上问题
最近开始服务拆分,时间将近半个月.测试阶段也非常顺利,没有什么问题. 但上线之后的第二天,产品就风风火火的来找我们了,一看就是线上有什么问题.我们也不敢说,我们也不敢问,线上的后台商品忽然无法上架了, ...
- 【转】一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结
[转]原文链接:https://cloud.tencent.com/developer/article/1497826 这是一个十分严重的线上问题 自从最近的某年某月某天起,线上服务开始变得不那么稳定 ...
- 由一次PasswordBox密码绑定引发的疑问 ---> WPF中的附加属性的定义,以及使用。
1,前几天学习一个项目的时候,遇到了PasswordBox这个控件,由于这个控件的Password属性,不是依赖属性,所以不能和ViewModel层进行数据绑定. 2,但是要实现前后端彻底的分离,就需 ...
- 从一个LocalDateTime引发的疑问
一 公司有同事部署出错,然后查日志,找时间,从k8s得到的时间是 2017-06-16T09:38:48.580 +0000,然后他就纳闷了,因为他根本不会在9点部署好吧,而且9点大多数程序员都没开 ...
随机推荐
- Android开发学习之路-DiffUtil使用教程
谷歌最近更新了Support Library 24.2.0,而DiffUtil就是在这个版本添加的一个工具类. DiffUtil是一个查找集合变化的工具类,是搭配RecyclerView一起使用的,如 ...
- iOS 支持 IPv6
苹果的规定:2016年6月1日提交到App Store必须支持IPv6-only网络. 官方文档:https://developer.apple.com/library/mac/documentati ...
- spring帝国-开篇
spring简介: spring是一个开源框架,spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Dev ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- 安卓Design包之AppBar和Toolbar的联用
前面讲了Design包的的CoordinatorLayout和SnackBar的混用,现在继续理解Design包的AppBar; AppBarLayout跟它的名字一样,把容器类的组件全部作为AppB ...
- 【分布式】Zookeeper的服务器角色
一.前言 前一篇已经详细的讲解了Zookeeper的Leader选举过程,下面接着学习Zookeeper中服务器的各个角色及其细节. 二.服务器角色 2.1 Leader Leader服务器是Zook ...
- jQuery2.x源码解析(构建篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 笔者阅读了园友艾伦 Aaron的系列博客< ...
- JavaScript : 浅讲ajax
1.ajax入门案例 1.1 搭建Web环境 ajax对于各位来说,应该都不陌生,正因为ajax的产生,导致前台页面和服务器之间的数据传输变得非常容易,同时还可以实现页面的局部刷新.通过在后台与服务器 ...
- 如果你也会C#,那不妨了解下F#(5):模块、与C#互相调用
F# 项目 在之前的几篇文章介绍的代码都在交互窗口(fsi.exe)里运行,但平常开发的软件程序可能含有大类类型和函数定义,代码不可能都在一个文件里.下面我们来看VS里提供的F#项目模板. F#项目模 ...
- shiro的使用2 灵活使用shiro的密码服务模块
shiro最闪亮的四大特征是认证,授权,加密,会话管理. 上一篇已经演示了如何使用shiro的授权模块,有了shiro这个利器,可以以统一的编码方式对用户的登入,登出,认证进行管理,相当的优雅. 为了 ...