任务描述

1. 问题描述,分析

   从阿里云日志捞出来的慢sql,每天出现100多次

  跟踪了这个超时的sql,最近在死锁里也比较多,和top 200的 类似 (http://pm.zhcxkj.com/zentao/task-view-26776.html)


问题分析:

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

select top (50) 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(50) 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; 

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


3.原sql

UPDATE QE
SET    QE.LockGuid = '25d3b1ae33814b3490adff69882fbdaa',
       QE.QueueState = 1,
       QE.ExecTime = Getdate()
FROM   RB_Ebay_Listing_Queue_V2 QE
       INNER JOIN (SELECT QueueID
                   FROM  (SELECT TOP (50) 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
                                 LEFT JOIN RB_Ebay_Listing_Product_V2 P WITH (NOLOCK)
                                        ON Q.ListingBasicID = P.ListingBasicID
                                           AND Q.CustomerID = P.CustomerID
                                           AND P.OrderSourceID = Q.OrderSourceID
                                           AND Q.SiteCode = P.SiteCode
                                           AND P.IsVariation = 0
                                 LEFT JOIN RB_OrderSource OS WITH (NOLOCK)
                                        ON OS.ID = Q.OrderSourceID
                                           AND OS.CustomerID = Q.CustomerID
                          WHERE  Q.QueueState = 0
                                 AND Q.QueueType = 5
                          ORDER  BY Q.AddTime)#TMP)tmp
               ON QE.QueueID = tmp.QueueID
--PARAMS:
--MESSAGE:执行超时已过期。完成操作之前已超时或服务器未响应。 



历史记录  
  1. 2022-05-30 14:47:22, 由 陈少军 创建。
  2. 2022-05-30 14:48:56, 由 陈少军 指派给 温林生。
    修改了 预计剩余,旧值为 "0",新值为 "2"。
    参考解决方案 优化
  3. 2022-05-30 15:38:59, 由 温林生 完成。
    修改了 总计消耗,旧值为 "0",新值为 "0.25"。
    修改了 指派给 ,旧值为 "wenlinsheng",新值为 "chenshaojun"。
    修改了 实际完成,旧值为 "",新值为 "2022-05-30 15:37:08"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-05-30 15:38:59"。
    修改了 预计剩余,旧值为 "2",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "wenlinsheng"。

    已按照优化方案将SQL进行了调整

  4. 2022-07-16 17:09:18, 由 zhengqiao 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "chenshaojun",新值为 "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-30 14:47:22
由谁完成 温林生 于 2022-05-30 15:37:08
由谁取消 暂无
由谁关闭 zhengqiao 于 2022-07-16 17:09:18
关闭原因 已完成
最后编辑 zhengqiao 于 2022-07-16 17:09:18
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 0.25工时
预计剩余 0工时
预计开始 2022-05-30
实际开始 2022-05-30
截止日期 2022-06-05