Подтвердить что ты не робот

Связь между сеансом Oracle и пулом соединений

Позвольте мне сначала объяснить настройку.

У нас есть сервер oracle, работающий на 2 ГБ оперативной памяти. У экземпляра Db параметр инициализации "сеансы" установлен на 160.

У нас есть приложение, развернутое на Websphere 6.1. Настройки пула подключений: Min 50 и Max 150.

Когда мы запускаем Load test на 40 пользователей (одновременно, используя jMeter), все идет хорошо. Но когда мы увеличиваем совпадающих пользователей до Beyond 60, Oracle бросает и исключает, что у него нет сессий.

Мы проверили приложение на наличие каких-либо утечек соединения, но не смогли найти.

Значит ли это, что concurrency из 40 - это то, что может сделать эта настройка? Увеличивает ли сеанс/процесс Oracle единственный способ получить более высокий concurrency?

Как точно связаны сеансы DB и Connection в пуле соединений? По моему мнению, соединения не могут превышать сеансы, и поэтому установка пула Max Connection на большее, чем сеансы, может не иметь особого значения. Это правильно?

4b9b3361

Ответ 1

Просмотрите book в книгах Google. Это объясняет различия между соединениями и сеансами.

Ответ 2

Metalink дает следующий совет о параметре SESSIONS:

Рекурсивные сеансы являются неотъемлемой частью нормального функционирования RDBMS. Невозможно определить каждое обстоятельство, которое потребует таких сессий, но в целом, если пользовательская операция требует манипуляция словарем данных объектов, то рекурсивные сеансы могут создайте. Чтобы сделать простой пример, скажем, вы создаете таблицу во время входа в систему как обычный пользователь. За сцены, это должно вставлять строки в obj $, tab $и т.д., которые принадлежат Пользователь SYS. Поскольку обычный пользователь не имеют права вставлять в эти объектов, рекурсивный сеанс который регистрируется как SYS.

Решение:

Увеличьте параметр SESSIONS.

Рекомендация состоит в том, чтобы сохранить 50% значение SESSIONS для рекурсивного сессий. Так, например, если это ожидается 30 сеансов клиентов откройте, затем установите параметр SESSIONS до 60.

Таким образом, в зависимости от того, что делает веб-страница и ваш пользовательский процесс, это может частично объяснить, что вы видите.

Ответ 3

Используются ли все ваши подключения с использованием одной и той же учетной записи? Если это так, вы можете проверить, есть ли у вас ограничение для каждого пользователя для этой учетной записи пользователя.

Кроме того, вы имеете лицензию на более чем 40 соединений? (Проверьте, установлен ли в файле параметров LICENSE_MAX_SESSION)

Ответ 4

Сессионный пул управляется на стороне клиента. Он не знает (или не контролирует), сколько сеансов позволит база данных.

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

Пул соединений не должен использовать все разрешенные подключения. Это позволит подключить другие идентификаторы. Если у вас есть приложение, использующее USER_1, вы должны установить пул соединений для использования некоторого количества разрешенных подключений, но оставить достаточно соединений для... О, скажем, DBA для входа.

- Изменить -
Процессы, вероятно, запускаются до того, как ваш пул соединений будет удален.

SQL> show parameter processes

NAME                                 TYPE        VALUE
--------------------------------------------------------------------------------
processes                            integer     40

Это общее количество разрешенных процессов Теперь посмотрим, сколько из них уже используется - многие из них - фоновые процессы, о которых вы никогда не подумали.

SQL> select count(*) from v$process;

Ответ 5

Мой сеанс v $содержит 30 записей, 4 из которых имеют имя пользователя (одно из которых является фоном).

Если у вас есть фоновые процессы (например, пакетные задания), они могли бы пережевывать сеансы.

Но может случиться так, что у вас просто не хватает памяти. 2GB кажется немного низким для пула соединений 50 сеансов. Предполагая, что Oracle 10g, вы RAM делится на общий (SGA) и процесс (PGA). Скажем, у вас есть 1,5 ГБ для SGA, который оставляет 500 МБ для всех сеансов. Если сеансы захватывают 10 МБ каждый, вы достигнете предела около 50 сеансов.

В действительности, 1. У вас будет какое-то другое "вещество", работающее на ящике, так что у него не будет 2 ГБ для Oracle

  1. Ваш SGA может быть меньше или больше
  2. Вы можете быть на 11g и позволить Oracle выделять PGA и SGA из одного пула
  3. Возможно, вы используете PGA_AGGREGATE_TARGET (позволяя Oracle догадываться о настройках PGA в зависимости от количества сеансов) или сами настройки памяти.
  4. Возможно, у вас есть голодные процессы в памяти, которые пережевывают вещи.

PS. Значит ли 2GB означает, что вы находитесь в Windows?