Фиксируем SPID для отслеживания в SQL Profiler

Для разбора запросов бывает полезным использовать SQL Profiler. При настройке выборки событий предлагаю дополнительно наложить еще один фильтр по полю SPID.

   Есть хорошая статья для работы с профайлером —  Анализ запросов с помощью SQL Profiler.  В ней подробно описаны поля, по которым следует накладывать отборы. Все хорошо, если в базе вы один, но иногда необходимо запускать профайлер для рабочей базе с сотней пользователей,  и тут можно получить довольно большую порцию данных для разбора «полетов». Конечно, можно усечь выборку, прописав отбор по полю «TexData» , но, например, для большого пакетного запроса это не всегда подойдет. В такой ситуации можно использовать отбор по SPID.

 установка 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 проводится по первому кластеру.

2 Comments

  1. Goga-Gola

    (1) Если профайлер будет выдавать каждый чих, то возможно. Но если настроить по критериям, когда выдаются лишь реально тяжелые запросы и тп, то вряд ли это негативно скажется.

    Reply
  2. rozer

    Часто другое требуется: пользователь запускает отчет, и иногда он намертво повисает (ну не указали отбор). Пользователь просит «выбить его из базы» — удаляешь на кластере и соединение опять появляется. Пробовал на sql сервере kill <spid> но вот угадать какой не знаю — пробовал в профайлере но при 200 пользователях там жуткая каша ( Может кто научить как «отстреливать» такие соединения ? Как узнать spid в этом случае ?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *