Задать вопрос
@ZhanD

Как убить активную сессию оракла запущенного из веб приложения на .Net?

Всем привет.
Вводные:
БД: Оракл 11;
Веб приложение: ASP.Net - развернутый на IIS 7;
Соединение через Oracle.DataAccess.

У меня есть система, которая формирует десяток динамических отчетов с большим количеством данных.
Логики в отчетах много и они неплохо оптимизированы, и в целом показывают хорошую скорость выполнения.
Проблема в том, что системой пользуются порядка 15 человек. И каждый из них одновременно открывает по несколько вкладок и запускает формирование запросов, что в свою очередь снижает производительность сервера БД. Далее, половина из них прождав 5-20 минут и не дождавшись появления данных на интерфейсе закрывают вкладку и тут же открывают новую.

В результате, я со стороны БД вижу 50-100 активных сессии запущенных с приложения.

Вопрос:
1. Как только вкладка закрывается не успев получить данные, процедура формирования данных автоматом убивается на стороне БД?
2. Или продолжает выполнение запроса до победного конца, отъедая ресурсы?
3. В случае 2, есть ли возможность узнать какой SID имеет этот процесс и убить его принудительно?
4. Можно ли подкрутить какие-либо настройки в IIS?
  • Вопрос задан
  • 293 просмотра
Подписаться 2 Средний 1 комментарий
Решения вопроса 1
Lorien_Elf
@Lorien_Elf
Keep calm and drop database
1. 2. - зависит от того как реализована логика приложения.

3. Для идентификации сессии приложение может заполнять поле client_identifier в v$session:

select sid, serial# from v$session where client_identifier = 'имя пользователя'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
shai_hulud
@shai_hulud
Есть два предложения:
1) Записывать факт начала создание отчета в HttpContext.Session и при обновлении страницы/перехода к отчетам "продолжать" ждать начатого результата.
2) Записывать факт начала создание отчета в HttpContext.Session и из браузера каждые N секунд присылать что пользователь ждет отчета, как только такие сообщения не приходили N*2 секунд убивать соединение/запрос.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы