AG广东会,山东十一选五,大发

?
  • AG广东会400电话
  • 微网小程序
  • AI电话山东十一选五
  • 电商代运营
  • AG广东会,山东十一选五,大发:全 部 栏 目

    AG广东会400电话 网络优化推广 AI电话山东十一选五 呼叫中心 网站建设 商标?知产 微网小程序 电商运营 彩铃?短信 增值拓展业务
    SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(下)

    sys.dm_os_waiting_tasks 引发的疑问(下)

    前面写了两篇了,其实不光是说sys.dm_os_waiting_tasks的应用,研究了挺长时间的并行,自己有了一些理解,所以分享出来希望有什么理解错误的地方大神们及时纠正。

        给出前两篇的连接:

    SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上)

    SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(中)

    前面两篇的编写有一个疑惑...最初认为的并行比如这个语句:    

    select * from t1 inner join t2 on t1.a = t2.a
    OPTION (querytraceon 8649 ) 

        在我的理解并行是开几个线程去获取T1数据,另外几个线程获取T2 数据,然后关联结果形成最后结果集。可是试验了才发现自己原来想的和看到的结果不太一样呀。。。

        下面我们用前两篇的例子继续做试验...

        这次我们2张表同时给锁。纯吹却锸鞘裁辞榭。

    begin tran
    update t1 set b = getdate()
    update t2 set b = getdate()

        查看sys.dm_os_waiting_tasks (3篇文章的语句代码为了方便全都截图的,情景模拟的代码都很简单,就不贴出来了) 

     

        同样是21条...但是要注意,我特意把四个获取数据线程的 resource_description放在了前面:

    keylock hobtid=72057594039042048 dbid=7 id=lock1ee280f00 mode=X associatedObjectId=72057594039042048

        这次锁的是T2了 (sys.objects 是分数据库...越着急越添乱哈哈  在MASTER里查partition_id = 72057594039042048 也有值 queue_messages_1067150847 ,INTERNAL_TABLE直接给我整蒙圈了。∠附谘絶细节)但是可以看出其实并行不是像我理解那样两张表会同时扫描。执行计划可以看出要先扫描T2表,所以这个例子中只是锁住T2 ,如果和我想的执行方式(同时扫描T1、T2)一样应该出现T1 、T2两张表都有lck_m_s等待。

        语句及执行计划再贴一次:

        

    个人猜测所谓并行其实就是每个物理操作符的多线程同时操作,但单单这一个例子是不能说明问题的。SQL 也不会傻到并行只是操作符级别的吧? 这个没有找到明确的答案,继续研究争取有结论。。

        另一个问题union all 每个union 部分为什么不能同时执行?难道真的是操作符级别的多线程并行?

        希望大神给解答呀。。。

        本篇内容均为自己的理解,如有错误请大神们及时指出。⌒恍

        篇幅限制,下面给出小段的测试代码,没有整理自己摘吧!

    这个是在查询执行的时候 一直获取sys.dm_os_waiting_tasks 等待信息,并以@a 为分组 ,标示一次等待抓。庋颐强梢钥吹秸鲇锞洳⑿械牡却。    

    declare @a int
    set @a = 0
    while 1=1
    begin 
    insert into waiting_ecec
    select @a ,* from sys.dm_os_waiting_tasks a where session_id > 50 
    set @a = @a + 1
    end 
    truncate table waiting_ecec
    select * from waiting_ecec 
    select a.resource_description,a.waiting_task_address,a.session_id,a.exec_context_id,a.wait_type,blocking_task_address,blocking_exec_context_id,blocking_session_id,
    e.task_address,e.parent_task_address,worker_address from sys.dm_os_waiting_tasks a
    left join sys.dm_os_tasks e on a.waiting_task_address =e.task_address 
    and a.exec_context_id = e.exec_context_id 
    where a.session_id > 50
    SELECT session_id,status,blocking_session_id,wait_type,last_wait_type,scheduler_id,task_address FROM sys.dm_exec_requests where session_id = 53
    您可能感兴趣的文章:
    • 使用GruntJS构建Web程序之Tasks(任务)篇
    • SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上)
    • SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(中)
    上一篇:SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(中)
    下一篇:SQL Report Builder 报表里面的常见问题分析
  • 相关文章
  • ?

    ? 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(下) SqlServer,应,用之,sys.dm,waiting,

    AG广东会官网入口(中国)官方网站-IOS/Android通用版(2026已更新)