Best practices for SQL Data Sync (Preview) (Рекомендации по синхронизации данных SQL (предварительная версия))

Область применения:База данных SQL Azure

В этой статье описываются рекомендации по синхронизации данных SQL Azure.

Общие сведения о синхронизации данных SQL см. в статье Синхронизация данных в нескольких облачных и локальных базах данных с помощью синхронизации данных SQL Azure.

Важно!

Синхронизация данных SQL Azure в настоящее время не поддерживает Управляемый экземпляр SQL Azure или Azure Synapse Analytics.

Безопасность и надежность

Агент клиента

  • Установите агент клиента, используя учетную запись пользователя с наименьшим уровнем привилегий и доступом к службе сети.
  • Установите агент клиента на сервере, который отличается от того, где установлен SQL Server.
  • Не регистрируйте локальную базу данных в нескольких агентах.
    • Избегайте этого, даже если вы синхронизируете разные таблицы для разных групп синхронизации.
    • Регистрация локальной базы данных в нескольких агентах клиента создает проблемы при удалении вами одной из групп синхронизации.

Учетные записи базы данных с наименьшими требуемыми привилегиями

  • Для настройки синхронизации:

    • Разрешения SQL Server: CREATE/ALTER TABLE, ALTER DATABASE, CREATE PROCEDURE, SELECT/ALTER SCHEMA, CREATE TYPE. Эти разрешения включены (вместе с другими разрешениями) в встроенную роль ddl_adminбазы данных.
    • На уровне группы ресурсов необходимо членство в роли участника базы данных SQL. Дополнительные сведения см. в статье Назначение ролей Azure с помощью портала Azure. Членство в более широких ролях, таких как участник или владелец, также работает, если оно уже назначено.
    • Разрешения на уровне подписки не должны быть необходимы, но могут предоставлять упрощенный (хотя и не крайне необходимый) способ предоставления необходимых разрешений для нескольких реализаций синхронизации данных Azure в подписке. Исходный нерекомендуемый API требовал эти разрешения Azure RBAC, но больше не должен использоваться.
      • "Microsoft.Sql/locations/syncMemberOperationResults/read"
      • "Microsoft.Sql/locations/syncAgentOperationResults/read"
      • "Microsoft.Sql/locations/syncGroupOperationResults/read"
  • Для непрерывной синхронизации.

    • Разрешения SQL Server: SELECT, INSERT, UPDATE и DELETE для пользовательских таблиц, выбранных для синхронизации. Разрешение EXECUTE для определяемых пользователем типов таблиц.
    • Разрешения SQL Server: SELECT, INSERT, UPDATE и DELETE для метаданных синхронизации и системных таблиц отслеживания. Разрешение EXECUTE для хранимых процедур, созданных службой.
      • Схема DataSync используется для системных объектов в центрах и базах данных-членах.
      • TaskHosting Схемы dss используются для системных объектов в базе данных метаданных синхронизации.
  • Для отзыва.

    • Разрешения SQL Server: ALTER во всех таблицах, часть синхронизации; SELECT и DELETE в таблицах метаданных синхронизации; CONTROL для таблиц отслеживания синхронизации, хранимых процедур и определяемых пользователем типов.
    • Для очистки удалите созданные системой объекты в DataSyncи dssTaskHosting схемах.

База данных SQL Azure поддерживает только один набор учетных данных. Для выполнения этих задач в пределах этого ограничения рассмотрите следующие варианты:

  • Изменяйте учетные данные для разных этапов (например, учетные данные1 для настройки и учетные данные2 для непрерывной синхронизации).
  • Изменяйте разрешения для учетных данных (то есть изменяйте разрешение после настройки синхронизации).

Аудит

Рекомендуется включить аудит на уровне баз данных в группах синхронизации. Узнайте, как включить аудит в базе данных SQL Azure или базе данных SQL Server.

Установка

Рекомендации по базам данных и ограничения

Размер базы данных

Когда вы создаете базу данных, установите максимальный размер, чтобы он всегда превышал размер базы данных, которую вы развертываете. Если этого не сделать, синхронизация завершится ошибкой. Несмотря на то, что синхронизация данных SQL не предлагает автоматическое увеличение размера, вы можете выполнить команду ALTER DATABASE, чтобы увеличить размер базы данных после ее создания. Убедитесь, что вы не превышаете максимальный размер базы данных.

Важно!

Синхронизация данных SQL хранит дополнительные метаданные в каждой базе данных. Обязательно учтите эти метаданные при определении необходимого пространства. Количество добавленных данных зависит от ширины таблиц (например, для узких таблиц требуются дополнительные накладные расходы) и объема трафика.

Рекомендации по таблицам и ограничения

Выбор таблиц

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

Первичные ключи

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

Перед использованием синхронизации данных SQL в рабочей среде проверьте эффективность начальной и непрерывной синхронизации.

Пустые таблицы обеспечивают лучшую производительность

Пустые таблицы обеспечивают лучшую производительность во время инициализации. Если целевая таблица пуста, служба синхронизации данных использует инструкцию bulk insert для загрузки данных. В противном случае служба синхронизации данных выполняет сравнение по строкам и вставку для проверки конфликтов. Тем не менее, если производительность не является ключевым фактором, можно выполнить настройку синхронизации между таблицами, которые уже содержат данные.

Подготовка баз данных назначения

Синхронизация данных SQL предоставляет базовую автоматическую подготовку баз данных.

В этом разделе рассматриваются ограничения при подготовке синхронизации данных SQL.

Ограничения автоматической подготовки баз данных

Для автоматической подготовки синхронизации данных SQL применяются следующие ограничения.

  • Выбирайте только столбцы, создаваемые в таблице назначения. Столбцы, которые не входят в группу синхронизации, не подготавливаются в таблицах назначения.
  • Индексы создаются только для выбранных столбцов. Если индекс исходной таблицы содержит столбцы, которые не входят в группу синхронизации, такой индекс не подготавливается в таблицах назначения.
  • Индексы столбцов типа XML не подготавливаются.
  • Синхронизация данных поддерживает только следующие два свойства индекса: Unique, Clustered/Non-Clustered. Другие свойства индекса, например IGNORE_DUP_KEY, где предикат фильтра и т. д. не поддерживаются, а целевой индекс подготавливается без этих свойств, даже если исходный индекс имеет эти свойства.
  • Проверочные ограничения не подготавливаются.
  • Имеющиеся триггеры в исходных таблицах не подготавливаются.
  • Представления и хранимые процедуры не создаются в базе данных назначения.
  • Действия ON UPDATE CASCADE и ON DELETE CASCADE в отношении ограничений внешнего ключа не создаются повторно в целевых таблицах.
  • Если у вас есть десятичные или числовые столбцы с точностью больше 28 знаков, при выполнении синхронизации данных SQL может возникнуть проблема переполнения конверсии. Рекомендуется ограничить количество знаков, определяющих точность десятичных или числовых столбцов, значением, которое не превышало бы 28.

Рекомендации

  • Используйте функцию автоматической подготовки синхронизации данных SQL только при тестировании службы.
  • Для рабочей среды подготовьте схему базы данных.

Где найти центральную базу данных

Сценарий перемещения из предприятия в облако

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

Сценарий перемещения из облака в облако

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

Смешанные сценарии

Примените предыдущие рекомендации к более сложным конфигурациям групп синхронизации, например со смешанными сценариями перемещения из предприятия в облако и из облака в облако.

Sync

Избегайте медленной и дорогостоящей начальной синхронизации

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

Как работает начальная синхронизация

Когда вы создаете группу синхронизации, начните с данных в одной базе данных. Если у вас есть данные в нескольких базах данных, синхронизация данных SQL обрабатывает каждую строку как конфликт, требующий разрешения. Это разрешение конфликтов приводит к замедлению начальной синхронизации. При наличии данных в нескольких базах данных начальная синхронизации может выполняться от нескольких дней до нескольких месяцев в зависимости от размера базы данных.

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

Рекомендация

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

При проектировании избегайте петель синхронизации

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

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

Изменения, которые не удается распространить

Причины, по которым не удается распространить изменения

Изменения могут не распространиться по одной из следующих причин:

  • Несовместимость схемы или типа данных.
  • Вставка нулевого значения в столбцах, не допускающих нуля.
  • Нарушение ограничений внешнего ключа.

Что происходит, когда изменения не распространяются?

  • Группа синхронизации показывает, что находится в состоянии предупреждения.
  • Подробности содержатся в средстве просмотра журнала в пользовательском интерфейсе портала.
  • Если проблема не будет устранена в течение 45 дней, база данных станет устаревшей.

Примечание.

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

Рекомендация

Регулярно отслеживайте состояние группы синхронизации и базы данных через интерфейс портала и журнала.

Обслуживание

Избегайте устаревших баз данных и групп синхронизации

Группа синхронизации или база данных в группе синхронизации могут устареть. Если группа синхронизации устаревает, она перестает работать. Если база данных устаревает, данные могут быть утеряны. Лучше избежать этого сценария, а не восстанавливать данные после него.

Избегайте появления устаревших баз данных

База данных получает состояние устаревшей, если она находилась в автономном режиме более 45 дней. Чтобы избежать устаревания баз данных, следите за тем, чтобы ни одна из них не отключалась на срок более 45 дней.

Избегайте появления устаревших групп синхронизации

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

Группа синхронизации может не применять изменения по одной из следующих причин:

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

Чтобы предотвратить устаревание групп синхронизации, сделайте следующее:

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

Избегайте проблем с отменой подготовки

При определенных обстоятельствах отмена регистрации базы данных в агенте клиента может привести к сбою синхронизации.

Сценарий

  1. Группа синхронизации A была создана с использованием экземпляра базы данных SQL и базы данных SQL Server, которая связана с локальным агентом 1.
  2. Та же самая локальная база данных регистрируется в локальном агенте 2 (этот агент не связан с какой-либо группой синхронизации).
  3. При отмене регистрации локальной базы данных в локальном агенте 2 удаляются таблицы отслеживания и метаданных из группы синхронизации A для локальной базы данных.
  4. Операции группы синхронизации A завершаются такой ошибкой: The current operation could not be completed because the database is not provisioned for sync or you do not have permissions to the sync configuration tables (Текущая операция не может быть завершена, потому что база данных не подготовлена для синхронизации или у вас нет разрешений для таблиц конфигурации синхронизации).

Решение

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

Чтобы исправить ошибку, сделайте следующее:

  1. Удалите базу данных из каждой группы синхронизации, к которой она принадлежит.
  2. Добавьте базу данных обратно в каждую группу синхронизации, из которой вы удалили ее.
  3. Разверните каждую затронутую группу синхронизации (при этом действии подготавливается база данных).

Изменение группы синхронизации

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

Вот как следует поступить вместо этого: сначала удалите базу данных из группы синхронизации. Затем разверните изменение и дождитесь отмены подготовки. После отмены подготовки вы можете отредактировать группу синхронизации и развернуть изменения.

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

Исключение времени ожидания обновления схемы

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

Решение

Чтобы устранить эту проблему, рассмотрите возможность масштабирования ресурсов базы данных метаданных синхронизации.

Дальнейшие действия

Дополнительные сведения о синхронизации данных SQL см. в следующих материалах:

Дополнительные сведения о Базе данных SQL см. в разделах: