2013-08-22 3 views
0

Это мой первый вопрос, и я надеюсь, что это хорошо объяснено, и поэтому я могу найти ответ.Существует ли максимальное количество подключений в Oracle9i DB?

Я работаю над проектом веб-сайта для компании доставки, которая имеет все данные на сервере Oracle9i. Большинство пользователей сети просто хотят знать, когда они собираются получить свой пакет, но я уверен, что есть также роботы, которые запрашивают эту информацию несколько раз в день, чтобы обновить свои системы. Я работаю над кодом, чтобы остановить этих роботов (например, запросить капчу после третьего запроса в 15мин), потому что у нас есть некоторые веб-службы, которые они могут использовать для запроса всех данных навалом.

Теперь моя проблема в том, что часы пик 12.00-14.00 база данных начинает отвечать очень медленно. Вот некоторые данные, которые я проанализировал из веб-приложения. У меня нет журналов на этом уровне для веб-служб, но там также было много запросов.

enter image description here

Это показывает метку времени, когда я запрос на соединение от источника данных, то Integer.toHexString (connection.hashCode()), название источника данных, отметка времени, когда я закрыть соединение и разницу между обеими метками времени. В большинстве случаев запросы заканчиваются менее чем за секунду, но вчера у меня была эта странная задержка более 2 минут.

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

Заранее спасибо.

ответ

2

Есть ли какая-то Maximun числа соединений, разрешенных на databas

Да.

SESSIONS является одним из basic initialization parameters и

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

Значение по умолчанию получено из параметра PROCESSES (в 1,5 раза это плюс 22); Поэтому, если вы не изменили параметр процессов (по умолчанию 100) максимальное количество сессий в базе данных будет 172.

Вы можете определить значение, запрашивая V$PARAMETER:

SQL> select value 
    2 from v$parameter 
    3 where name = 'sessions'; 

VALUE 
-------------------------------- 

480 

так, когда он превосходит это ограничение, когда база данных ставит мой запрос на какое-то время, прежде чем повторять попытку?

No.

При попытке превысить стоимость СЕССИЙ параметра исключения ORA-00018: maximum number of sessions exceeded будет поднято.

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


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

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

0

Спасибо за редактирование vape.

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

 Смежные вопросы

  • Нет связанных вопросов^_^