| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > hiberante, jdbc скорость выполнения запросов |
| Автор: slippery 1.10.2010, 15:16 |
| Добрый день. Я занимаюсь разработкой 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 1.10.2010, 15:58 |
| slippery, На что бы я обратил внимание: Когда вы работаете из консоли -от имени какого пользователя вы запускаете хранимую процедуру? И от имени какого пользователя работает Hibernate ? Нет ли ограничения на ресурсы у на уровне пользователя? |