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

Откуда: Беларусь, Минск
Сообщений: 260
Задался целью посылать сообщения клиентам подписанным на моё пользовательское событие (EventID = 82) с помощью трассировки
1)Создаю трассу
exec @Res = sp_trace_create @traceID OUTPUT, 1, NULL, NULL, NULL

2) Задаю ей поля "TextData" (columnid = 1) и "BinaryData" (columnid = 2) и "IntegerData" (columnid = 25)
	exec @Res = sp_trace_setevent @traceID, @eventID, 1, @on
	IF @Res <> 0 
	BEGIN
		SET @ErrStep = 2
		Select 0 traceID, @@spid AS SPID, @ErrStep ErrStep, @Res ErrCode
		RETURN
	END
	-- установим поле "BinaryData" (columnid = 2)
	exec @Res = sp_trace_setevent @traceID, @eventID, 2, @on
	IF @Res <> 0 
	BEGIN
		SET @ErrStep = 2
		Select 0 traceID, @@spid AS SPID, @ErrStep ErrStep, @Res ErrCode
		RETURN
	END

	-- установим поле "IntegerData" (columnid = 25)
	exec @Res = sp_trace_setevent @traceID, @eventID, 25, @on
	IF @Res <> 0 
	BEGIN
		SET @ErrStep = 2
		Select 0 traceID, @@spid AS SPID, @ErrStep ErrStep, @Res ErrCode
		RETURN
	END

3) Задаю фильтр
exec @Res = sp_trace_setfilter @traceID, 25, 0, 0, 2

4) Запускаю трассу
exec @Res = sp_trace_setstatus @traceID, 1

Трасса создалась
5) Далее я генерю событие:
exec sp_trace_generateevent @eventID, N'Inserted', @message

Вопрос заключается в том, можно ли как-то сгенерировать событие, чтобы задействовать поле "IntegerData" и чтоб фильтр по нему срабатывал на стороне сервера у каждого подписчика на это событие?
Просто складывается ощущение, что "IntegerData" (как и все другие события) используется для стандартных EventID, а не пользовательских, которые в диапазоне [82-91]
Или я чего-то непонимаю...
P.s. Задача стоит генерировать пользовательское событие направленное конкретно определённым подписчикам - а не спамить всех подписчиков. Предполагается, что подписчик подписывается на событие с установкой нужного ему фильтра, чтобы фильтр этот сработал на стороне сервера, а не по прибытию сообщения на клиента. Реально ли такое реализовать вообще с помощью трасс ?
18 июл 13, 11:06    [14582210]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
perceptron
Member

Откуда: Беларусь, Минск
Сообщений: 260
Походу обнаружил, что поле "IntegerData" не увязано с событием EventID = 82
Это можно увидеть отсюда:
select * from sys.trace_event_bindings where trace_event_id = 82

Вот описание всех колонок:
select * from sys.trace_columns


Можно ли генерить событие с указанием значения в нужной колонке ? Чтобы подписчик мог настроить фильтр на нужное ему значение и получать нужные ему события таким образом ?
18 июл 13, 14:19    [14583868]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а зачем так сложно, чем обычные алерты не устраивают?
18 июл 13, 15:42    [14584635]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
perceptron
Member

Откуда: Беларусь, Минск
Сообщений: 260
Просто с алертами не связывался никогда...
Эти алерты гарантируют кстати доставку сообщения клиенту или нет ?
И как с клиента получать сообщения ? Просто неохота по таймеру это делать, так как в существующей системе сделано так, что каждый клиент по таймеру каждые 2 сек опрашивает свою очередь и выгребает свои сообщения. Клиентов под 150 и на каждого по 5 очередей + каждые 2 сек опрос... - короче ошибки типа "Lock request time out period exceeded" уже достали. Вот и ищу способ как-бы это дело исправить.

Трассы просто на клиенте автономно в отдельном потоке запускаются и клиент не дёргает сервер по-напрасну... Может кто знает иные способы как лучше сделать посылку сообщений клиентам.
18 июл 13, 16:15    [14584903]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
gang
Member

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

Вы по ходу друг друга не поняли. Crimean, судя по всему, под "послать сообщение клиентам" понял отправку письма в почту. Вы же, как я понимаю, пытаетесь организовать оповещение клиентского приложения о событии в БД. Вот тут коллега еще в лохматом 2006-м предлагал вариант, говорит до сих пор использует. Еще народ под это дело раньше всякие внешние dll -ки оповещательные к сиквелу через xp_proc прикручивал. Потом стали появляться через сервисброкер варианты. У Вас сейчас случаем не такой?
18 июл 13, 17:37    [14585528]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
perceptron
Member

Откуда: Беларусь, Минск
Сообщений: 260
gang,

Да - у меня сейчас как раз вариант c сервисброкером и от него надо уходить...
18 июл 13, 17:40    [14585543]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
gang
Member

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

Ну тогда sp_trace_generateevent вам точно не поможет. Она поднимает трассировочное пользовательское событие, которое используется собственно для трассировки тем же пофайлером. Не очень понял как вы хотите организовать трассировку с клиента. Но даже если вы нашли метод, то вариант не айс, т.к. мелкософт настоятельно рекомендует в целях снижения влияния трассы на производительность трассировать в server-side режиме. Да и прикручивать профайлер (или некую трассировочную библиотеку) к пользовательскому софту как-то не очень...
18 июл 13, 17:50    [14585623]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
perceptron
Member

Откуда: Беларусь, Минск
Сообщений: 260
прикручивать как раз ничего не нужно
18 июл 13, 19:01    [14585949]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
Mind
Member

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

150 трейсов? Вы серьезно? Вы пытаетесь решить задачу средством которое совсем для этого не предназначено. Я уже не говорю про то что профайлер Deprecated in SQL Server 2012 и возможно будет убран из следующих версий.
18 июл 13, 20:18    [14586178]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Mind
perceptron,

Я уже не говорю про то что профайлер Deprecated in SQL Server 2012 и возможно будет убран из следующих версий.
Там речь про тул сам, а не про трассы.
18 июл 13, 20:27    [14586195]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
perceptron
Member

Откуда: Беларусь, Минск
Сообщений: 260
2Mind: я понимаю для чего предназначены трейсы. Просто хочется дать им более народно-хозяйственное применение...
19 июл 13, 01:27    [14587039]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Гавриленко Сергей Алексеевич
Mind
perceptron,

Я уже не говорю про то что профайлер Deprecated in SQL Server 2012 и возможно будет убран из следующих версий.
Там речь про тул сам, а не про трассы.

автор
SQL Trace stored procedures, functions, and catalog views

sp_trace_create
sp_trace_setevent
sp_trace_setfilter
sp_trace_setstatus
fn_trace_geteventinfo
fn_trace_getfilterinfo
fn_trace_getinfo
fn_trace_gettable
sys.traces
sys.trace_events
sys.trace_event_bindings
sys.trace_categories
sys.trace_columns
sys.trace_subclass_values
19 июл 13, 20:00    [14591758]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр трассировки  [new]
Crimean
Member

Откуда:
Сообщений: 13147
нене, я не рассматривал буквально "отправить в почту". я рассматривал вопрос как раз в контексте - есть события и на них надо реагировать. как по мне алерты - лучший вариант. ибо там учтено оч много всего, связанного с "событийной" системой вообще
есть и гарантированная доставка если поток будет мелкий и пропуски с накоплением если поток плотный..
а на алерт можно уже что угодно вешать
19 июл 13, 21:13    [14592001]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить