2012-06-11 46 views
1

我有一個在JBoss 6.1(Hibernate 3.6)中運行正常的Query。這是一個簡單的兩個表連接,返回955條記錄。當我在JBoss 7.1.1中部署相同的.war文件時,性能顯着下降(至少一個數量級)。下面是該查詢:什麼是在JBoss 7.1.1(Hibernate 4.x)中殺死JPA查詢性能?

SELECT c.uid, c.name, -1, c.file_Id, cs.error, cs.is_Error, c.parent_Uid, c.job_Id, c.description 
FROM stage.Classification_Status cs, stage.Classification c 
WHERE cs.is_Error = true AND cs.classification_Id = c.id AND c.job_Id = 3001;  

我一直無法判斷哪些Hibernate的版本在JBoss中7.1.1捆綁,所以我不知道如何提交錯誤針對其優化版本。

有沒有其他人看到這種性能從Hibernate 3.6移到4.x?任何想法是什麼造成的?

+1

我假設在兩臺服務器上生成相同的查詢?如果發送了相同的SQL查詢,則結果必須位於較高級別的某處。錯誤地配置了'DataSource' /缺少緩衝或不緩存?或許N + 1問題發生了?你確定沒有額外的流量發送到數據庫?你有沒有嘗試分析? –

+0

時間花在query.getResultList()上。我從JBoss 7.1(它有性能問題)中取出Hibernate生成的查詢,並直接針對同一個數據庫運行它,並且該查詢立即返回955結果。這不是生成的查詢,而是JBoss 7/Hibernate 4.x在結果集中執行的操作。 –

回答

0

你記錄太多了嗎?

因爲這確實需要時間,所以如果你不記錄,性能會更好。

我那裏有一個日誌調用一個servlet,即根據螢火蟲/火狐,響應在1毫秒沒有記錄,2毫秒文件只記錄,3毫秒文件和控制檯登錄。 And 1,270 ms當我登錄955次!

那些日誌記錄的時間是來自多次嘗試中的最好時間,但並不經常。另一方面,沒有記錄的1ms更頻繁發生。