Показать сообщение отдельно
Старый 03.05.2017, 14:01   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от CHESER85 Посмотреть сообщение
А если например зависла аксапта и ее аварийно пришлось закрыть? а сессия висеть осталась
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
либо сессию в Axapta снимете, но останется висеть сеанс в SQL.
Тут надо понимать, что снимать сессии в АХ нужно вкупе со снятием сеансов в SQL. Сеанс в SQL висеть сам по себе конечно не будет - он выполнит свою работу и завершится. Но не всегда снятие сеанса в АХ спасет ситуацию.
Пример 1.
Пользователь открыл АХ и ушел домой. На следующий день он не задумываясь - снова запустил АХ (вторую сессию) и сидит в ней работает. В этом случае прибитие первой сессии средствами АХ вполне допустимо, правильно и быстро. Цель - уменьшение количества лишних пользователей, одновременно зашедших в систему (лицензионные ограничения). Есть еще параметр автозавершение, но он не всегда может сработать (он не сработает, если Аксапте для закрытия формы нужно выдать запрос пользователю - типа Сохранить? Да/Нет)

Пример 2. Пользователь открыл АХ, запустил долгостороящийся отчет / долгую периодическую операцию. При этом тормоза связаны с алгоритмом, написанном на Х++ (не с БД и не с огромной транзакцией). Пользователь запускает вторую сессию АХ, на первую плюет, а админам (из-за лицензионных ограничений) эту зависшую сессию надо удалить. В этом случае прибитие первой сессии средствами АХ вполне допустимо, правильно и быстро. Но тут нужно точно знать, что проблема не в БД, а обычно, если уж точно знают, что проблема не в БД, то уж исправляют алгоритм.

Пример 3.
Пользователь открыл АХ, запустил долгостороящийся отчет / долгую периодическую операцию / открыл тяжелую форму. При этом тормоза связаны с БД. Возможно, что идет смешение с предыдущим примером - мелкие запросы выполняются 100500 раз и с т.з. пользователя - все виснет. И пользователь решает тоже снять задачу. В этом случае:
- если есть очень большая транзакция, то по-любому пойдет ее откат (а это тоже время)
- если запустилась большая хранимая процедура (или просто тяжелый запрос, в т.ч. неиндексированный), то снятие сеанса АХ вообще ничего не даст - пока процедура не отработает и не откатится - таблички, которые в ней задействованы - будут "под нагрузкой", т.е. повторный запуск этой хранимой процедуры из новой сессии АХ не даст ровным счетом ничего, кроме дополнительной нагрузки на сервер БД.
- если запустилось построение большого и толстого индекса, то снятие сеанса АХ опять-таки - ничего не даст.

Поэтому тут надо понимать, что снимая сеанс АХ - необходимо до этого кильнуть все пользовательские спиды этого сеанса на БД, потому что иначе все будут терпеливо ждать окончания выполнения запроса, а затем ждать отката (ROLLBACK). Удаление (KILL) спидов на БД позволит сократить время ожидания выполнения запроса (сразу пойдет ROLLBACK). Для крупных БД - это актуально. Для маленьких - нет.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 03.05.2017 в 14:04.