|
|
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
У нас используется пул c3p0. До недавнего времени все работало, но сейчас при хорошей нагрузке он начинает конкретно тупить. Попытались перейти на пул proxool, но у него оказалась другая проблема - не удалось настроить его так, чтобы он закрывал отработавшие statement. Результат - max open cursor. Помогите, плз. Очччень надо быстро решить данную проблему! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2006, 16:21 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
А в чем выражается "тупить"? КОНКРЕТНО? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2006, 19:00 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
Резкое замедление работы. При этом база не загружена и машина с tomcat тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2006, 19:16 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
Pomytkin EvgenyРезкое замедление работы. Это просто перевод на русский. Тоже ничего не говорит. c3p0 - проверенный пул, у меня в боевой системе управляет 50 соединениями без каких-либо проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2006, 20:51 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
У нас тоже 50 коннектов - и такая беда только неделю продолжается. Про то, что это не предел для с3р0 я знаю. но у нас странная ситуация: в пик нагрузки сервер сначала замедляется и работает все медленнее и медленнее. Буквально за 10 минут он замедляется в десятки раз, т.е. на каждый клик мышки реакция до 10 - 15 мин при том, что раньше - максимум 3 сек. При этом база не нагружена и машина с tomcat не загружена. Почему я говорю, что скорее всего виноват с3р0? Заменил на proxool и все стало работать нормально, пока не стала вылетать периодически ошибка "max open cursor" - в с3р0 этого не было. Уж очень правдободобно получается: заменил пул - исчезло торможение. Кстати, есть такая фича что у с3р0, так и у proxool : они по какой то мне неведомой причине после отработки запроса курсор не закрывают. Хотя hibernate сессии я говорю закрываться. При этом в с3р0 не наталкивается на проблемы, а у proxool возникает ошибка "max open cursor". Можно ли закрывать курсоры в с3р0 или proxool ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2006, 21:49 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
Я Вам посоветую найти и привинтить p6spy. Погоняете один поток, посмотрите, что делается с базой (какие запросы выполняются, в какой последовательности и в какое время, что закрывается, а что нет). Наверняка найдете какие-нибудь проблемы с вашей настройкой или с программным кодом. Лучше один раз увидеть. http://www.p6spy.com/download.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 10:29 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
Проблема оказалась в том, что по каким то непонятным причинам становится очень много открытых курсоров. Это приводит к тому что когда достигается предел открытых курсоров на сессию, с3р0 начинает ожидать закрытия курсоров, а proxool смело забивает на эту проблему(и я получаю еще бОльшую проблему). Отсюда вопрос: как закрывать курсоры в hibernate? У сессии close() делается, но этого надо полагать не достаточно. Уточнение: у нас используются в большом количестве SQLQuery. СУБД - Oracle, AppServer - Tomcat, Pool - c3p0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 11:50 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
Pomytkin EvgenyУточнение: у нас используются в большом количестве SQLQuery. Понятно. Создаете SQLQuery, получаете List, ScrollableResults или Iterator. Если получили List, ничего делать не надо - List есть List, он заполнился чем получилось и курсор закрылся. А вот если вы получили ScrollableResults или Iterator, будьте любезны его ЯВНО закрыть. Это есть в документации (): авторDue to a silly limitation of the JTA spec, it is not possible for Hibernate to automatically clean up any unclosed ScrollableResults or Iterator instances returned by scroll() or iterate(). You must release the underlying database cursor by calling ScrollableResults.close() or Hibernate.close(Iterator) explicity from a finally block. (Of course, most applications can easily avoid using scroll() or iterate() at all from the CMT code.) Короче, для итераторов и скроллеров просто вызываете Hibernate.close(...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 21:05 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
Забыл дописать: ... сразу после того как отработали с итератором или скроллером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2006, 21:09 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
Помогло? Хотелось бы убедиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2006, 19:46 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
У меня вот такой код: Код: plaintext 1. 2. Поэтому Hibernate.close(...) как мне кажется для данного случая не актуален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 10:23 |
|
||
|
Пул соединений в hibernate
|
|||
|---|---|---|---|
|
#18+
Для List не актуален. Курсор для List закрывается сразу после того, как List заполнен результатами запроса. А вот курсоры для Iterator и ScrollableResults закрываются только явно - Hibernate.close() (закрывает данный курсор) или Session.clear() (закрывает все открытые курсоры). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 10:57 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33630868&tid=2149745]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 475ms |

| 0 / 0 |
