Связь между сеансами JDBC и процессами Oracle

У нас возникла проблема с созданием слишком большого количества процессов Oracle (более 2000), когда количество соединений ограничено 1100 (с использованием C3P0).

Два вопроса:

  • Какая связь между процессом Oracle и соединением JDBC? Создается ли один процесс Oracle для каждого сеанса? Создается ли он для каждого оператора JDBC? Совсем нет отношений?

  • Вы когда-нибудь сталкивались с таким сценарием, когда вы создаете больше процессов, чем соединений JDBC?

Любой комментарий будет действительно оценен.


person Juan    schedule 08.03.2012    source источник


Ответы (2)


На одно соединение приходится один сеанс. Похоже, у вас есть утечка соединения, где-то вы открываете новое соединение и не закрываете его должным образом. Одна из возможностей заключается в том, что вы открываете, используете и закрываете соединение внутри блока try и обрабатываете исключение в блоке catch или возвращаетесь раньше по какой-либо причине. Если это так, вам нужно убедиться, что закрытие соединения выполнено в finally, иначе этого может не произойти, оставив соединение (и, следовательно, сеанс) зависшим. Открытие двух соединений в одной и той же области без явного закрытия между ними также может сделать это.

Я не знаком с C3PO, поэтому не знаю, как обрабатываются соединения или где и как накладывается ограничение в 1100; если у него (или у вас) есть пул соединений, а 1100, на которые вы ссылаетесь, является максимальным размером пула, то это не похоже на проблему, поскольку вы нажмете на ограничение пула до ограничения сеанса.

Вы можете заглянуть в v$session, чтобы убедиться, что все сеансы исходят от JDBC, и ничего другого не подключается.

person Alex Poole    schedule 08.03.2012

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

Вы можете проверить это, выполнив

select server from v$session

Дополнительная информация об архитектуре процессов

http://docs.oracle.com/cd/B19306_01/server.102/b14220/process.htm

Режим общего/выделенного сервера

http://docs.oracle.com/cd/B10501_01/server.920/a96521/manproc.htm

person Eggi    schedule 08.03.2012