powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / OpenSessionInView и ConnectionPool
8 сообщений из 8, страница 1 из 1
OpenSessionInView и ConnectionPool
    #38504840
steevy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! Посоветуйте с решением или идеями.

Есть проект на java 1.6 + hibernate 3.1 + wicket 1.4 + postgresql 8.3.

В проекте используется паттерн OpenSessionInView. Все хорошо, удобно, никаких заморочек.

Но ровно до того момента, как в проекте возрастает пиковая нагрузка: например 3000 запросов с секунду. В этом случае, много запросов начинают "тупить" на конекшн пуле. При этом известно, что большинство реквестов реально базу не используют, т.к. 95% инфы уже есть в кеше хибернейта.

Т.е., по-быстрому, хочется просто в конекшн пуле увеличить число возможных конектов до 1000 :) Но они могут однажды "положить" базу. Сейчас разрешено 100 конектов, но обычно используется одновременно 3-4, и на самой базе нагрузка почти всегда 0.

Другой вариант, использовать какой-то "враппер чего-то", который бы давал работать хибернейту в его кешем на чтение, а вот если требуется непосредственно БД, то тогда уже открывать реальный конект к базе и вот их уже максимум будет 100.

Сдается мне проблема известная, но может есть какое-то готовое решение? Или идеи как реализовать этот "враппер чего-то"? :)

Спасибо заранее!
...
Рейтинг: 0 / 0
OpenSessionInView и ConnectionPool
    #38504852
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Read-only транзакции используется? Я не вижу причин почему бы не увеличить колличество соединений в пуле.
Ну, и Open-Session-In-View, конечно же, одна из причин невысокой производительности.
...
Рейтинг: 0 / 0
OpenSessionInView и ConnectionPool
    #38505070
steevy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, что такое "Read-only транзакции"? Работа с базой полноценная: и инсерты, и апдейты, и селекты :)

Просто большая для подавляющей части запросов, вся инфа есть либо в кеше хибернейта, либо в кеше самого приложения.

Т.е. отвечая самому себе, да, увеличение конектов в пуле не должно привести к катастрофе. Просто выставить им время жизни при бездействии. Чтобы в пике они создавались в пуле, а потом закрывались, если долго не используются.
...
Рейтинг: 0 / 0
OpenSessionInView и ConnectionPool
    #38505084
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
steevyBlazkowicz, что такое "Read-only транзакции"? Работа с базой полноценная: и инсерты, и апдейты, и селекты :)
Т.е. просмотра каких-то данных не предполагается? Любая бизнес-транзакция меняет состояние в базе?

steevyПросто большая для подавляющей части запросов, вся инфа есть либо в кеше хибернейта, либо в кеше самого приложения.

Но кеш ведь ничего не гарантирует. Сейчас данные есть, а потом нет. Транзакция ведь всё равно нужна. А транзакцию обеспечивает только JDBC, если не используется отдельный менеджер транзакций.

steevyТ.е. отвечая самому себе, да, увеличение конектов в пуле не должно привести к катастрофе. Просто выставить им время жизни при бездействии. Чтобы в пике они создавались в пуле, а потом закрывались, если долго не используются.
Просто если использовать Read-Only транзакции, то JDBC драйверу и базе должно быть проще справиться с бОльшим количеством этих самых соединений.
...
Рейтинг: 0 / 0
OpenSessionInView и ConnectionPool
    #38505175
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
steevy,
Если заменить пул на другой и протестить?
...
Рейтинг: 0 / 0
OpenSessionInView и ConnectionPool
    #38505192
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
steevy,
Протестируйте более подробно пул. Если реальных нужных к оннектов 4 штуки, то как можно завалить базу выставив МАХ коннектов 1000? Непонятно.
...
Рейтинг: 0 / 0
OpenSessionInView и ConnectionPool
    #38505219
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
steevy,

Надо бы ещё логи посмотреть, когда именно создаётся connection. Потому что вот я смотрю SessionImpl и там, вроде, везде реализовано так чтобы Connection создавался (брался из пула) в самый последний момент.
Посмотрите классы CMTTransaction|JDBCTransaction|JTATransaction
Если у вас работает JDBCTransaction, то очевидно, что connection берется из пула уже в начале транзакции. Ведь без этого транзакционность не обеспечить вообще никак.
CMTTransaction позволяет вклинится в этот процесс, например, в случае Read-Only транзакции не трогать JDBC Connection, пока он не будет реально нужен.
JTATransaction позволяет использовать JTA менеджеры транзакций, которые тоже не будут трогать ваш connection pool в начале транзакции.
...
Рейтинг: 0 / 0
OpenSessionInView и ConnectionPool
    #38511468
steevy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, увеличил число конектов для пробы до 300. Начал следить во время нагрузки. Почти все время были свободные коннекты в пуле, а вот память в пике выделялась так быстро, что GC ее, видимо, не успевал очищать. Поэтому каждые 5 минут вызывался FullGC секунд на 40.

Так что не в том месте я искал корень проблемы, буду рыть сам викет. Но все равно спасибо!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / OpenSessionInView и ConnectionPool
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]