簡體   English   中英

JBoss准備的語句太慢

[英]JBoss prepared statement too slow

我有一個問題,想獲得一些幫助。
我有從Java運行查詢。

SELECT DISTINCT field1, field1
from tblTableA WITH (NOLOCK)
WHERE criteriaField='CONSTANT TEXT'

我用jpa運行

  Query qry = entMgr.createNativeQuery(myQry) ;
  List sqlResult = qry.getResultList() ;

現在,該qry.getResultList()需要太多時間才能運行-75秒或更長時間。 是的,它返回近70萬條記錄,但是使用ejb2在少於5秒的時間內運行同一查詢在Weblogic 10上

任何人都可以幫助解決該問題,似乎可能缺少我的配置,或者我沒有遵循的技術。

使用jbosscmp-jdbc.xml有一些原因。 我的設置中沒有這個功能,但是發現有一個可以配置的延遲加載功能。 現在,我不確定如何在xml文件中配置正在運行的查詢。 另外,可以將其與注解而不是xml文件一起使用嗎?

我會嘗試在非事務方法內運行此查詢:

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
List getResults(..){
   Query qry = entMgr.createNativeQuery(myQry) ;
   return qry.getResultList() ;
}

有時,這取決於環境,這是不允許的,主要用於優化預期具有較大結果集的查詢,並且稍后將由PersistenceContext管理(因此基本上在使用HQL而不是本機時)

但我會嘗試一下。

您正在事務范圍內執行此選擇查詢。 我在Jboos的網站上發現了一張舊的JIRA票 如票證所示,在flush附近有潛力。 如果使用EJB3執行查詢,則將對使用本機查詢檢索到的所有對象自動執行或嘗試進行flush 這個想法似乎是避免從數據庫中獲取過時的對象。 但是在您的情況下,它不適用。 將刷新模式設置為COMMIT ,看看性能是否有所提高。

query.setFlushMode( FlushModeType.COMMIT );

還關閉Hibernate日志記錄,看看是否有任何區別。

暫無
暫無

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

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