任务描述

1.问题描述分析

   此超时SQL 在5.16--5.18日的超时日志次数中,出现最多,排第1,

  此更新sql里用的In 子查询,in查询的集合元素数量200个,导致查询慢


2.解决方案

  将In 子查询改为临时表或表值参数 后 join ;这种方案之前修改了很多,效率很好,建议修改。


3.超时SQL

UPDATE QE
SET QE.LockGuid = '6cae2d0bd8714a2bb4e027796f6b2b59', QE.QueueState = 1, QE.ExecTime = getdate()
FROM RB_Ebay_Listing_Queue_V2 QE
WHERE QE.QueueID IN (
select top (200) Q.QueueID
FROM RB_Ebay_Listing_Queue_V2 Q WITH (NOLOCK)
INNER JOIN RB_Ebay_Listing_Basic_V2 B WITH (NOLOCK)
ON B.CustomerID = Q.CustomerID
AND B.ListingBasicID = Q.ListingBasicID
AND B.OrderSourceID = Q.OrderSourceID
AND B.SiteCode = Q.SiteCode
WHERE Q.QueueState = 0
AND Q.QueueType =6
)
PARAMS:
MESSAGE:执行超时已过期。完成操作之前已超时或服务器未响应

历史记录  
  1. 2022-05-18 10:41:57, 由 陈少军 创建。
  2. 2022-05-18 10:45:53, 由 陈少军 指派给 罗友军。
    修改了 预计剩余,旧值为 "0",新值为 "2"。

    参考 解决方案 修改,

    此超时SQL 在5.16--5.18日的超时日志次数中,出现最多 3389次,排第1,尽快优化

  3. 2022-05-19 17:43:52, 由 罗友军 指派给 温林生。
    修改了 指派给,旧值为 "luoyoujun",新值为 "wenlinsheng"。
  4. 2022-05-21 17:57:15, 由 温林生 完成。
    修改了 总计消耗,旧值为 "0",新值为 "5.5"。
    修改了 指派给 ,旧值为 "wenlinsheng",新值为 "liletong"。
    修改了 实际完成,旧值为 "",新值为 "2022-05-21 17:55:38"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-05-21 17:57:15"。
    修改了 预计剩余,旧值为 "2",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "wenlinsheng"。
    修改后的SQL执行计划图如下:

  5. 2022-05-24 20:17:17, 由 李乐同 指派给 陈少军。
    修改了 指派给,旧值为 "liletong",新值为 "chenshaojun"。
    2022/5/24晚上更新,线上监控
  6. 2022-05-26 15:19:35, 由 陈少军 指派给 李乐同。
    修改了 指派给,旧值为 "chenshaojun",新值为 "liletong"。

    查看25,26日的日志,依然有部分RB_Ebay_Listing_Queue_V2 更新的超时,由之前的3300多下降到780多

    这个超时应该是目前这个ebylisting同步的服务并行运行了128个服务造成的死锁等待超时,


    接下来整改了并发死锁的问题,在观察一下

  7. 2022-05-30 12:06:40, 由 陈少军 指派给 温林生。
    修改了 指派给,旧值为 "liletong",新值为 "wenlinsheng"。

    新解决方案改造:

     

    跟踪了这个超时的sql,最近在死锁里也比较多


    问题分析:

    进一步分析sql后发现:原sql里的left,in都可以去掉,改为下面的语句发现执行计划更简洁

    select top (200) QE.LockGuid, QE.QueueState, QE.ExecTime
                FROM RB_Ebay_Listing_Queue_V2 QE
      INNER JOIN RB_Ebay_Listing_Basic_V2 B  
                  ON B.CustomerID = QE.CustomerID
                    AND B.ListingBasicID = QE.ListingBasicID
                    AND B.OrderSourceID = QE.OrderSourceID
                    AND B.SiteCode = QE.SiteCode
                WHERE QE.QueueState = 0 AND QE.QueueType =6

    2.解决方案:

    此改造 减少死锁的概率

     
    UPDATE TOP(200) QE
    SET    QE.LockGuid = '3cac6a5ce66446c2bce1b5fb8939485e',
           QE.QueueState = 1,
           QE.ExecTime = Getdate()
    FROM   RB_Ebay_Listing_Queue_V2 QE
           INNER JOIN RB_Ebay_Listing_Basic_V2 B WITH(nolock)
                   ON B.CustomerID = QE.CustomerID
                      AND B.ListingBasicID = QE.ListingBasicID
                      AND B.OrderSourceID = QE.OrderSourceID
                      AND B.SiteCode = QE.SiteCode
    WHERE  QE.QueueState = 0
           AND QE.QueueType = 6; 

    逻辑和之前是一样的,改造后执行计划更简单,添加了索引,速度更快,减少了死锁的概率

  8. 2022-05-30 12:07:56, 由 陈少军 激活。
    修改了 预计剩余,旧值为 "0",新值为 "2"。
    修改了 任务状态,旧值为 "done",新值为 "doing"。
    修改了 由谁完成,旧值为 "wenlinsheng",新值为 ""。
    修改了 实际完成,旧值为 "2022-05-21 17:55:38",新值为 "0000-00-00"。
    修改了 取消时间,旧值为 "",新值为 "0000-00-00"。
    修改了 关闭时间,旧值为 "",新值为 "0000-00-00"。
     参考新的解决方案 优化
  9. 2022-05-30 15:30:13, 由 温林生 完成。
    修改了 总计消耗,旧值为 "5.5",新值为 "5.6"。
    修改了 指派给 ,旧值为 "wenlinsheng",新值为 "liletong"。
    修改了 实际完成,旧值为 "",新值为 "2022-05-30 15:26:46"。
    修改了 任务状态,旧值为 "doing",新值为 "done"。
    修改了 预计剩余,旧值为 "2",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "wenlinsheng"。

    根据解决优化方案,现已将SQL再进一步进行了优化

  10. 2022-07-16 17:09:18, 由 zhengqiao 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "liletong",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "zhengqiao"。
    修改了 关闭时间,旧值为 "0000-00-00 00:00:00",新值为 "2022-07-16 17:09:18"。
    修改了 关闭原因,旧值为 "",新值为 "done"。
所属迭代 系统管理部 - 系统服务优化
所属模块 /
相关需求 暂无
指派给 Closed 于 2022-07-16 17:09:18
任务类型 后端
任务标签 初始
开发组
任务状态 已关闭
进度 100%
优先级 P2
关键词
抄送给 刘灿 黄金龙 胡晓龙
由谁创建 陈少军 于 2022-05-18 10:41:57
由谁完成 温林生 于 2022-05-30 15:26:46
由谁取消 暂无
由谁关闭 zhengqiao 于 2022-07-16 17:09:18
关闭原因 已完成
最后编辑 zhengqiao 于 2022-07-16 17:09:18
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 5.6工时
预计剩余 0工时
预计开始 2022-05-18
实际开始 2022-05-21
截止日期 2022-05-25