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

Откуда:
Сообщений: 4
Доброго времени суток всем!

Задача. Есть некая база. Она активно пользуется, и быстро растёт, что на имеющемся железе приводит к тормозам. О ней известно достоверно, что записи в таблицах не удаляются, а просто помечаются как удалённые. Пользователи работают с данными за последний месяц. И очень редко когда возникает необходимость посмотреть данные старше трёх месяцев, но если такая необходимость возникнет, её необходимо реализовать. Собственно, из-за этого у меня сейчас база хранит данные за 4 года.
Есть задумка создать вторую базу, назовём её архивной или теневой. Исходную базу, в таком варианте, назовём оперативной. Все новые данные и все изменения продолжают идти в оперативной базе и параллельно копируются в архивную, используя штатный механизм репликации MSSQL. Оперативная база раз в неделю подчищается, чтобы в ней хранились данные не старше 3-х месяцев. Архивная база не чистится и продолжает расти. Предполагаемый эффект: работа с оперативной базой значительно ускорится из-за значительного уменьшения её размера. А при необходимости получить очень старые данные, можно подключиться к архивной базе и полчасика подождать отчёт, т.к. это бывает крайне редко.
Предполагаю использовать репликацию транзакций. Первые эксперименты меня удовлетворили. Осталось одно НО: как сделать, чтобы удаление старых данных в оперативной базе не реплицировалось в архивную? Чтобы по репе шли только insert и update?
Подскажите, пожалуйста, в какую сторону курить доки.
13 ноя 11, 12:25    [11588628]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций, но не всех  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Борисыч
Есть некая база. Она активно пользуется, и быстро растёт, что на имеющемся железе приводит к тормозам. ...
Не верно в корне. Размер не приводит к тормозам. Проблема в кривости рук тех кто писал эту систему.

Прискорбно то, что вы не сможете решить проблему административно, не вдаваясь в детали системы, вам всё равно нужно копаться в её структуре (по объектно). Даже чтоб банально где-то индексы навесить.

Но коль вы это уже и делаете (удаляете конкретными запросами, в конкретных таблицах, в конкретной последовательности), то не лучше всё-таки понавесить индексы и подрихтовать запросы?!
13 ноя 11, 16:03    [11588952]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций, но не всех  [new]
Борисыч
Member

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

К сожалению, я не являюсь разработчиком этой системы. С первого дня работы вижу, насколько всё косо построено, но сделать ничего не могу, т.к. не моё. Поэтому приходится выдумывать заплатки. Индексы уже понарисовал, где мог. Запросы рихтовать не могу: они идут из внешней программы, код которой от нас закрыт. Прогам на явные косяки неоднократно указывалось, но пока из моих замечаний они удосужились только включить несколько индексов в исходный скрипт создания базы. Мне это уже не поможет.
Возможно как-то улучшит ситуацию обновление железа сервера. Но, думается мне, что это только промежуточное решение: сейчас я получу счастье, но через пару лет столкнусь с той-же проблемой.
13 ноя 11, 16:23    [11588977]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций, но не всех  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Борисыч, если есть какой-либо признак, позволяющий различать актуальные и архивные данные, то смотрите в сторону фильтрованной подписки. Если такового признака нет, то можно попробовать на подписчике подсунуть фейковую процедуру удаления строки. Но в этом случае будут проблемы с переинициализацией подписки.
13 ноя 11, 16:56    [11589029]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций, но не всех  [new]
Борисыч
Member

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

Хм... В общем-то, главное, что их объединяет, это их возраст: они все старше 3-х месяцев. Дата записи в них лежит.
Значит, ставлю фильтр на возраст строчки. INSERT со столь старой датой быть не может. UPDATE тоже. Остаются только DELETE, их-то мы и отфильтруем. Наверное, это есть правильное решение. Огромное спасибо!
p.s. подскажите, в целях повышения образованности, что такое "фейковая процедура"?
13 ноя 11, 17:07    [11589044]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций, но не всех  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Борисыч
Значит, ставлю фильтр на возраст строчки. INSERT со столь старой датой быть не может. UPDATE тоже. Остаются только DELETE, их-то мы и отфильтруем. Наверное, это есть правильное решение. Огромное спасибо!
Фильтр -- это просто where-clause, которая накладывается на все инструкции.
Борисыч
p.s. подскажите, в целях повышения образованности, что такое "фейковая процедура"?
Процедура-обманка, которая ничего не делает.
13 ноя 11, 18:12    [11589172]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций, но не всех  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm
Процедура-обманка, которая ничего не делает.
Тут видимо нужно на основы репликации сослаться. Про создаваемые процедуры для репликации.
14 ноя 11, 16:39    [11594548]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций, но не всех  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Mnior
invm
Процедура-обманка, которая ничего не делает.
Тут видимо нужно на основы репликации сослаться. Про создаваемые процедуры для репликации.
Ну да, нужно было. Сходу в документации не найти. Но в воскресенье было лень Исправляюсь -- sp_addarticle (Transact-SQL). См. описание параметров @ins_cmd, @del_cmd и @upd_cmd.
14 ноя 11, 17:04    [11594801]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций, но не всех  [new]
Борисыч
Member

Откуда:
Сообщений: 4
invm
Борисыч
Значит, ставлю фильтр на возраст строчки. INSERT со столь старой датой быть не может. UPDATE тоже. Остаются только DELETE, их-то мы и отфильтруем. Наверное, это есть правильное решение. Огромное спасибо!
Фильтр -- это просто where-clause, которая накладывается на все инструкции.


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


Mnior
invm
Процедура-обманка, которая ничего не делает.
Тут видимо нужно на основы репликации сослаться. Про создаваемые процедуры для репликации.


Сам догадался, прочитав про процедуру-обманку и посмотрев на толпу новых процедурок в базе. Но всё-равно спасибо за доп. информацию.
14 ноя 11, 18:58    [11595799]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить