Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Она выполняется сейчас. Уже третий час. Профайлер включать поздно. Он фиксирует только то, что начало выполняться после его включения.

Какие есть способы узнать переданные в неё параметры? И как можно узнать фактический план после её завершения? Ибо sys.dm_exec_query_plan позволяет вытащить из памяти закэшированный план. Но, это предполагаемый план. А мне надо знать, сколько на самом деле строк было обработано и сколько раз выполнялись операторы.

#Хэш=
20 окт 17, 15:33    [20886322]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3436
SSMS->Activity Monitor не показывает процедуру?
20 окт 17, 15:42    [20886365]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
o-o
Guest
04cf9f9576a6f15
Она выполняется сейчас. Уже третий час
...
Какие есть способы узнать переданные в неё параметры?

если процедура скомпилирована сегодня
(смотрите, сколько раз она вообще выполнена в sys.dm_exec_procedure_stats)
то она с прослушанными же параметрами и выполнялась.
тогда берите выцепленный из кэша план как и ищите там ParameterList.
т.к. у нас кажую ночь базу перефодят в оффлайн,
сразу после этого все процы снова компилируются,
а т.к. они еще и всего раз в день выполняются,
то все актуальные параметры как раз и есть те самые прослушанные.
я этим пользуюсь.
---
ну или смотрите логин запустившего и скорее к нему с ножом к горлу.
пускай признается, с какими параметрами запустил
20 окт 17, 15:46    [20886386]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
Об этом надо заботиться "до того".
20 окт 17, 15:47    [20886389]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
o-o
Guest
*берите выцепленный из кэша план как = берите выцепленный из кэша план как xml
20 окт 17, 15:48    [20886394]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
o-o
Guest
Ролг Хупин
SSMS->Activity Monitor не показывает процедуру?

прецедуру показывает, а параметры нет
20 окт 17, 15:50    [20886405]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
o-o
если процедура скомпилирована сегодня
(смотрите, сколько раз она вообще выполнена в sys.dm_exec_procedure_stats)
то она с прослушанными же параметрами и выполнялась.
тогда берите выцепленный из кэша план как и ищите там ParameterList.
т.к. у нас кажую ночь базу перефодят в оффлайн,
сразу после этого все процы снова компилируются,
Уже смотрел. Там параметры, с которыми компилировался запрос. А мне нужны как раз фактические.
o-o
а т.к. они еще и всего раз в день выполняются,
то все актуальные параметры как раз и есть те самые прослушанные.
я этим пользуюсь.
В том и дело, что у меня не раз в день. Процедура уже выполнялась десятки раз как до проблемного случая, так и после. Обычно выполняется за секунды. Но, с определённой комбинацией параметров может выполняться часами. Вот, сейчас выполняется. Я думаю, можно ли из этого поиметь инфы полезной.
o-o
ну или смотрите логин запустившего и скорее к нему с ножом к горлу.
пускай признается, с какими параметрами запустил
Они все под одной учёткой сервера приложений запускаются.

#Хэш=
20 окт 17, 15:54    [20886421]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
o-o
Guest
тогда поезд ушел, т.е. уже никак
20 окт 17, 15:57    [20886429]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Ролг Хупин
SSMS->Activity Monitor не показывает процедуру?
Параметров не показывает. Текст запроса есть. А значений переменных нет.

#Хэш=
20 окт 17, 15:58    [20886432]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Владислав Колосов
Об этом надо заботиться "до того".
Такая хрень происходит раз в пару недель. Пользователь запускает приложение, жмёт куда-то не туда, запрос начинает выполняться дико медленно, он киляет подвисшее приложение (а старый запрос при этом продолжает выполняться, ибо это веб приложение и закрытие клиентской части не означает обрыв соединения между сервером приложений и СУБД). Пользователь умный. Он знает, что если приложение повисло, надо его перезапустить снова. Опять жмёт куда-то не туда.

В итоге набирается десяток таких зомби запросов, которые часами выполняются, отбирая 99% ресурсов процессора. Потом начинают звонить остальные юзера, потому что система страшно тормозит.

Стоит задача понять, с какими параметрами запускают запросы в проблемных случаях.

#Хэш=
20 окт 17, 16:08    [20886470]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
04cf9f9576a6f15
Стоит задача понять, с какими параметрами запускают запросы в проблемных случаях.
Добавьте в процедуру журналирование нужной информации.
20 окт 17, 16:24    [20886541]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
invm
04cf9f9576a6f15
Стоит задача понять, с какими параметрами запускают запросы в проблемных случаях.
Добавьте в процедуру журналирование нужной информации.
Я уже стал осознавать, что единственный путь.

#Хэш=
20 окт 17, 17:11    [20886742]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
04cf9f9576a6f15,

Если параметров не очень много, посмотрите какие в таблицах есть очень часто встречающиеся значения из тех по которым есть фильтры в запросе. Возможно одно из таких значений, ломает вам запрос.

Например, для запроса


Проверьте:
21 окт 17, 03:45    [20887847]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Например, для запроса

SELECT ...
FROM Table
...
WHERE Table.ColumnName = @P1


Проверьте:

SELECT TOP 10 ColumnName, COUNT(*)
FROM Table
GROUP BY ColumnName
ORDER BY COUNT(*) DESC
21 окт 17, 03:46    [20887848]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
04cf9f9576a6f15,

Посмотрите код в спойлере 15-го сообщения, может пригодиться.

https://www.sql.ru/forum/1144921/i-snova-pro-avtonomnye-tranzakcii-s-pomoshhu-clr?mid=17329722#17329722
23 окт 17, 10:56    [20891319]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
04cf9f9576a6f15
Она выполняется сейчас. Уже третий час.

что-то меня осенило.
если все еще выполняется, смотрим dbcc inputbuffer соответствующей сессии.
у нас прямо в студии мышью запускают, так вообще все замечательно видно:

К сообщению приложен файл. Размер - 9Kb
27 окт 17, 12:10    [20905811]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
Yasha123,

dbcc inputbuffer таки да, если параметры явно указаны. Но есть такая штука, как reporting services, его буфером не возьмешь :)
27 окт 17, 12:38    [20905975]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
вот как раз все репортинговы параметры в евонной базе же и логируются,
вместе с тем, кто и когда вызвал, сколько оно выполнялось на сервере и рендерилось
27 окт 17, 12:46    [20906024]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
Yasha123,

да, есть такой момент. Но лень же, как всегда :) Я давно написал себе утилиту, которая показывает буфер ввода, кэш процедуры и текущий запрос этой процедуры. Ходишь по списку SPID и смотришь - кто что выполняет. Жаль MS не сделала такой инструмент.
27 окт 17, 12:50    [20906065]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Yasha123
04cf9f9576a6f15
Она выполняется сейчас. Уже третий час.

что-то меня осенило.
если все еще выполняется, смотрим dbcc inputbuffer соответствующей сессии.
у нас прямо в студии мышью запускают, так вообще все замечательно видно:

EventType
RPC Event
28 окт 17, 00:28    [20908289]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать, с какими параметрами была запущена хранимая процедура?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Mind
Yasha123
пропущено...

что-то меня осенило.
если все еще выполняется, смотрим dbcc inputbuffer соответствующей сессии.
у нас прямо в студии мышью запускают, так вообще все замечательно видно:

EventType
RPC Event
И никаких вам параметров. А таких вызовов процедур большинство.
28 окт 17, 00:28    [20908291]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить