我們有使用Hibernate和struts構建的J2EE應用程序。我們有基於RMI註冊表的業務功能實施。Hibernate Java批處理操作死鎖
在我們的應用程序中,大約250個併發用戶將上傳包含名爲BATCHDET的大量數據的批次。這些批次首先通過30個驗證進行驗證,然後將它們插入到有父母和子女關係的表格中。類似的還有其他需要大量處理的操作。像打印等
有一個表包含1000萬條記錄,它被訪問的所有類型的交易和每個進程插入和更新此表。這張桌子已成爲瓶頸。我們也添加了所有必需的索引。
運行30分鐘後,系統JVM利用所有分配的6GB RAM並進入無響應狀態。當我們試圖找出根本原因時,我們意識到數據庫站點存在鎖定,並且與BATCHDET表相關的所有更新查詢處於等待狀態。我們嘗試了所有可能但沒有運氣的事情。
使用50個併發用戶嘗試時系統運行平穩,但與預期的250個用戶一起死亡。 BATCHDET對幾乎每個模塊都有很大的依賴性,而不是重新編寫實現的心情,請您提供快速解決方案。
我們在Hibernate中使用HIbernateUtil.java實現基於線程的事務劃分。事務隔離是ReadCommitted。有沒有什麼辦法可以讓我們爲所有的搜索操作定義不鎖。我們有Oracle 10G RDBMS。
讓我知道你是否需要任何其他細節。
〜阿馬爾
有多少線程正在同時訪問數據庫?你使用連接池嗎?你有多少個連接池?更新失敗並給出重試選項的機會? – Olaf