AWS DMS не может усечь журнал транзакций SQL - PullRequest
0 голосов
/ 01 мая 2018

Мы используем AWS DMS с SQL в качестве источника и DynamoDB в качестве места назначения.

У нас возникают проблемы с усечением журнала транзакций, мы видим 2 задачи SQL на AWS DMS, которые выглядят следующим образом:

begin transaction [WVGLQ7HFWFWJCCPK4RQVRQGDVE]; update [dbo].[awsdms_truncation_safeguard] set [latchLocker] = GETDATE() where [latchTaskName]='[WVGLQ7HFWFWJCCPK4RQVRQGDVE]' and [latchMachineGUID]='660a2d00-681b-46fd-89c3-3abdcfc8df18' and [LatchKey]='A'

Любая идея, как заставить AWS DMS завершить транзакцию, где мы можем обрезать журнал

Документация AWS гласит: https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html

Название Описание safeguardPolicy

Для достижения оптимальной производительности AWS DMS пытается получить все непрочитанные изменения из активного журнала транзакций (TLOG). Однако иногда из-за усечения активный TLOG может не содержать все непрочитанные изменения. Когда это происходит, AWS DMS обращается к журналу резервного копирования, чтобы зафиксировать отсутствующие изменения. Чтобы минимизировать необходимость доступа к журналу резервного копирования, AWS DMS предотвращает усечение одним из следующих способов:

  1. Запуск транзакций в базе данных: это метод по умолчанию. При использовании этого метода AWS DMS предотвращает усечение TLOG, имитируя транзакцию в базе данных. Пока такая транзакция открыта, изменения, которые появляются после запуска транзакции, не усекаются. Если вам нужно включить репликацию Microsoft в вашей базе данных, вы должны выбрать этот метод.

  2. Исключительно используйте sp_repldone в одной задаче: при использовании этого метода AWS DMS считывает изменения и затем использует sp_repldone, чтобы пометить транзакции TLOG как готовые к усечению. Хотя этот метод не включает какие-либо транзакции, его можно использовать только тогда, когда Microsoft Replication не запущена. Кроме того, при использовании этого метода только одна задача AWS DMS может получить доступ к базе данных в любой момент времени. Поэтому, если вам нужно запускать параллельные задачи AWS DMS для одной и той же базы данных, используйте метод по умолчанию.

Значение по умолчанию: RELY_ON_SQL_SERVER_REPLICATION_AGENT

Допустимые значения: {EXCLUSIVE_AUTOMATIC_TRUNCATION, RELY_ON_SQL_SERVER_REPLICATION_AGENT}

Пример: safeguardPolicy = RELY_ON_SQL_SERVER_REPLICATION_AGENT

readBackupOnly

Если для этого параметра задано значение Y, AWS DMS считывает изменения только из резервных копий журнала транзакций и не читает из активного файла журнала транзакций во время текущей репликации. Установка этого параметра в Y может добавить некоторую задержку источника для текущей репликации, но она позволяет вам контролировать активный рост файла журнала транзакций во время полной загрузки и текущих задач репликации.

Допустимые значения: N или Y. По умолчанию используется значение N.

Пример: readBackupOnly = Y

Мы используем SQL Replication, так как мы используем таблицы с первичными ключами, есть ли обходной путь? Есть ли что-то еще, что нам нужно настроить

1 Ответ

0 голосов
/ 12 июня 2018

У меня возникла такая же проблема.

Пробег:

EXEC sp_replcounters

Как сказано в документе, добавьте параметр

safeguardPolicy : EXCLUSIVE_AUTOMATIC_TRUNCATION 

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

EXEC sp_replshowcmds

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1

И снова запустить sp_replcounter

Проверьте это: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-repldone-transact-sql?view=sql-server-2017

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...