任务描述

1.问题分析

    华为云慢sql top 10,查询时间:98秒


2.解决方案


索引优化建议:
  1. 建议在数据表 irobotbox_marketpublish.pp_replenishment 的 StrategyId,MarketId,BusinessType,CustomerId,Time 列上添加如下索引,以提高查询性能:
    ALTER TABLE `irobotbox_marketpublish`.`pp_replenishment` ADD INDEX `idx_StrategyId_MarketId_BusinessType_CustomerId_Time` (`StrategyId`, `MarketId`, `BusinessType`, `CustomerId`, `Time`)

注意:在业务高峰期,变更表结构存在风险,请谨慎操作!在业务低峰下班后操作

3.慢sql


SELECT A55_T_1_.`补货情况` AS T_A26_2_, SUM(A55_T_1_.`执行数量`) AS T_AE3_3_
FROM (SELECT CASE WHEN a.补货执行时间差 > 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END AS '补货情况', COUNT(a.sku) '执行数量'
	FROM (SELECT r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku, r.Sku
			, r.`Status`, r.Inventory AS 修改后可售数, r.OriginalInventory AS 原可售数, w.DynamicInventory AS SKU最新动态库存合计, r.Remark AS 补货队列日志
			, r.FailureReason, date_add(w.LastModificationTime, INTERVAL 8 HOUR) AS 动态库存最新更新时间, date_add(r.lastReplenishmentTime, INTERVAL 8 HOUR) AS 补货队列最新执行时间, TIMESTAMPDIFF(hour, w.LastModificationTime, r.lastReplenishmentTime) AS 补货执行时间差
		FROM (SELECT CustomerId, Sku, SUM(AvailableNum) AS DynamicInventory, LastModificationTime
			FROM p_product_warehouse_dynamicinventory
			GROUP BY CustomerId, Sku
			) w
			JOIN (SELECT r.CustomerId, r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku
					, r.OriginalInventory, r.Inventory, r.Remark, r.FailureReason, r.Sku
					, r.`Status`, r.LastModificationTime AS lastReplenishmentTime
				FROM pp_replenishment AS r
					JOIN (SELECT MAX(Id) AS Id
						FROM pp_replenishment
						WHERE CustomerId = 1
							AND MarketId = 70
							AND StrategyId IN (180)
							AND Time >= DATE_SUB(NOW(), INTERVAL 72 HOUR)
							AND BusinessType = 1
						GROUP BY CustomerId, StrategyId, OrderSourceId, ProductId, SellerSku, Sku
						) p ON r.Id = p.Id
				) r ON w.CustomerId = r.CustomerId
				AND w.Sku = r.Sku
		WHERE w.LastModificationTime >= DATE_ADD(NOW(), INTERVAL -16 HOUR)
			AND w.LastModificationTime <= DATE_ADD(NOW(), INTERVAL -10 HOUR)
			AND w.LastModificationTime <= r.lastReplenishmentTime
		) a
	GROUP BY CASE WHEN a.补货执行时间差 > 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END
	) A55_T_1_
GROUP BY A55_T_1_.`补货情况`
ORDER BY T_AE3_3_ DESC
LIMIT 0, 1000
历史记录  
  1. 2023-04-18 15:45:34, 由 陈少军 创建。
  2. 2023-04-18 15:46:44, 由 陈少军 编辑。
    修改了 任务描述,区别为:
    002- 华为云慢top 10
    002+ 华为云慢sql top 10,查询时间:98秒
    005-
    005+
    006- 索引优化建议:
    006+ 索引优化建议:
    007- 建议在数据表irobotbox_marketpublish.pp_replenishment的StrategyId,MarketId,BusinessType,CustomerId,Time列上添加如下索引,以提高查询性能:
    007+ 建议在数据表irobotbox_marketpublish.pp_replenishment的StrategyId,MarketId,BusinessType,CustomerId,Time列上添加如下索引,以提高查询性能:
    009-
    009+
    010- 注意:在业务高峰期,变更表结构存在风险,请谨慎操作!在业务低峰下班后操作
    010+ 注意:在业务高峰期,变更表结构存在风险,请谨慎操作!在业务低峰下班后操作
    011-
    011+ 3.慢sql
    012- 3.慢sql
    012+
    013-
    013+ SELECT A55_T_1_.`补货情况` AS T_A26_2_, SUM(A55_T_1_.`执行数量`) AS T_AE3_3_
    014- SELECT A55_T_1_.`补货情况` AS T_A26_2_, SUM(A55_T_1_.`执行数量`) AS T_AE3_3_
    014+ FROM (SELECT CASE WHEN a.补货执行时间差 &gt; 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END AS '补货情况', COUNT(a.sku) '执行数量'
    015- FROM (SELECT CASE WHEN a.补货执行时间差 &gt; 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END AS '补货情况', COUNT(a.sku) '执行数量'
    015+ FROM (SELECT r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku, r.Sku
    016- FROM (SELECT r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku, r.Sku
    016+ , r.`Status`, r.Inventory AS 修改后可售数, r.OriginalInventory AS 原可售数, w.DynamicInventory AS SKU最新动态库存合计, r.Remark AS 补货队列日志
    017- , r.`Status`, r.Inventory AS 修改后可售数, r.OriginalInventory AS 原可售数, w.DynamicInventory AS SKU最新动态库存合计, r.Remark AS 补货队列日志
    017+ , r.FailureReason, date_add(w.LastModificationTime, INTERVAL 8 HOUR) AS 动态库存最新更新时间, date_add(r.lastReplenishmentTime, INTERVAL 8 HOUR) AS 补货队列最新执行时间, TIMESTAMPDIFF(hour, w.LastModificationTime, r.lastReplenishmentTime) AS 补货执行时间差
    018- , r.FailureReason, date_add(w.LastModificationTime, INTERVAL 8 HOUR) AS 动态库存最新更新时间, date_add(r.lastReplenishmentTime, INTERVAL 8 HOUR) AS 补货队列最新执行时间, TIMESTAMPDIFF(hour, w.LastModificationTime, r.lastReplenishmentTime) AS 补货执行时间差
    018+ FROM (SELECT CustomerId, Sku, SUM(AvailableNum) AS DynamicInventory, LastModificationTime
    019- FROM (SELECT CustomerId, Sku, SUM(AvailableNum) AS DynamicInventory, LastModificationTime
    019+ FROM p_product_warehouse_dynamicinventory
    020- FROM p_product_warehouse_dynamicinventory
    020+ GROUP BY CustomerId, Sku
    021- GROUP BY CustomerId, Sku
    021+ ) w
    022- ) w
    022+ JOIN (SELECT r.CustomerId, r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku
    023- JOIN (SELECT r.CustomerId, r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku
    023+ , r.OriginalInventory, r.Inventory, r.Remark, r.FailureReason, r.Sku
    024- , r.OriginalInventory, r.Inventory, r.Remark, r.FailureReason, r.Sku
    024+ , r.`Status`, r.LastModificationTime AS lastReplenishmentTime
    025- , r.`Status`, r.LastModificationTime AS lastReplenishmentTime
    025+ FROM pp_replenishment AS r
    026- FROM pp_replenishment AS r
    026+ JOIN (SELECT MAX(Id) AS Id
    027- JOIN (SELECT MAX(Id) AS Id
    027+ FROM pp_replenishment
    028- FROM pp_replenishment
    028+ WHERE CustomerId = 1
    029- WHERE CustomerId = 1
    029+ AND MarketId = 70
    030- AND MarketId = 70
    030+ AND StrategyId IN (180)
    031- AND StrategyId IN (180)
    031+ AND Time &gt;= DATE_SUB(NOW(), INTERVAL 72 HOUR)
    032- AND Time &gt;= DATE_SUB(NOW(), INTERVAL 72 HOUR)
    032+ AND BusinessType = 1
    033- AND BusinessType = 1
    033+ GROUP BY CustomerId, StrategyId, OrderSourceId, ProductId, SellerSku, Sku
    034- GROUP BY CustomerId, StrategyId, OrderSourceId, ProductId, SellerSku, Sku
    034+ ) p ON r.Id = p.Id
    035- ) p ON r.Id = p.Id
    035+ ) r ON w.CustomerId = r.CustomerId
    036- ) r ON w.CustomerId = r.CustomerId
    036+ AND w.Sku = r.Sku
    037- AND w.Sku = r.Sku
    037+ WHERE w.LastModificationTime &gt;= DATE_ADD(NOW(), INTERVAL -16 HOUR)
    038- WHERE w.LastModificationTime &gt;= DATE_ADD(NOW(), INTERVAL -16 HOUR)
    038+ AND w.LastModificationTime &lt;= DATE_ADD(NOW(), INTERVAL -10 HOUR)
    039- AND w.LastModificationTime &lt;= DATE_ADD(NOW(), INTERVAL -10 HOUR)
    039+ AND w.LastModificationTime &lt;= r.lastReplenishmentTime
    040- AND w.LastModificationTime &lt;= r.lastReplenishmentTime
    040+ ) a
    041- ) a
    041+ GROUP BY CASE WHEN a.补货执行时间差 &gt; 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END
    042- GROUP BY CASE WHEN a.补货执行时间差 &gt; 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END
    042+ ) A55_T_1_
    043- ) A55_T_1_
    043+ GROUP BY A55_T_1_.`补货情况`
    044- GROUP BY A55_T_1_.`补货情况`
    044+ ORDER BY T_AE3_3_ DESC
    045- ORDER BY T_AE3_3_ DESC
    045+ LIMIT 0, 1000
    046- LIMIT 0, 1000
    002- <p> 华为云慢top 10</p>
    002+ <p> 华为云慢sql top 10,查询时间:98秒</p>
    005- <p>
    005+ <p><br /></p>
    006- </p><div class="sql_tuning_advice_title-3b3aBp" style="margin:10px 0px 5px;padding:0px;color:#FF8833;font-family:HuaweiFont, Helvetica, Arial, 'PingFangSC-Regular';">索引优化建议:</div>
    006+ <div class="sql_tuning_advice_title-3b3aBp" style="margin:10px 0px 5px;padding:0px;color:#FF8833;font-family:HuaweiFont, Helvetica, Arial, 'PingFangSC-Regular';">索引优化建议:</div>
    007- <ol class="ng-scope" style="margin-left:0px;color:#252B3A;font-family:HuaweiFont, Helvetica, Arial, 'PingFangSC-Regular';"><li class="ng-binding ng-scope">建议在数据表<span class="warning_color-PMRVtN" style="color:#FF8833;">irobotbox_marketpublish.pp_replenishment</span>的<span class="warning_color-PMRVtN" style="color:#FF8833;">StrategyId,MarketId,BusinessType,CustomerId,Time</span>列上添加如下索引,以提高查询性能:
    007+ <ol class="ng-scope" style="margin-left:0px;color:#252B3A;font-family:HuaweiFont, Helvetica, Arial, 'PingFangSC-Regular';"><li class="ng-binding ng-scope">建议在数据表<span class="warning_color-PMRVtN" style="color:#FF8833;">irobotbox_marketpublish.pp_replenishment</span>的<span class="warning_color-PMRVtN" style="color:#FF8833;">StrategyId,MarketId,BusinessType,CustomerId,Time</span>列上添加如下索引,以提高查询性能:
    009- </li>
    009+ </li>
    010- </ol><p class="mt5 ng-binding ng-scope" style="color:#252B3A;font-family:HuaweiFont, Helvetica, Arial, 'PingFangSC-Regular';">注意:在业务高峰期,变更表结构存在风险,请谨慎操作!在业务低峰下班后操作</p>
    010+ </ol><p class="mt5 ng-binding ng-scope" style="color:#252B3A;font-family:HuaweiFont, Helvetica, Arial, 'PingFangSC-Regular';">注意:在业务高峰期,变更表结构存在风险,请谨慎操作!在业务低峰下班后操作</p>
    011-
    011+ <p>3.慢sql</p>
    012- <p>3.慢sql</p>
    012+ <p><br /></p>
    013- <p>
    013+ <pre class="ng-binding">SELECT A55_T_1_.`补货情况` AS T_A26_2_, SUM(A55_T_1_.`执行数量`) AS T_AE3_3_
    014- </p><pre class="ng-binding">SELECT A55_T_1_.`补货情况` AS T_A26_2_, SUM(A55_T_1_.`执行数量`) AS T_AE3_3_
    014+ FROM (SELECT CASE WHEN a.补货执行时间差 &gt; 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END AS '补货情况', COUNT(a.sku) '执行数量'
    015- FROM (SELECT CASE WHEN a.补货执行时间差 &gt; 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END AS '补货情况', COUNT(a.sku) '执行数量'
    015+ FROM (SELECT r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku, r.Sku
    016- FROM (SELECT r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku, r.Sku
    016+ , r.`Status`, r.Inventory AS 修改后可售数, r.OriginalInventory AS 原可售数, w.DynamicInventory AS SKU最新动态库存合计, r.Remark AS 补货队列日志
    017- , r.`Status`, r.Inventory AS 修改后可售数, r.OriginalInventory AS 原可售数, w.DynamicInventory AS SKU最新动态库存合计, r.Remark AS 补货队列日志
    017+ , r.FailureReason, date_add(w.LastModificationTime, INTERVAL 8 HOUR) AS 动态库存最新更新时间, date_add(r.lastReplenishmentTime, INTERVAL 8 HOUR) AS 补货队列最新执行时间, TIMESTAMPDIFF(hour, w.LastModificationTime, r.lastReplenishmentTime) AS 补货执行时间差
    018- , r.FailureReason, date_add(w.LastModificationTime, INTERVAL 8 HOUR) AS 动态库存最新更新时间, date_add(r.lastReplenishmentTime, INTERVAL 8 HOUR) AS 补货队列最新执行时间, TIMESTAMPDIFF(hour, w.LastModificationTime, r.lastReplenishmentTime) AS 补货执行时间差
    018+ FROM (SELECT CustomerId, Sku, SUM(AvailableNum) AS DynamicInventory, LastModificationTime
    019- FROM (SELECT CustomerId, Sku, SUM(AvailableNum) AS DynamicInventory, LastModificationTime
    019+ FROM p_product_warehouse_dynamicinventory
    020- FROM p_product_warehouse_dynamicinventory
    020+ GROUP BY CustomerId, Sku
    021- GROUP BY CustomerId, Sku
    021+ ) w
    022- ) w
    022+ JOIN (SELECT r.CustomerId, r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku
    023- JOIN (SELECT r.CustomerId, r.StrategyId, r.OrderSourceId, r.ProductId, r.SellerSku
    023+ , r.OriginalInventory, r.Inventory, r.Remark, r.FailureReason, r.Sku
    024- , r.OriginalInventory, r.Inventory, r.Remark, r.FailureReason, r.Sku
    024+ , r.`Status`, r.LastModificationTime AS lastReplenishmentTime
    025- , r.`Status`, r.LastModificationTime AS lastReplenishmentTime
    025+ FROM pp_replenishment AS r
    026- FROM pp_replenishment AS r
    026+ JOIN (SELECT MAX(Id) AS Id
    027- JOIN (SELECT MAX(Id) AS Id
    027+ FROM pp_replenishment
    028- FROM pp_replenishment
    028+ WHERE CustomerId = 1
    029- WHERE CustomerId = 1
    029+ AND MarketId = 70
    030- AND MarketId = 70
    030+ AND StrategyId IN (180)
    031- AND StrategyId IN (180)
    031+ AND Time &gt;= DATE_SUB(NOW(), INTERVAL 72 HOUR)
    032- AND Time &gt;= DATE_SUB(NOW(), INTERVAL 72 HOUR)
    032+ AND BusinessType = 1
    033- AND BusinessType = 1
    033+ GROUP BY CustomerId, StrategyId, OrderSourceId, ProductId, SellerSku, Sku
    034- GROUP BY CustomerId, StrategyId, OrderSourceId, ProductId, SellerSku, Sku
    034+ ) p ON r.Id = p.Id
    035- ) p ON r.Id = p.Id
    035+ ) r ON w.CustomerId = r.CustomerId
    036- ) r ON w.CustomerId = r.CustomerId
    036+ AND w.Sku = r.Sku
    037- AND w.Sku = r.Sku
    037+ WHERE w.LastModificationTime &gt;= DATE_ADD(NOW(), INTERVAL -16 HOUR)
    038- WHERE w.LastModificationTime &gt;= DATE_ADD(NOW(), INTERVAL -16 HOUR)
    038+ AND w.LastModificationTime &lt;= DATE_ADD(NOW(), INTERVAL -10 HOUR)
    039- AND w.LastModificationTime &lt;= DATE_ADD(NOW(), INTERVAL -10 HOUR)
    039+ AND w.LastModificationTime &lt;= r.lastReplenishmentTime
    040- AND w.LastModificationTime &lt;= r.lastReplenishmentTime
    040+ ) a
    041- ) a
    041+ GROUP BY CASE WHEN a.补货执行时间差 &gt; 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END
    042- GROUP BY CASE WHEN a.补货执行时间差 &gt; 1 THEN '补货执行异常' WHEN a.Status = 'normal' THEN '补货执行异常' ELSE '补货执行正常' END
    042+ ) A55_T_1_
    043- ) A55_T_1_
    043+ GROUP BY A55_T_1_.`补货情况`
    044- GROUP BY A55_T_1_.`补货情况`
    044+ ORDER BY T_AE3_3_ DESC
    045- ORDER BY T_AE3_3_ DESC
    045+ LIMIT 0, 1000</pre>
    046- LIMIT 0, 1000</pre>
  3. 2023-04-18 17:00:01, 由 程伟 编辑。
    修改了 指派给,旧值为 "chengwei",新值为 "yaojieyuan"。
  4. 2023-04-19 10:59:52, 由 姚杰远 完成。
    修改了 总计消耗,旧值为 "0",新值为 "0.5"。
    修改了 指派给 ,旧值为 "yaojieyuan",新值为 "chenshaojun"。
    修改了 实际完成,旧值为 "",新值为 "2023-04-19 10:58:57"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2023-04-19 10:59:52"。
    修改了 由谁完成,旧值为 "",新值为 "yaojieyuan"。
  5. 2023-10-31 14:53:16, 由 周杰 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "chenshaojun",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "zhoujie"。
    修改了 关闭时间,旧值为 "0000-00-00 00:00:00",新值为 "2023-10-31 14:53:16"。
    修改了 关闭原因,旧值为 "",新值为 "done"。
所属迭代 系统管理部 - 系统服务优化
所属模块 /
相关需求 暂无
指派给 Closed 于 2023-10-31 14:53:16
任务类型 后端
任务标签 初始
开发组 有品开发组
任务状态 已关闭
进度 100%
优先级 P2
关键词
抄送给 黄金龙 许瑞丰
由谁创建 陈少军 于 2023-04-18 15:45:34
由谁完成 姚杰远 于 2023-04-19 10:58:57
由谁取消 暂无
由谁关闭 周杰 于 2023-10-31 14:53:16
关闭原因 已完成
最后编辑 周杰 于 2023-10-31 14:53:16
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 0.5工时
预计剩余 0工时
预计开始 2023-04-18
实际开始 2023-04-19
截止日期 2023-04-19