Вопрос

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

У нас есть сервер Oracle, работающий на машине с 2 ГБ оперативной памяти.В экземпляре Db для параметра инициализации «sessions» установлено значение 160.

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

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

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

Означает ли это, что параллелизм 40 — это то, что может обеспечить эта установка?Является ли увеличение количества сеансов/процессов Oracle единственным способом добиться более высокого уровня параллелизма?

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

Это было полезно?

Решение

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

Другие советы

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

  

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

     

Решение:

     

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

     

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

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

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

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

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

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

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

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

SQL> show parameter processes

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

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

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

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

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

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

На самом деле 1.На вашем компьютере будут работать некоторые другие «материалы», поэтому Oracle не будет иметь полных 2 ГБ

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

ПС.Означает ли 2 ГБ, что вы используете Windows?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top