Связь между сеансами JDBC и процессами Oracle - PullRequest
8 голосов
/ 08 марта 2012

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

Два вопроса:

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

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

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

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

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

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

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

0 голосов
/ 08 марта 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

...