powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с репликацией.
24 сообщений из 24, страница 1 из 1
Проблема с репликацией.
    #40067576
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
With MaxXact (ServerName, PublisherDBID, XactSeqNo)
As (Select S.name, DA.publisher_database_id, max(H.xact_seqno)
    From distribution.dbo.MSdistribution_history H with(nolock)
    Inner Join distribution.dbo.MSdistribution_agents DA with(nolock) On DA.id = H.agent_id
    Inner Join master.sys.servers S with(nolock) On S.server_id = DA.subscriber_id
    Group By S.name, DA.publisher_database_id)
Select MX.ServerName, MX.PublisherDBID, COUNT(*) As TransactionsNotReplicated
From distribution.dbo.msrepl_transactions T with(nolock)
Right Join MaxXact MX On MX.XactSeqNo < T.xact_seqno And MX.PublisherDBID = T.publisher_database_id
Group By MX.ServerName, MX.PublisherDBID;

With MaxXact (ServerName, PublisherDBID, XactSeqNo)
As (Select S.name, DA.publisher_database_id, max(H.xact_seqno)
    From distribution.dbo.MSdistribution_history H with(nolock)
    Inner Join distribution.dbo.MSdistribution_agents DA with(nolock) On DA.id = H.agent_id
    Inner Join master.sys.servers S with(nolock) On S.server_id = DA.subscriber_id
    Group By S.name, DA.publisher_database_id)
Select MX.ServerName, MX.PublisherDBID, COUNT(*) As CommandsNotReplicated
From distribution.dbo.MSrepl_commands C with(nolock)
Right Join MaxXact MX On MX.XactSeqNo < C.xact_seqno And MX.PublisherDBID = C.publisher_database_id
Group By MX.ServerName, MX.PublisherDBID;



Результат во вложении, и цифры продолжают расти. Хотя, монитор репликаций показывает что всё хорошо, всё синхронизировано.

В чем может быть проблема, а главное, как её исправить?
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40067605
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Пробую вставить трассировочный маркер, для этих серверов висит в процессе ожидания:
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40067614
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала проверить запускется ли distribution agent
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40067623
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Для начала проверить запускется ли distribution agent


Чуть доработал скрипт, что-бы отображал агента.

Оба агента запущены, перезапуск не дал результатов, причем на сервер TETA данные продолжают реплицироваться.

Все агенты запускаются на распространителе.
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40067641
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чудес не бывает.

Добавьте в шаге запуска агента к distrib.exe опции -OutputVerboseLevel 2 и -Output <файл>
Потом смотрите в этом файле, что происходило при работе агента
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40067649
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Чудес не бывает.

Добавьте в шаге запуска агента к distrib.exe опции -OutputVerboseLevel 2 и -Output <файл>
Потом смотрите в этом файле, что происходило при работе агента


В агенте, у меня в шаге Run Agent вот что:

автор-Subscriber [GAMMA\SRVSQLNKC] -SubscriberDB [Discount] -Publisher [MAILSERVER\NEWBOOKSQL] -Distributor [MAILSERVER\NEWBOOKSQL] -DistributorSecurityMode 1 -Publication [Discount] -PublisherDB [Discount] -Continuous
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40067654
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле репликация завелась после того, как в публикации отключил одну из таблиц, после пересоздания снапшота, в мониторе репликаций отобразилось реальное время отставаний и подписки начали догоняться, после этого вернул таблицу в публикацию. Странная ситуация...
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089021
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Снова повторилась та же ситуация, с той же публикацией, по одной из 3х подписок растет очередь, другие подписки синхронизированы.

Агент запущен, но очередь продолжает расти.
На GAMMA рядом развернул копию базы подписки и подключил её подпиской к этой публикации, с ней проблем нет, очередь не растет, все таблицы синхронны.


авторЧудес не бывает.

Добавьте в шаге запуска агента к distrib.exe опции -OutputVerboseLevel 2 и -Output <файл>
Потом смотрите в этом файле, что происходило при работе агента

Так и не понял про этот совет, в джобах есть задание

MAILSERVER\NEWBOOKSQL-Discount-Discount-GAMMA\SRVSQLNKC-91

Это же и есть задание запуска агнета распространения?
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089196
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема актуальна, пересоздание подписки с повторной инициализацией результатов не дает, накатывается снимок, после чего отставание начинает снова расти. Рядом подписка в копию проблемной базы работает штатно, базы лежат на одном диске.
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089238
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрю в активные транзакции на подписчике:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT
  GETDATE() as now,
  DATEDIFF(SECOND, transaction_begin_time, GETDATE()) as tran_elapsed_time_seconds,
  st.session_id,
  txt.text, 
  *
FROM
  sys.dm_tran_active_transactions at
  INNER JOIN sys.dm_tran_session_transactions st ON st.transaction_id = at.transaction_id
  LEFT OUTER JOIN sys.dm_exec_sessions sess ON st.session_id = sess.session_id
  LEFT OUTER JOIN sys.dm_exec_connections conn ON conn.session_id = sess.session_id
    OUTER APPLY sys.dm_exec_sql_text(conn.most_recent_sql_handle)  AS txt
where program_name='MAILSERVER\NEWB_Discount_Discount'
ORDER BY
  tran_elapsed_time_seconds DESC;



Получаю 2 активные транзакции:
SPID 113 - это как раз открытая транзакция в базу, где данные не обновляются, транзакция появляется в активных и продолжает так висеть.
SPID 59 - это транзакции в базу-копию, у неё меняется transaction_id и transaction_begin_time.

Может эти данные наведут кого то на мысль?
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089239
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089240
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если смотреть трассировку сессии 113, то видно, что внутри сессии крутиться одна и та же команда:
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089253
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
видно, что внутри сессии крутиться одна и та же команда:
Обратите внимание: CPU - копеечный, Duration - огромный.
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089256
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
teCa
видно, что внутри сессии крутиться одна и та же команда:
Обратите внимание: CPU - копеечный, Duration - огромный.
А нет ли там триггера на BONUSES на подписчике?
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089273
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
А нет ли там триггера на BONUSES на подписчике?
Даже если есть, то это не важно.
Такая разница говорит о наличие ожиданий.
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089291
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, триггеров на подписчике нет, в копию реплика идет штатно.. копия на том же сервере и на том же диске.
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089305
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
alexeyvg
А нет ли там триггера на BONUSES на подписчике?
Даже если есть, то это не важно.
Такая разница говорит о наличие ожиданий.
Ожидания понятно, но из за чего они...
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089337
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
invm
пропущено...
Даже если есть, то это не важно.
Такая разница говорит о наличие ожиданий.
Ожидания понятно, но из за чего они...

А что за тип ожидания такой может быть, который в рамках одной базы происходит?
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40089370
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
alexeyvg
пропущено...
Ожидания понятно, но из за чего они...

А что за тип ожидания такой может быть, который в рамках одной базы происходит?
Ктож знает, надо посмотреть...
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40091644
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем ситуация опять повторилась. После предыдущих попыток запустить репликацию, удалось это только после того, как я развернул рядом копию из бэкапа, переименовал старую, дал старое имя копии, создал отдельную публикацию только с одной таблицей, и создал новую подписку. Но прошла неделя и подписка снова встала, паблишер передаёт команды дистрибьютеру, а на подписчика дистрибьютор не распространяет, опять копится очереди, на подписчике сессия ушла в какой то бесконечный цикл с одной командой. В мониторинге отображает латенси 0, производительность отлично.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
create procedure [sp_MSupd_dboBONUSES]
		@c1 bigint = NULL,
		@c2 varchar(36) = NULL,
		@c3 varchar(12) = NULL,
		@c4 varchar(13) = NULL,
		@c5 smallint = NULL,
		@c6 datetime2 = NULL,
		@c7 datetime2 = NULL,
		@c8 datetime2 = NULL,
		@c9 numeric(15,2) = NULL,
		@c10 numeric(15,2) = NULL,
		@c11 nvarchar(36) = NULL,
		@c12 nvarchar(max) = NULL,
		@c13 varchar(36) = NULL,
		@c14 numeric(15,2) = NULL,
		@c15 datetime2 = NULL,
		@c16 tinyint = NULL,
		@c17 varchar(36) = NULL,
		@pkc1 bigint = NULL,
		@bitmap binary(3)
as
begin  
	declare @primarykey_text nvarchar(100) = ''
update [dbo].[BONUSES] set
		[BNS_ID] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [BNS_ID] end,
		[B_USERID] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [B_USERID] end,
		[B_CARDNO] = case substring(@bitmap,1,1) & 8 when 8 then @c4 else [B_CARDNO] end,
		[B_ENABLE] = case substring(@bitmap,1,1) & 16 when 16 then @c5 else [B_ENABLE] end,
		[B_DT_INSERT] = case substring(@bitmap,1,1) & 32 when 32 then @c6 else [B_DT_INSERT] end,
		[B_DT_OPEN] = case substring(@bitmap,1,1) & 64 when 64 then @c7 else [B_DT_OPEN] end,
		[B_DT_BURN] = case substring(@bitmap,1,1) & 128 when 128 then @c8 else [B_DT_BURN] end,
		[B_VALUE] = case substring(@bitmap,2,1) & 1 when 1 then @c9 else [B_VALUE] end,
		[B_USED_VAL] = case substring(@bitmap,2,1) & 2 when 2 then @c10 else [B_USED_VAL] end,
		[B_PLACE] = case substring(@bitmap,2,1) & 4 when 4 then @c11 else [B_PLACE] end,
		[B_DESCRIPT] = case substring(@bitmap,2,1) & 8 when 8 then @c12 else [B_DESCRIPT] end,
		[B_RESOURCE_ID] = case substring(@bitmap,2,1) & 16 when 16 then @c13 else [B_RESOURCE_ID] end,
		[B_RESOURCE_SUM] = case substring(@bitmap,2,1) & 32 when 32 then @c14 else [B_RESOURCE_SUM] end,
		[B_DT] = case substring(@bitmap,2,1) & 64 when 64 then @c15 else [B_DT] end,
		[B_OPER_TYPE] = case substring(@bitmap,2,1) & 128 when 128 then @c16 else [B_OPER_TYPE] end,
		[CheckNumber] = case substring(@bitmap,3,1) & 1 when 1 then @c17 else [CheckNumber] end
	where [B_ID] = @pkc1
if @@rowcount = 0
    if @@microsoftversion>0x07320000
		Begin
			if exists (Select * from sys.all_parameters where object_id = OBJECT_ID('sp_MSreplraiserror') and [name] = '@param3')
			Begin
				
				set @primarykey_text = @primarykey_text + '[B_ID] = ' + convert(nvarchar(100),@pkc1,1)
				exec sp_MSreplraiserror @errorid=20598, @param1=N'[dbo].[BONUSES]', @param2=@primarykey_text, @param3=13233 
			End
			Else
				exec sp_MSreplraiserror @errorid=20598
		End
end



Вот эта транзакция повторяется бесконечное число раз.
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40091647
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В сети встретил несколько подобных проблем, но лишь в одном случае упоминается, что удалось решить проблему путем изменения кода приложения, но выглядит не очень правдоподобно, почему нет проблем на исходнике?

https://www.sqlteam.com/forums/topic.asp?TOPIC_ID=156507

авторВ конце концов я нашел ответ. Возникла проблема с кодом приложения, поэтому необходимо было попросить одного из веб-разработчиков исправить ее. Запрос на вставку / обновление таблицы был написан неправильно, поэтому обновлялась каждая запись в таблице, а не уникальная запись клиента! Таким образом, обновление таблицы так и не закончилось.
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40092086
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так а что с таблицей [dbo].[BONUSES] на паблишере?
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40092110
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,

Внешне все в порядке, никаких аномалий не вижу.

Пока удалось завести репликацию следующим образом.
Я отключил таблицу BONUSES из публикации, на подписке применились нераспространённые команды для других таблиц, после этого я снова подключил таблицу BONUSES к публикации и пересоздал снапшот, BONUSES пересоздалась на подписке и актуализировалась. Пока роста очереди не наблюдаю.
...
Рейтинг: 0 / 0
Проблема с репликацией.
    #40092369
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
SIMPLicity_,

Внешне все в порядке, никаких аномалий не вижу.

Пока удалось завести репликацию следующим образом.
Я отключил таблицу BONUSES из публикации, на подписке применились нераспространённые команды для других таблиц, после этого я снова подключил таблицу BONUSES к публикации и пересоздал снапшот, BONUSES пересоздалась на подписке и актуализировалась. Пока роста очереди не наблюдаю.


В приведённой Вами статье описывался случай когда таблица криво обновлялась (на источнике), что влекло её постоянную "репликацию". Судя по приведённой Вами процедуре (которая много-много-много раз запускается) , происходит резкий прирост трафика. В статье проблема была вызвана криворукостью программиста приложения. Как я понял статью (сильно не пинайте, - муй инглиш из бед) .

Поэтому вопрос - что происходит с таблицей BONUSES на издателе? И не является ли подписчик так же издателем?

PS Такое может быть, когда репликация идёт в обе стороны, но кто-то из издателей не понимает, что он начинает повторять свои реплики, вернувшиеся с подписчика (который также выступает издателем). Аналог - "широковещательный шторм", который позникает если два старых хаба зациклить (шторм начинался в тот момент, когда появлялось первое бродкастовое сообщение,- и сеть "падала").
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с репликацией.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]