Есть хорошая статья для работы с профайлером — Анализ запросов с помощью SQL Profiler. В ней подробно описаны поля, по которым следует накладывать отборы. Все хорошо, если в базе вы один, но иногда необходимо запускать профайлер для рабочей базе с сотней пользователей, и тут можно получить довольно большую порцию данных для разбора «полетов». Конечно, можно усечь выборку, прописав отбор по полю «TexData» , но, например, для большого пакетного запроса это не всегда подойдет. В такой ситуации можно использовать отбор по SPID.
SPID – в нашем случае это номер соединения сервера 1С и SQL, отличный для каждого сеанса. Периодически он меняется. Можно просмотреть все соединения SQL-сервера вот таким простым запросом в SSMS
SELECT *
FROM sys.dm_exec_sessions
Подробнее о SPID можно почитать здесь SQL Server SPID – What is it?
Представленная обработка позволяет зафиксировать SPID текущего сеанса. Фиксация производится простым запросом с использованием менеджера временных таблиц.
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ 1 ПОМЕСТИТЬ ВТ";
Результат = Запрос.Выполнить();
МВТ = Запрос.МенеджерВременныхТаблиц;
Порядок использования:
1. Запускаем обработку. Если у Вас заведен администратор кластера – указываем в соответствующих полях.
2. Нажимаем «Зафиксировать SPID». Ждем, пока будет прочитан SPID. Он будет держаться до закрытия обработки.
Можно открыть консоль кластера и убедиться, что SPID совпадает со значением в колонке «Соединение СУБД»
3. Настраиваем профайлер, в отборах указываем полученный SPID.
4. Запускаем трассировку.
5. Запускаем анализируемое действие в 1С.
6. Останавливаем трассировку. Получаем события только нашего сеанса.
Обработка имеет ограничение – поиск SPID проводится по первому кластеру.
(1) Если профайлер будет выдавать каждый чих, то возможно. Но если настроить по критериям, когда выдаются лишь реально тяжелые запросы и тп, то вряд ли это негативно скажется.
Часто другое требуется: пользователь запускает отчет, и иногда он намертво повисает (ну не указали отбор). Пользователь просит «выбить его из базы» — удаляешь на кластере и соединение опять появляется. Пробовал на sql сервере kill <spid> но вот угадать какой не знаю — пробовал в профайлере но при 200 пользователях там жуткая каша ( Может кто научить как «отстреливать» такие соединения ? Как узнать spid в этом случае ?