[英]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.