[問題]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