mysql bulk存储过程_记一次生产环境存储过程优化的过程42秒006秒

1. 概述

2.分析存储过程:

3、查看表数据量和定义

4、改写sql查看执行计划

5、考虑update开并行

6、应用bulk collect优化

1. 概述

在拿awr报告时发现有一个存储过程效率很慢,执行要很长时间,所以在测试环境模拟,开始了我的优化之路..下面写一下我的整体优化步骤和优化后的效果。

1.存储过程如下:

通过awr报告定位到这条问题存储过程。dcb932111dd8e0835d65f3a97cd74c41.png9ec29cbb8c35ab0ad214f789bdb86e88.png

推荐一个艿艿写的 6000+ Star 的 SpringBoot + SpringCloud + Dubbo 教程的仓库:https://github.com/YunaiV/SpringBoot-Labs

2.分析存储过程:

调试后分析大概需要42秒。ae0f56517eddd4b1ab291f0b57c03c01.png

推荐一个艿艿写的 3000+ Star 的 SpringCloud Alibaba 电商开源项目的仓库:https://github.com/YunaiV/onemall

3、查看表数据量和定义

数量级为144万a8ef5bd2915eb45d13f965907ea439ca.png

表定义如下:4daa6641daea00ae8826a4a762301568.png

4、改写sql查看执行计划

因为update部分耗时比较多,所以考虑改写成select看有没走索引。select updatetime,sendtootm from Tab_TempDriverScan

 where ScanWay = '1' and ShipmentNumber = v_shipmentnumber and LPN = idx.LPN and SKU = idx.SKU;ef5315433e50a75e27415e39ac651bc4.png

这里用了索引范围扫描,继续下一步。

5、考虑update开并行

**

**update /*+ parallel(Tab_TempDriverScan,8) */ Tab_TempDriverScan set UpdateTime = SYSDATE, SendToOTM = '1'

 where ScanWay = '1' and ShipmentNumber = v_shipmentnumber and LPN = idx.LPN and SKU = idx.SKU;1542767b664ae625182cd29c7c0ef3fd.png

减少了12秒,但是还不是很理想。

6、应用bulk collect优化

改写后如下e3eba9013b0879604c8a6ca53c22821a.png

核心脚本:TYPE Tab_TempDriverScan_rec_type IS RECORD --声明记录类型

(

v_shipmentnumber Tab_TempDriverScan.shipmentnumber%TYPE,

v_power_unit Tab_TempDriverScan.power_unit%TYPE,

v_IsSend Tab_TempDriverScan.IsSend%TYPE);

TYPE nested_Tab_TempDriverScan_type IS TABLE OF Tab_TempDriverScan_rec_type; --声明记录类型变量

Tab_TempDriverScan_tab nested_Tab_TempDriverScan_type;

...................

LOOP

fetch header1 BULK COLLECT

into Tab_TempDriverScan_tab; --应用bulk collect

EXIT WHEN header1%NOTFOUND;

........................

测试分析c4534644970b1074c25b93a17c114544.png

这时候时间只需要0.06秒,性能获得了很大提升,到这里就剩下后面上生产测试验证的环节了,这步就忽略啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值