Hibernate Java пакетная операция тупик - PullRequest
1 голос
/ 21 июля 2011

У нас есть приложение J2EE, созданное с использованием Hibernate и Struts.У нас есть реализация RMI для бизнес-функциональности.

В нашем приложении около 250 одновременно работающих пользователей собираются загружать пакеты, содержащие огромные данные с именем BATCHDET.Эти пакеты сначала проверяются на соответствие 30 проверкам, а затем они вставляются в таблицы, где у нас есть родительские и дочерние отношения.Похоже есть другая операция, которая нуждается в огромной обработке.например, печать и т. д.

Существует одна таблица, содержащая 10 миллионов записей, к которой получают доступ для всех типов транзакций, и каждый процесс вставляет и обновляет эту таблицу.Эта таблица стала узким местом.Мы также добавили все необходимые индексы.

После 30 минут работы система JVM использует все выделенные 6 ГБ ОЗУ и переходит в состояние отсутствия ответа.Когда мы попытались выяснить первопричину, мы поняли, что на сайте базы данных была блокировка, и все запросы на обновление, относящиеся к таблице BATCHDET, находились в состоянии ожидания.Мы перепробовали все, что могли, но не повезло.

Система работает нормально при попытке 50 одновременных пользователей, но умирает 250 ожидаемых пользователей.BATCHDET имеет большую зависимость практически от каждого модуля, не в силах переписать реализацию, не могли бы вы предоставить быстрое исправление к нему.

у нас есть разграничение транзакций на основе потоков в Hibernate, реализованное с помощью HIbernateUtil.java.Изоляция транзакции - ReadCommitted.Есть ли способ, где мы можем определить отсутствие блокировки для всех операций поиска.у нас есть оракул 10G RDBMS.

Дайте мне знать, если вам понадобятся какие-либо другие данные.

~ Amar

1 Ответ

0 голосов
/ 22 июля 2011

"Есть ли способ, которым мы можем определить отсутствие блокировки для всех операций поиска. У нас есть СУБД oracle 10G."

Oracle не блокирует выборки, поэтому, по сути, она уже установлена.

Oracle также блокируется на уровне строк, поэтому вам нужно перестать думать о таблице в целом и начать думать об отдельных строках.

Вам нужно поговорить с вашим администратором баз данных.В Oracle есть целый ряд вещей для мониторинга как на уровне системы, так и на уровне сеанса.Администратор базы данных сможет посмотреть на v $ session и рассказать, что ждут отдельные сессии.Могут быть блокировки, это может быть горлышко диска, это может быть конфликт индекса или база данных находится в режиме ожидания и вся неэффективность находится на уровне java.

...