[问题]spring jdbctemplae batchUpdate效能问题

楼主: u9423504 (缘投农夫)   2023-04-01 22:40:23
各位前辈/大神 好:
目前使用spring boot MVC开发后端web程式,使用jdbctemplate写数据库程式,
用到其batchUpdate方法批次更新5万笔资料,共花了26.443秒,执行效能不是很好,
说明如下:
1.软件版本说明:
spring boot 3.0.2
spring-jdbc 6.0.4
mssql-jdbc 12.2.0
数据库 微软SQL Server 2019 Express
作业系统Windows 10
2.程式码:
StocksRepository.java
仅列出batchUpdate方法的程式码
public void batchUpdate(List<stock> stocks) {
jdbc_template.batchUpdate(
"update stocks set amount = ? where parts_number = ?",
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps,int i)
throws SQLException{
ps.setString(1,stocks.get(i).getAmount());
ps.setString(2,stocks.get(i).getParts_number());
}
public int getBatchSize(){
return stocks.size();
}
}//end BatchPreparedStatementSetter
);//end jdbctemplate batchupdate
}
作者: lycantrope (阿宽)   2023-04-02 09:40:00
rewriteBatchedStatements=true
作者: surimodo (好吃棉花糖)   2023-04-02 12:34:00
你最后那个只是把一个大List拆成小List又串一起处理
作者: achaos (热~~~~)   2023-04-02 12:48:00
parts_number有设定index吗?
作者: fgh81113 (阿景)   2023-04-02 13:50:00
batch你要设定一次处理几笔
楼主: u9423504 (缘投农夫)   2023-04-02 14:26:00
database talbe parts_number有设定索引回fgh81113:batch是设定5万笔,共花26秒,效能不好。
作者: achaos (热~~~~)   2023-04-02 16:20:00
batchUpdate有一个函数可以放batctSize,改成500看看batchSize,我记得建议是设定500~1000
作者: kentyeh (kent)   2023-04-02 21:33:00
建议自己处理commit时机,可考虑每仟笔commit 一次
作者: fgh81113 (阿景)   2023-04-03 23:34:00
原程式码看起来没什么问题 索引也设了sql server还有一招 "聚集索引 非聚集索引"但这招可能不是你说想调整就调整的方式
作者: mybluesky (天族)   2023-05-22 23:04:00
请将更新资料放另一暂存表,一次更新原表数据
作者: sw12 (专注.幽默)   2023-06-26 14:36:00
改r2dbc

Links booklink

Contact Us: admin [ a t ] ucptt.com