Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Есть очередь, нужно, чтобы процедура обраабтывала ее автоматом:

ALTER QUEUE [dbo].[myQueue] WITH STATUS = ON , RETENTION = OFF , ACTIVATION (  STATUS = ON , PROCEDURE_NAME = [dbo].[my_dequeue] , MAX_QUEUE_READERS = 2 , EXECUTE AS OWNER  ), POISON_MESSAGE_HANDLING (STATUS = ON) 
GO


Проверяю очередь - там накапливаются записи. Если пускаю эту же процедуру руками - она успешно выбирает и обрабатывает записи.

Куда копать?

SQL Server 2012 Ent.
3 май 13, 17:48    [14256232]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Было такое на 2005. Тоже долго бились, в конечном итоге нашли способ модифицировать бизнес-логику, убрав эту глючную очередь вообще.

Подозреваю, что там проблемы в обработке транзакций и эксепшенов были какие-то. Не должно быть никаких raiserror в коде процедуры активации, а там насколько помню были.
3 май 13, 17:56    [14256249]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
вот тfкие сообщения в логе, не нашел внятного описания, как с этим бороться:

Message
An error occurred in Service Broker internal activation while trying to scan the user queue 'db1.dbo.Queue' for its status. Error: 1222, State: 51. Lock request time out period exceeded. This is an informational message only. No user action is required.




причем это все в связке с сообщениями типа

A significant part of sql server process memory has been paged out. 
This may result in a performance degradation. Duration: 918 seconds. 
Working set (KB): 76560, committed (KB): 1148884, memory utilization: 6%%.



Я уже доменному юезру, под которым работает SQL Server 2012 SP1 дал права на Lock Pages.

что можно сделать еще?
8 май 13, 12:25    [14272862]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
komrad
Member

Откуда:
Сообщений: 5758
Winnipuh

Я уже доменному юезру, под которым работает SQL Server 2012 SP1 дал права на Lock Pages.

что можно сделать еще?


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

покажите свежий лог старта сиквела
8 май 13, 12:30    [14272916]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
mike909
Member

Откуда:
Сообщений: 662
Winnipuh
вот тfкие сообщения в логе, не нашел внятного описания, как с этим бороться:

Message
An error occurred in Service Broker internal activation while trying to scan the user queue 'db1.dbo.Queue' for its status. Error: 1222, State: 51. Lock request time out period exceeded. This is an informational message only. No user action is required.

С этим - никак. Ждемс патча.
А пока на эти сообщения можно наплевать - все работает уже 2_й месяц и ни одно сообщение не потерялось.
PS. Обратил внимание, что такие сообщения чаще всего возникают при значительной нагрузке на сервер и только с одной из самых нагруженных очередей.
8 май 13, 12:42    [14273018]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
komrad
Winnipuh
Я уже доменному юезру, под которым работает SQL Server 2012 SP1 дал права на Lock Pages.

что можно сделать еще?


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

покажите свежий лог старта сиквела


Выдержки из лога

автор
Line 26: 05/08/2013 10:37:59,spid24s,Unknown,An error occurred in Service Broker
internal activation while trying to
scan the user queue 'db3.dbo.NotifyQueue' for its status.
Error: 1222<c/> State: 55. Lock request time out period exceeded.
This is an informational message only. No user action is required.
Line 27: 05/08/2013 10:37:59,spid31s,Unknown,An error occurred in Service Broker
internal activation while trying to
scan the user queue 'db4.dbo.NotifyQueue' for its status.
Error: 1222<c/> State: 55. Lock request time out period exceeded.
This is an informational message only. No user action is required.
Line 139: 05/08/2013 10:37:56,Server,Unknown,Lock partitioning is enabled.
This is an informational message only. No user action is required.
Line 140: 05/08/2013 10:37:56,Server,Unknown,Using dynamic lock allocation.
Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node.
This is an informational message only. No user action is required.
Line 146: 05/08/2013 10:37:55,Server,Unknown,Using locked pages in the memory manager.
8 май 13, 13:16    [14273288]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Lock request time out period exceeded


и чему он установлен, в отличие от дефолтного -1 (Ждать вечно)? Блокировки мониторили?
8 май 13, 13:23    [14273333]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
mike909
Winnipuh
вот тfкие сообщения в логе, не нашел внятного описания, как с этим бороться:

Message
An error occurred in Service Broker internal activation while trying to scan the user queue 'db1.dbo.Queue' for its status. Error: 1222, State: 51. Lock request time out period exceeded. This is an informational message only. No user action is required.

С этим - никак. Ждемс патча.
А пока на эти сообщения можно наплевать - все работает уже 2_й месяц и ни одно сообщение не потерялось.
PS. Обратил внимание, что такие сообщения чаще всего возникают при значительной нагрузке на сервер и только с одной из самых нагруженных очередей.


у меня тоже не теряются, но очень медленно обрабатывается очередь, т.е. в минуту 5-10 записей, а накапливаются записи в очереди быстрее, скажем сейчас 500 записей уже накопилось..
8 май 13, 13:53    [14273540]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
pkarklin
автор
Lock request time out period exceeded


и чему он установлен, в отличие от дефолтного -1 (Ждать вечно)? Блокировки мониторили?


SELECT @@lock_timeout;
---
-1

да и как я могу поменять его, это попытка активации процедуры обработки очереди
8 май 13, 13:58    [14273580]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Winnipuh
SELECT @@lock_timeout;
---
-1


И где Вы выполнили этот SELECT?


Winnipuh
да и как я могу поменять его, это попытка активации процедуры обработки очереди


Гм, например в процедуре активации:

        WAITFOR
        (
            RECEIVE TOP(1) 
                @h = conversation_handle,
                @t = message_type_name,
                @b = message_body
            FROM BLOB_Queue_Target
        ), TIMEOUT 5000
8 май 13, 14:12    [14273727]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
В общем, лучше увидеть Вашу процедуру активации.
8 май 13, 14:17    [14273770]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
pkarklin
Winnipuh
SELECT @@lock_timeout;
---
-1


И где Вы выполнили этот SELECT?


Winnipuh
да и как я могу поменять его, это попытка активации процедуры обработки очереди


Гм, например в процедуре активации:

        WAITFOR
        (
            RECEIVE TOP(1) 
                @h = conversation_handle,
                @t = message_type_name,
                @b = message_body
            FROM BLOB_Queue_Target
        ), TIMEOUT 5000



это версия...
8 май 13, 14:17    [14273772]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Winnipuh
это версия...


Не то слово. :) Было бы так же интересно снять трассу по событиям Lock:Timeout.
8 май 13, 14:21    [14273810]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
pkarklin
Winnipuh
это версия...


Не то слово. :) Было бы так же интересно снять трассу по событиям Lock:Timeout.


так крути, не крути, таймаут в этом случае надо бы указывать, иначе может заклинить навсегда?
8 май 13, 15:07    [14274217]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Winnipuh
так крути, не крути, таймаут в этом случае надо бы указывать, иначе может заклинить навсегда?


Все-таки надо снимать трассу.
8 май 13, 15:20    [14274324]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
pkarklin
Winnipuh
так крути, не крути, таймаут в этом случае надо бы указывать, иначе может заклинить навсегда?


Все-таки надо снимать трассу.


что затрейсить? я вижу выполнение процедур и т.д.. все ок, время - неплохое.
Что еще включить в трейс?
8 май 13, 16:22    [14274782]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Я там даже класс события указал чуть выше.
8 май 13, 19:59    [14275723]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
pkarklin
Я там даже класс события указал чуть выше.


да, вижу, протупил
8 май 13, 20:17    [14275772]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Service Broker: процедура не активизируется  [new]
Gdalex
Member

Откуда:
Сообщений: 13
Народ, столкнулся с подобной проблемой на SQL Express 2005: триггер сообщения формирует, сообщения в очереди появляются, а процедура, связанная с очередью, не запускается. При этом в логах никаких ошибок, ручной запуск процедуры отрабатывает как часы.

Где собака порылась?
Скрипты всех объектов (типы сообщений, контракты, очереди, сервисы, триггеры) взяты с работающего боевого сервера, только наименования изменены. Ну и отличие, что боевой сервер - SQL Enterprise 2008, а песочница - Express 2005. Но, честно сказать, сомневаюсь, что дело в этом.

Есть мысли, идеи?
24 мар 15, 15:07    [17425306]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Gdalex
Народ, столкнулся с подобной проблемой на SQL Express 2005: триггер сообщения формирует, сообщения в очереди появляются, а процедура, связанная с очередью, не запускается. При этом в логах никаких ошибок, ручной запуск процедуры отрабатывает как часы.

Где собака порылась?
Скрипты всех объектов (типы сообщений, контракты, очереди, сервисы, триггеры) взяты с работающего боевого сервера, только наименования изменены. Ну и отличие, что боевой сервер - SQL Enterprise 2008, а песочница - Express 2005. Но, честно сказать, сомневаюсь, что дело в этом.

Есть мысли, идеи?


Я бы поставил песочницу минимум 2008 экспресс или девелопер.
То, что описано выше проверяли?
24 мар 15, 15:16    [17425369]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Gdalex
Member

Откуда:
Сообщений: 13
Да, от версии Экспресса не зависит. Пробовал и 2005 и 2008... Мало того, базу импортировали в боевой сервер - там тоже не работает... Сейчас попытаюсь создать базу с нуля на боевом сервере...
24 мар 15, 15:48    [17425579]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Владислав Колосов
Member

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

ограничения экпресса?
24 мар 15, 15:56    [17425643]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Gdalex
Member

Откуда:
Сообщений: 13
Видимо, ограничения связаны с ошибкой в самих функциях или скриптах очередей... Сейчас перенёс на боевой сервер - "те же коки, тiльки сбоки". Очередь наполняется - функция не вызывается. Ошибок нет, действий ноль.

Буду сейчас более детально смотреть на скрипты.
Могу выложить сюда, может кто свежим взглядом увидит ошибку
24 мар 15, 16:44    [17425924]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Gdalex
Видимо, ограничения связаны с ошибкой в самих функциях или скриптах очередей... Сейчас перенёс на боевой сервер - "те же коки, тiльки сбоки". Очередь наполняется - функция не вызывается. Ошибок нет, действий ноль.

Буду сейчас более детально смотреть на скрипты.
Могу выложить сюда, может кто свежим взглядом увидит ошибку


давайте, взглядом, *****, тверезым.
24 мар 15, 16:52    [17425977]     Ответить | Цитировать Сообщить модератору
 Re: Service Broker: процедура не активизируется  [new]
Gdalex
Member

Откуда:
Сообщений: 13
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[SynchData_MessageReader] AS

DECLARE @msg VARCHAR(MAX), @ID INT, @NewID INT, @Code VARCHAR(11), @OperType VARCHAR(6), @TableName VARCHAR(MAX), @ServerName VARCHAR(MAX), @str VARCHAR(MAX),
         @isDone BIT, @WithCode BIT, @HasChildren BIT

DECLARE @TableChildrenTableName VARCHAR(254), @TableChildrenColumnName VARCHAR(254), @TableChildrenIdentityColumnName VARCHAR(254)
			DECLARE @TableChildren_ColumnString varchar(max)

DECLARE @v_SetString VARCHAR(MAX), @isExistToUpdate BIT, @ExistStr NVARCHAR(MAX), @ParmDefinition nvarchar(500)

DECLARE @hnd UNIQUEIDENTIFIER

DECLARE recs CURSOR DYNAMIC FOR
 SELECT casted_message_body = 
    CASE message_type_name WHEN 'X' THEN CAST(message_body AS NVARCHAR(MAX)) 
	                        ELSE message_body 
	END, conversation_handle
FROM [Jewels].[dbo].[SynchData_TargetQueue] WITH(NOLOCK)
WHERE message_body IS NOT NULL


DECLARE LinkServersList CURSOR FORWARD_ONLY FAST_FORWARD FOR
  SELECT srvname FROM sys.sysservers WHERE srvname <> @@servername

OPEN recs

FETCH NEXT FROM recs INTO @msg, @hnd
WHILE @@fetch_status=0
 BEGIN 
  SELECT @Code=substring(@msg,1,11), @OperType=substring(@msg,12,6), @ID=cast(substring(@msg,18,charindex(';',@msg)-18) AS INT), 
         @TableName=substring(@msg,charindex(';',@msg)+1,254) 
 /* 
  Разбирает сообщение вида "00000000000UPDATE84;Units" на составляющие: 
    первые 11 символов уникальный код, 
	6 символов - вид операции, 
	ID записи до символа ";",
	остальное - название таблицы, в которой производилась операция
 */
    
  OPEN LinkServersList
  FETCH NEXT FROM LinkServersList INTO @ServerName
  WHILE @@fetch_status=0
   BEGIN
	 SET @isDone=0
	 WHILE @isDone=0 -- Крутим, пока не закончу
	  BEGIN
	   BEGIN TRY
	    IF @OperType='INSERT'
	     BEGIN
		  /*
		   вставляет новые записи в линкованный сервер
		  */
	     END --IF @OperType='INSERT'
-------------------------------------------------- IF @OperType='INSERT' -----------------------------
	    IF @OperType='UPDATE'
	     BEGIN
 		  /*
		   обновляет записи в линкованном сервере
		  */
	     END --IF @OperType='UPDATE'
		 
		 SET  @isDone=1 -- Все хорошо, идем дальше
		END TRY
		BEGIN CATCH
		 INSERT INTO dbo.ErrorsLog(MessageText,DT)VALUES(error_message(),GETDATE())
		 WAITFOR DELAY '00:00:30'
		END CATCH	   
	  END -- @isDone=0
	 FETCH NEXT FROM LinkServersList INTO @ServerName
	END; --WHILE @@fetch_status=0 from LinkServersList
   
   END CONVERSATION @hnd WITH CLEANUP
   CLOSE LinkServersList
   FETCH NEXT FROM recs INTO @msg, @hnd
 END -- FETCH NEXT FROM recs
CLOSE recs
DEALLOCATE recs
DEALLOCATE LinkServersList
GO

CREATE MESSAGE TYPE [SynchData_Type] AUTHORIZATION [dbo] VALIDATION = NONE

CREATE CONTRACT [SynchData_Contract] AUTHORIZATION [dbo] ([SynchData_Type] SENT BY ANY)

CREATE QUEUE [dbo].[SynchData_SourceQueue] WITH STATUS = ON , RETENTION = OFF
GO

CREATE QUEUE [dbo].[SynchData_TargetQueue] WITH STATUS = ON , RETENTION = OFF , ACTIVATION (  STATUS = ON , PROCEDURE_NAME = [dbo].[SynchData_MessageReader] , MAX_QUEUE_READERS = 1 , EXECUTE AS OWNER  )
GO

CREATE SERVICE [SynchData_SourceService]  ON QUEUE [dbo].[SynchData_SourceQueue]
GO

CREATE SERVICE [SynchData_TargetService]  ON QUEUE [dbo].[SynchData_TargetQueue] ([SynchData_Contract])
GO


Сообщение было отредактировано: 24 мар 15, 18:22
24 мар 15, 16:55    [17426000]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить