2016-03-14 7 views
0

Мы сталкиваемся с проблемами производительности с Azure Sql Data Sync, что таблицы отслеживания являются массивными и могут быть больше, чем исходные таблицы (2-10 ГБ для таблиц отслеживания). Это делает datasync очень медленным и db интенсивным. Это особенно болезненно в регистрации столов, где мы можем генерировать записи данных каждый месяц.Очистка метаданных в Azure SQL Data Sync

Чтение https://jtabadero.wordpress.com/2012/08/23/things-you-need-to-know-about-sql-data-sync-service/ пункта 17

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

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

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

Похоже, что есть способ безопасно обрезать эти данные, есть ли способ вызвать это в течение более короткого периода времени? Наша база данных синхронизируется много раз в течение дня, и было бы безопасно обрезать данные за 1 день хранения.

+0

Привет, Аарон. Я оставляю этот комментарий от имени команды продукта. Они поняли, что задали один и тот же вопрос в MSDN, и они будут использовать этот поток, чтобы следить за вами в этом вопросе. Благодарю. – weidi

+0

Спасибо, я продолжил с ними очень подробное описание. Когда есть решение, я отправлю его здесь. –

ответ

0
  1. Удалить все данные, которые вы хотите удалить из базы данных источника
  2. Запуск репликации и ждать его, чтобы закончить
  3. Я обычно запустить его еще раз, в случае, если больше данных был удален как часть нормального операции
  4. Остановить репликацию с автоматического запуска
  5. Удалять-захоронения = 1 записей из таблиц отслеживания как в ступице и говорили базы данных
  6. Включите репликацию обратно в автоматический

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

declare @last_Sync datetime 
set @last_Sync = '5-1-16 5:00pm' 

select count(*) from datasync.XXX_dss_tracking with(nolock) where sync_row_is_tombstone=1 and last_change_datetime < @last_Sync 

declare @i int 
set @i=0 

while (@i<100) begin 
    delete from datasync.XXX_dss_tracking where xxx_id in 
     (select top 1000 xxx_id from datasync.XXX_dss_tracking with (nolock) where sync_row_is_tombstone=1 and last_change_datetime < @last_Sync) 

    set @[email protected]+1 
end