![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| slippery |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.7.2007 Репутация: нет Всего: нет |
Добрый день. Я занимаюсь разработкой web-приложений на java в качестве веб-сервера использую tomcat, также использую такие фрэймворки как spring, hibernate(как реализация EntityManger) и СУБД PostgreSQL. В последнее время по работе мне приходиться писать хранимые процедуры занимающие разбором огромного количества строк. Время выполнения такой процедуры если её запустить из консоли или pgadmin'a составляет минуту-две, процесс субд «сжирает» весь процессор и не отпускает его пока не будет выполнен парсинг всех строк. Однако если я выполняю вызов хранимки средствами hibernate из web-приложения: EntityManager.createNativeQuery(query, class) , где query — запрос, а class- класс куда «мапиться» результат, то процесс субд выполняющий данную хранимку становиться как бы «пассивным», то есть он «сжирает» не весь процессор, а процентов 5-10 и соответственно выполняется уже не минуту, а 10 минут, что совершенно недопустимо. Особенно если параллельно вызывается много таких хранимых процедур. Отсюда возникает вопрос почему так происходит, как это исправить и от чего это зависит, от самого hiberanate или драйвера jdbc? Возможно нужно определенным образом как-нибудь настроить тот же hiberante ибо щас я в persistence.xml указал просто:
<persistence-unit name="" transaction-type="RESOURCE_LOCAL"/>, а СУБД подключаю как бин : <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.postgresql.Driver"/> …................................................................................................................ </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="false"/> <property name="generateDdl" value="false"/> <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect"/> </bean> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> В итоге мне нужно сделать чтоб при вызове хранимок из java они выполнялись так же по скорости как и из консоли(сжирали весь проц и быстро работали) или pgadmin'а иначе весь проект оказывается нерентабельным из-за медленной скорости работы. Заранее благодарен за вашу помощь. |
|||
|
||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 18 Всего: 73 |
slippery,
На что бы я обратил внимание: Когда вы работаете из консоли -от имени какого пользователя вы запускаете хранимую процедуру? И от имени какого пользователя работает Hibernate ? Нет ли ограничения на ресурсы у на уровне пользователя? -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |