Цитата:
Сообщение от
CHESER85
А если например зависла аксапта и ее аварийно пришлось закрыть? а сессия висеть осталась
Цитата:
Сообщение от
Владимир Максимов
либо сессию в Axapta снимете, но останется висеть сеанс в SQL.
Тут надо понимать, что снимать сессии в АХ нужно вкупе со снятием сеансов в SQL. Сеанс в SQL висеть сам по себе конечно не будет - он выполнит свою работу и завершится. Но не всегда снятие сеанса в АХ спасет ситуацию.
Пример 1.
Пользователь открыл АХ и ушел домой. На следующий день он не задумываясь - снова запустил АХ (вторую сессию) и сидит в ней работает. В этом случае прибитие первой сессии средствами АХ вполне допустимо, правильно и быстро. Цель - уменьшение количества лишних пользователей, одновременно зашедших в систему (лицензионные ограничения). Есть еще параметр автозавершение, но он не всегда может сработать (он не сработает, если Аксапте для закрытия формы нужно выдать запрос пользователю - типа Сохранить? Да/Нет)
Пример 2. Пользователь открыл АХ, запустил долгостороящийся отчет / долгую периодическую операцию. При этом тормоза связаны с алгоритмом, написанном на Х++ (не с БД и не с огромной транзакцией). Пользователь запускает вторую сессию АХ, на первую плюет, а админам (из-за лицензионных ограничений) эту зависшую сессию надо удалить. В этом случае прибитие первой сессии средствами АХ вполне допустимо, правильно и быстро. Но тут нужно точно знать, что проблема не в БД, а обычно, если уж точно знают, что проблема не в БД, то уж исправляют алгоритм.
Пример 3.
Пользователь открыл АХ, запустил долгостороящийся отчет / долгую периодическую операцию / открыл тяжелую форму. При этом тормоза связаны с БД. Возможно, что идет смешение с предыдущим примером - мелкие запросы выполняются 100500 раз и с т.з. пользователя - все виснет. И пользователь решает тоже снять задачу. В этом случае:
- если есть очень большая транзакция, то по-любому пойдет ее откат (а это тоже время)
- если запустилась большая хранимая процедура (или просто тяжелый запрос, в т.ч. неиндексированный), то снятие сеанса АХ вообще ничего не даст - пока процедура не отработает и не откатится - таблички, которые в ней задействованы - будут "под нагрузкой", т.е. повторный запуск этой хранимой процедуры из новой сессии АХ не даст ровным счетом ничего, кроме дополнительной нагрузки на сервер БД.
- если запустилось построение большого и толстого индекса, то снятие сеанса АХ опять-таки - ничего не даст.
Поэтому тут надо понимать, что снимая сеанс АХ - необходимо до этого кильнуть все пользовательские спиды этого сеанса на БД, потому что иначе все будут терпеливо ждать окончания выполнения запроса, а затем ждать отката (ROLLBACK). Удаление (KILL) спидов на БД позволит сократить время ожидания выполнения запроса (сразу пойдет ROLLBACK). Для крупных БД - это актуально. Для маленьких - нет.