簡體   English   中英

性能OpenJPA查詢(3000+記錄)很慢

[英]Performance OpenJPA query (3000+ records) is slow

我正在使用帶有buildin OpenJPA 1.2.3和Oracle數據庫的Websphere Application Server 7。 我有以下實體:

    @NamedNativeQuery(name=Contract.GIVE_ALL_CONTRACTS, 
        query="SELECT number, name \n" +
          "FROM contracts \n" +
          "WHERE startdate <= ?1 \n" +
          "AND enddate > ?1",
          resultSetMapping = Contract.GIVE_ALL_CONTRACTS_MAPPING)
    @SqlResultSetMapping(name = Contract.GIVE_ALL_CONTRACTS_MAPPING, 
        entities = { @EntityResult(entityClass = Contract.class, fields = {
          @FieldResult(name = "number", column = "number"),
          @FieldResult(name = "name", column = "name")
        })
    })
    @Entity
    public class Contract {
      public static final String GIVE_ALL_CONTRACTS = "Contract.giveAllContracts";
      public static final String GIVE_ALL_CONTRACTS_MAPPING = "Contract.giveAllContractsMapping";

      @Id
      private Integer number;
      private String name;

      public Integer getNumber() {
        return number;
      }
      public String getName() {
        return name;
      }
    }

以下代碼檢索合同:

Query query = entityManager.createNamedQuery(Contract.GIVE_ALL_CONTRACTS);
query.setParameter(1, referenceDate);

List contracts = query.getResultList();
entityManager.clear();

return contracts;

檢索到的合同將傳遞給Web服務。

在Oracle開發人員中執行此查詢大約需要0.35秒才能獲得3608條記錄。 對query.getResultList()的調用大約需要4秒。

使用實體的構造函數中的記錄器,它記錄了使用相同時間戳創建的大約10-20個實體。 然后0,015秒它做了別的事情。 我想OpenJPA的東西。

有沒有辦法加快OpenJPA? 或者是唯一的緩存解決方案?

對象創建可能在性能影響方面有其公平的份額。 在服務器中運行代碼時,您不僅要查詢數據庫,還要為每行分配內存並創建新的Contract對象。 擴展堆或垃圾回收周期可能會計入您觀察到的空閑時段。

我建議您瀏覽一下OpenJPA文檔,了解如何處理大型結果集

我建議你下載VisualVM並為所涉及的軟件包設置一個分析。 VisualVM可以顯示在不同方法中花費的時間,理論上可以總計達到0.35秒。 您將能夠分析代碼,OpenJPA和網絡IO之間的總時間分布。 這將幫助您識別瓶頸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM