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

Откуда:
Сообщений: 2
Добрый день!

Такой вопрос:

Есть хранимая процедура, в ней много этапов. Хочется при запуске процедуры отслеживать статус и время выполнения каждого этапа.

Пока использую print, но сообщения отображаются только после выполнения всей процедуры, а не онлайн.

Как поступить, что использовать ? Спасибо!
5 авг 13, 18:36    [14665924]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Вы поясните что значит для вас отслеживать и что для вас значит этап.

Вариант в лоб - можно отслеживать ПРОФАЙЛЕРОМ, вплоть до каждой конкретной инструкции.

Вариант не в лоб - писать свои процедуры так, чтобы статусы и "этапов" логировались


Также есть т.н. динамические представления, которые позволяют отслеживать какой код выполняется и в каком он состоянии

В общем, вам надо уточнить , что вы хотите
5 авг 13, 18:43    [14665960]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Подозреваю, что ответ на ваш вопрос кроется внутри sp_WhoIsActive
5 авг 13, 18:47    [14665978]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
aleks2
Guest
opa111
Пока использую print, но сообщения отображаются только после выполнения всей процедуры, а не онлайн.

Как поступить, что использовать ? Спасибо!


declare @stage int = 1;
...
set @stage = @stage +1
raiserror('Выполнен этап %i', 0, 1, @stage)  with nowait;
5 авг 13, 19:05    [14666093]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
opa111
Как поступить


перестать хотеть

opa111
отслеживать статус


Если есть такие долгоиграющие хп, запускайте их асинхронно, чтобы не блокировать работу приложения.
5 авг 13, 19:08    [14666112]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
pkarklin
Если есть такие долгоиграющие хп, запускайте их асинхронно, чтобы не блокировать работу приложения.
Вот возьмём SSMS. Он блокируется при вызове такой процедуры?

Тоже самое с другим приложением. Вызов не блокирует ничего и работает асинхронно, если он правильно реализован.
Т.е. это проблема клиента, а не сервера.
А как "асинхронно" послать сообщение сервером уже было сказано (with nowait).
5 авг 13, 19:43    [14666202]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
pkarklin, простите меня за капитанство.
5 авг 13, 19:46    [14666207]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34620
opa111,

Записывай в табличку записи, в другой сессии читай. Только либо надо в отдельных транзакциях, либо читать без snapshot.
6 авг 13, 12:00    [14668444]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
Crimean
Member

Откуда:
Сообщений: 13148
MasterZiv
Записывай в табличку записи, в другой сессии читай. Только либо надо в отдельных транзакциях, либо читать без snapshot.


+1. и можно изголиться и через заведение самого к себе линкедом с отключением для себя же DTC и автономные транзакции сделать для этого дела. я делал - работает
6 авг 13, 12:03    [14668464]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
MasterZiv, Crimean,

Троллинг. Вам делать нечего?
6 авг 13, 12:18    [14668589]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Или хотя бы пишите, что помимо этого решаете задачу гарантированного выполнения.

Ибо асинхронность и гарантированность - не связанные задачи.
6 авг 13, 12:22    [14668626]     Ответить | Цитировать Сообщить модератору
 Re: Он-лайн сообщения  [new]
opa111
Member

Откуда:
Сообщений: 2
автор
declare @stage int = 1;
...
set @stage = @stage +1
raiserror('Выполнен этап %i', 0, 1, @stage) with nowait;



Похоже, что это мне и нужно. Большое спасибо!
6 авг 13, 12:40    [14668815]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить