1 問題描述
當(dāng)一次性生成大量優(yōu)惠券時(shí)礼殊,發(fā)現(xiàn)后臺(tái)cpu使用率突然很高驹吮,無法成功生成券。
2 排查過程
- 發(fā)現(xiàn)DAO層的Mapper.xml配置文件中晶伦,插入的SQL配置如下:【不正车】
<insert id="batchInsert" useGeneratedKeys="true" keyProperty="id" parameterType="java.util.List">
<foreach collection="list" item="model" separator=",">
insert into promotion_coupon_user (id,template_id, coupon_id...)
values
(#{model.id},#{model.templateId}, #{model.couponId}...
</foreach>
</insert>
- 上層應(yīng)用程序插入優(yōu)惠券一次性插入50W+條數(shù)據(jù),沒有做數(shù)據(jù)插入切分婚陪;【不正匙逦郑】
3 解決問題
- 修改DAO層的Mapper.xml配置文件中,插入的SQL:
<insert id="batchInsert" useGeneratedKeys="true" keyProperty="id" parameterType="java.util.List">
insert into promotion_coupon_user (id,template_id, coupon_id...)
values
<foreach collection="list" item="model" separator=",">
(#{model.id},#{model.templateId}, #{model.couponId}...
</foreach>
</insert>
- 修改上層應(yīng)用泌参,數(shù)據(jù)量大時(shí)脆淹,一定要進(jìn)行數(shù)據(jù)切割插入;
4 問題總結(jié)
- 為了提升效率沽一,數(shù)據(jù)能一次提交不做多次提交盖溺;
- 能一次插入解析sql不要多次提交解析sql;
- 插入數(shù)據(jù)量太大時(shí)铣缠,需要程序預(yù)先切割數(shù)據(jù)烘嘱;