我有一個打包為 JAR 檔案的 Spring Batch 應用程式,如下所示
java -Xms2048m -Xmx2048m -Ddivision=25 -Ddate= -Denv=dv -Dconn=45 -jar demo-jobs*.jar job-definition.xml jobName -next
我想優化整體執行時間,所以我試圖跟蹤所有方法的平均執行時間。我正在使用 Java 飛行記錄器。
我看到以下 Hibernate 方法執行率很高
- org.hibernate.query.Query.getResultList()
- Org.hibernate.query.internal.AbstractProducedQuery.list()
- Org.hibernate.query.SessionImpl.executeUpdate(String, QueryParameters)


這是什么意思?我如何優化這個?
uj5u.com熱心網友回復:
這意味著大量時間花在運行 SQL 查詢上,這在典型的 CRUD 應用程式中很常見。
Query.getResultList()涉及select查詢和SessionImpl.executeUpdate()涉及update或delete查詢。
為了了解發生了什么,您必須找到執行了哪些查詢。有很多方法可以做到這一點,但我最喜歡的兩個是:
- 您可以在 Hibernate 中記錄 SQL 陳述句,這將為運行的每個查詢生成一個日志。根據您的應用程式,這可能會記錄大量查詢,可能太多而沒有任何用處。
- 您可以使用像YourKit這樣的分析器(一種商業產品,但它有 15 天的試用期,應該足以解決您的問題)。除了 CPU/記憶體分析,YourKit 還可以監控通過 JDBC 運行的查詢。它基本上會列出所有已執行的查詢、每個查詢的運行次數以及執行它們的方法。
獲得所有執行的 SQL 查詢的詳細資訊后,您必須檢查它是否與您的應用程式應該執行的操作一致。
可能出現的問題:
- N 1 查詢
where子句中使用的列上缺少索引(請注意,某些資料庫上不會自動索引外鍵)- 一個回圈從某個配置表中取資料的程序,而不是一開始就取一次資料
- ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311396.html
