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

Откуда: Петрозаводск
Сообщений: 88
Когда запускаю синхронизацию (merge-репликация), SQL полностью обновляет некоторые таблицы.
Учитывая, что в этих таблицах десятки тыс. записей, синхронизация проходит минут 20-30.
Почему так происходит - непонятно. Пару дней назад все было OK, никакие настройки в БД не изменялись.

Смотрел профайлером: постоянно выполняются процедуры sp_upd_EAA638EF4ECD47AFC1B4D9CCB9B542C3
sp_upd_FCA9B12BEAAB4956C1B4D9CCB9B542C3
А tablenick в этих процедурах от двух таблиц, в кот. много записей.
29 сен 05, 14:12    [1922915]     Ответить | Цитировать Сообщить модератору
 HELP!!!  [new]
Danilo K
Member

Откуда: Петрозаводск
Сообщений: 88
Неужели никто не может предположить, в чём здесь причина.


Похоже, что "хулиганит" только один сервер (главный паблишер).
В сети есть ещё несколько дочерних паблишеров - они со своими
подписчиками синхронизируются нормально.
А на главном происходит такая штука:
Пока синхронизируюсь с одним подписчиком (Subscriber1) - всё нормально,
как только произвожу синхронизацию с каким-либо другим (Subscriber2),
начинается глюк:
Сервер обновляет все записи таблицы [_unt] с поколением 'x', которому
пренадлежит 69610 строк и [_sub] с поколением 'y', которому пренадлежит
3375 строк (и это кол-ва растут с добавлением новых записей).
Естественно он наращивает поколения 'x' и 'y', что вызывает обновления
всех этих строк и на других подписчиках.
Потом я могу нормально синхронизироваться с Subscriber2 до тех пор,
пока не запущу синхронизацию с другим SubscriberN - тогда
опять GoTo "Сервер обновляет все записи..."

Правильно ли я понимаю, как ставятся метки, при insert/update:
В MSmerge_genhistory создаётся (If Not exist) новое поколение 'z' для текущей таблицы с
guidlocal=00000000-0000-0000-0000-000000000000
А в MSmerge_contents для обновлённой/добавленной записи ставиться в соответствие это поколение 'z'.
Так?
Но у поколений 'x' и 'y' guidlocal<>0, да и имеются другие поколения с нулевым guidlocal
с art_nick=nickname([_unt]) и art_nick=nickname([_sub]) (т.е. поколения для этих двух таблиц).



CREATE TABLE [dbo].[_sub] (
	[id] [int] NOT NULL ,
	[obj_id] [int] NULL ,
	[subobject] [nvarchar] (3) COLLATE Cyrillic_General_CI_AS NULL ,
	[title] [nvarchar] (100) COLLATE Cyrillic_General_CI_AS NULL ,
	[class_teacher] [int] NULL ,
	[tutor] [int] NULL ,
	[assistant] [int] NULL ,
	[gridable] [int] NULL ,
	[academic_year] [int] NULL ,
	[enter_ses] [int] NOT NULL ,
	[queue] [int] NULL ,
	[s_ColLineage] [image] NULL ,
	[s_Generation] [int] NULL ,
	[s_GUID]  uniqueidentifier ROWGUIDCOL  NULL ,
	[s_Lineage] [image] NULL ,
	[upsize_ts] [timestamp] NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

CREATE TABLE [dbo].[_unt] (
	[id] [int] NOT NULL ,
	[sub_id] [int] NULL ,
	[1name] [int] NOT NULL ,
	[2name] [int] NOT NULL ,
	[3name] [int] NOT NULL ,
	[exclusive_name] [nvarchar] (255) COLLATE Cyrillic_General_CI_AS NULL ,
	[post] [nvarchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
	[cat] [int] NULL ,
	[source_id] [int] NULL ,
	[input_ses] [int] NULL ,
	[some_file] [int] NULL ,
	[main] [int] NULL ,
	[very_main] [bit] NOT NULL ,
	[queue] [int] NULL ,
	[character] [smallint] NULL ,
	[vip] [int] NULL ,
	[reshoot] [bit] NOT NULL ,
	[card] [nvarchar] (255) COLLATE Cyrillic_General_CI_AS NULL ,
	[s_ColLineage] [image] NULL ,
	[s_Generation] [int] NULL ,
	[s_GUID]  uniqueidentifier ROWGUIDCOL  NULL ,
	[s_Lineage] [image] NULL ,
	[upsize_ts] [timestamp] NULL ,
	[is_printed] [bit] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
30 сен 05, 06:03    [1925153]     Ответить | Цитировать Сообщить модератору
 Re: Глюк синхронизации  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Danilo K
...Почему так происходит - непонятно. Пару дней назад все было OK, никакие настройки в БД не изменялись....
Чудес не бывает... либо все же сделаны были какие-либо изменения, либо кто-то постоянно меняет большинство строк в таблицах...
30 сен 05, 06:34    [1925166]     Ответить | Цитировать Сообщить модератору
 Re: Глюк синхронизации  [new]
Danilo K
Member

Откуда: Петрозаводск
Сообщений: 88
tpg
...либо кто-то постоянно меняет большинство строк в таблицах...

Нет, такого точно не может быть, т.к. я проверял этот вариант.
Главный паблишер [MainP] синхронизирую с двумя подписчиками
поочерёдно сколько угодно раз и всё время этот глюк.
(Ни на паблишере, ни на подписчиках никаких изменений в это время не вносится)
30 сен 05, 14:53    [1927564]     Ответить | Цитировать Сообщить модератору
 Re: Глюк синхронизации  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Danilo K
А на главном происходит такая штука:
Пока синхронизируюсь с одним подписчиком (Subscriber1) - всё нормально,
как только произвожу синхронизацию с каким-либо другим (Subscriber2),
начинается глюк:
Сервер обновляет все записи таблицы [_unt] с поколением 'x', которому
пренадлежит 69610 строк и [_sub] с поколением 'y', которому пренадлежит
3375 строк (и это кол-ва растут с добавлением новых записей).
Естественно он наращивает поколения 'x' и 'y', что вызывает обновления
всех этих строк и на других подписчиках.
Потом я могу нормально синхронизироваться с Subscriber2 до тех пор,
пока не запущу синхронизацию с другим SubscriberN - тогда
опять GoTo "Сервер обновляет все записи..."

У вас случайно нет триггеров, которые срабатывают на insert/delete и выполняют действия, приводящие к изменениям в рабочих таблицах? Немного смахивает на то, что при заливке данных на подписчика там работают триггеры и переколбашивают все, что пришло с паблишера. Потом все устаканивается до синхронизации с другим подписчиком, который делает то же самое.

Кстати, не забывайте, что может быть цепочка триггеров и даже не на одной таблице, а на нескольких. Вставка в одну таблицу приведет к срабатыванию триггера на ней, в нем выполнится нечто, что приведет изменениям во второй таблице, там тоже сработает триггер, и т.д.
30 сен 05, 15:09    [1927669]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить