Почему сессии Oracle все еще живы после двух недель неактивности

16

БД: Oracle 10g

O / S: Windows Server 2003, 64 бита

Я запрашиваю список сеансов Oracle, сгенерированных веб-приложениями (фильтр по программе = w3wp.exe)

select * from V$session
where UPPER(program) LIKE '%W3%'
order by logon_time

введите описание изображения здесь

Согласно Logon_Time, почему все еще живы сеансы с 31/07/2012 или 01/08/2012 или сессия до сегодняшнего дня (21/08/2012)?

Я настроил на sqlnet.ora: SQLNET.EXPIRE_TIME = 20 Таким образом, это означает, что каждые 20 минут Oracle проверяет, все еще активны ли соединения.

Все пользовательские схемы имеют профиль по умолчанию. Это значит, что ни одна сессия никогда не истечет или не умрет?

введите описание изображения здесь

Добавлено в ответ на комментарий Фила:

введите описание изображения здесь

Добавлено в ответ Фила ответ:

введите описание изображения здесь

Delmonte
источник
Что v$session.PREV_EXEC_STARTдля этих сессий? Я подозреваю, что они являются частью пула соединений и поэтому не бездействуют, потому что их часто используют.
Philᵀᴹ
У меня Oracle 10g, поэтому в v $ session нет столбца PREV_EXEC_START. Но у меня снова запрос, включая столбец Last_Call_ET (я добавил эту картинку в свой вопрос).
Delmonte
Я говорил с нашими разработчиками, и они сказали мне, что они используют ODP.NET в своих веб-приложениях. Так что наверняка эти сеансы были созданы в пуле соединений. Я не полностью доверяю, когда Oracle показывает статус НЕАКТИВНЫЙ, но в этом случае ... Как вы думаете, я мог бы убить сеансы две недели назад?
Delmonte
7
Нет, INACTIVEпросто означает, что в момент проверки вы не выполняете оператор SQL v$session. Если они являются частью пула соединений, они выполняют свою работу должным образом - суть пула соединений состоит в том, чтобы устранить необходимость в большом количестве входов / выходов из системы и поддерживать постоянные сеансы для быстрого запуска (гораздо большие накладные расходы при повторной регистрации снова и снова) просто выполнить один запрос). Я не понимаю, почему вы беспокоитесь об этом.
Philᵀᴹ
@Phil - я бы с радостью поддержал это как ответ!
Джастин Кейв

Ответы:

22

Я подозреваю, что они являются частью пула соединений и поэтому не бездействуют, потому что их часто используют.

INACTIVEв v$sessionпросто означает , что не является SQL оператор выполняется в тот момент , вы проверить v$session.

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

Чтобы получить время последней активности для каждого сеанса:

select username, UPPER(program), logon_time, 
       floor(last_call_et / 60) "Minutes since active", status
from v$session
where UPPER(program) LIKE '%W3%'
order by last_call_et;

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

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

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

Philᵀᴹ
источник
Спасибо за ваше объяснение, но что, если значения этих сессий odp.net растут и растут в количестве? Я запрашиваю v $ resource_limit (добавлено в моем исходном вопросе) и показывает, что значения процессов и сеансов достигают 80% от предельного значения. Эти сеансы odp.net могут потреблять значения моих сеансов, достигать предельного значения 701, а затем разрывать соединение с базой данных? (Я знаю, что могу расширить эти предельные значения до 1000 или 2000, но это не часть вопроса)
Delmonte
Тогда у вас есть проблема с приложением.
Philᵀᴹ
Почему? Веб-приложения открывают, закрывают и удаляют соединение odp.net ... Насколько я понимаю, эти сеансы odp.net все еще живы, ожидая будущих соединений, даже если веб-приложение избавится от них.
Delmonte
Похоже, это будет проблема конфигурации пула соединений. Вы получили график (*) v $ сеанса с течением времени? Есть ли у вас лицензия пакета диагностики для БД?
Philᵀᴹ
3
Я предполагаю, что вы имели в виду IIS (сервер HTTP / сервер приложений Microsoft), а не ISS (Международная космическая станция) :-)
Джастин Кейв