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

Откуда:
Сообщений: 1196
Всем добрый день!

Проблема следующая.
Есть большая реплицируемая таблица. Она обновляется раз в сутки одной транзакцией и число изменений значительно.
После обновления запускается синхронизация.
На подписчике эта таблица участвует в нескольких индексированных представлениях.
Из-за большого количества операций синхронизация растягивается на сутки,
хотя после реинициализации снимок реплицируется за полчаса.
Задержка из-за обновления индексов в представлениях.

Прошу совета по поводу модификации системы.
6 сен 12, 13:33    [13123603]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
SSS_DBA
Member

Откуда:
Сообщений: 12
Jovanny,
А что за версия сиквела ? БД Дистрибьютор где находиться?
6 сен 12, 13:54    [13123755]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Jun 17 2011 00:54:03
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)

Дистрибьютор - отдельный сервер.
6 сен 12, 14:08    [13123886]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Как именно обновляются данные на издателе? Одной инструкцией или несколькими? Могут ли эти инструкции без изменений применяться на подписчике?
6 сен 12, 14:17    [13123977]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Одной инструкцией.
На подписчике применяться не могут, поскольку там нет таблиц, из которых берутся данные для обновления реплицируемой таблицы.
6 сен 12, 14:24    [13124036]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Есть идея перед началом репликации удалять индексы с индексированных представлений, а потом их восстанавливать.
6 сен 12, 15:17    [13124471]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Jovanny
Есть идея перед началом репликации удалять индексы с индексированных представлений, а потом их восстанавливать.
Тогда другие процессы будут заблокированы на время синхронизации. Для предотвращения этого, можно на подписчике использовать SI.

Данные в этой таблице только изменяются или добавляются и удаляются тоже?
6 сен 12, 15:29    [13124569]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
invm
Данные в этой таблице только изменяются или добавляются и удаляются тоже?

INSERT, UPDATE, DELETE. Таблица обновляется через MERGE.
6 сен 12, 15:43    [13124703]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Покажите результат выполнения
exec sp_helparticle
для этой таблицы.
6 сен 12, 16:07    [13124926]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
<?xml version="1.0" ?>
<RESULTS0>
	<RECORD>
		<article id>18</article id>
		<article name>Product</article name>
		<base object>[DW].[Product]</base object>
		<destination object>Product</destination object>
		<synchronization object>[dbo].[syncobj_0x3039424646333732]</synchronization object>
		<type>1</type>
		<status>17</status>
		<filter>NULL</filter>
		<description>NULL</description>
		<insert_command>CALL [dbo].[sp_MSins_DWProduct]</insert_command>
		<update_command>SCALL [dbo].[sp_MSupd_DWProduct]</update_command>
		<delete_command>CALL [dbo].[sp_MSdel_DWProduct]</delete_command>
		<creation script path>NULL</creation script path>
		<vertical partition>0</vertical partition>
		<pre_creation_cmd>1</pre_creation_cmd>
		<filter_clause>NULL</filter_clause>
		<schema_option>0x000002440D0370DF</schema_option>
		<dest_owner>DW</dest_owner>
		<source_owner>DW</source_owner>
		<unqua_source_object>Product</unqua_source_object>
		<sync_object_owner>dbo</sync_object_owner>
		<unqualified_sync_object>syncobj_0x3039424646333732</unqualified_sync_object>
		<filter_owner>NULL</filter_owner>
		<unqua_filter>NULL</unqua_filter>
		<auto_identity_range>0</auto_identity_range>
		<publisher_identity_range>NULL</publisher_identity_range>
		<identity_range>NULL</identity_range>
		<threshold>NULL</threshold>
		<identityrangemanagementoption>0</identityrangemanagementoption>
		<fire_triggers_on_snapshot>0</fire_triggers_on_snapshot>
	</RECORD>
</RESULTS0>

Результат запроса отформатирован с помощью SSMSBoost.
6 сен 12, 16:17    [13125021]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Что меня смущает, так это что изменения на подписчике выполняются для каждой строки таблицы:
delete [DW].[Product]
where [ProductId] = @pkc1


Это правильно? Ведь на издателе вся таблица изменялась одной командой.
6 сен 12, 16:28    [13125140]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
смущенный пред таблой
Guest
Jovanny
Что меня смущает, так это что изменения на подписчике выполняются для каждой строки таблицы:
delete [DW].[Product]
where [ProductId] = @pkc1


Это правильно? Ведь на издателе вся таблица изменялась одной командой.

ну и забирай/пропихивай всё это изменение одной командой руками.
6 сен 12, 16:50    [13125386]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Jovanny,

Можете попробовать примерно такой трюк:

1. Создать на издателе и подписчиках две процедуры: uspStartUpdateProduct и uspEndUpdateProduct. На издателе пустые, на подписчиках uspStartUpdateProduct создает буферную таблицу, uspEndUpdateProduct применяет накопленные в буферной таблице изменения.

2. Модифицируете на подписчиках sp_MS*_DWProduct таким образом, чтобы при наличии буферной таблицы, даные складывались в нее.

3. Публикуете вызовы uspStartUpdateProduct и uspEndUpdateProduct. Ну и дальше понятно чего делать.
6 сен 12, 17:08    [13125518]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
Jovanny
Member

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

Спасибо, интересная идея, сейчас буду пробовать.
6 сен 12, 17:18    [13125628]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Jovanny,

В принципе, такая схема легче реализуется инстедным триггером на целевой таблице, который работает только во время репликации и наполняет буферную таблицу. В этом случае не нужно предпринимать специальных мер, чтобы при переинициализации подписки не потерять измененные версии процедур sp_MS*_DWProduct.
6 сен 12, 17:47    [13125889]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций и индексированные представления.  [new]
Jovanny
Member

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

Да, такой вариант лучше, потому что переинициализировать приходится по крайней мере раз в неделю.
6 сен 12, 18:04    [13126001]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить