Повышение общей производительности репликации
Область применения: SQL Server Управляемый экземпляр SQL Azure
Используя рекомендации, приведенные в этом разделе, можно повысить общую производительность всех типов репликации, выполняющихся в приложении и сети.
Сервер и сеть
Задайте минимальное и максимальное количество памяти, выделенное для ядро СУБД Microsoft SQL Server.
По умолчанию ядро СУБД изменяет требования к памяти динамически на основе доступных системных ресурсов. Чтобы исключить случаи отсутствия доступной памяти во время выполнения операций репликации, используйте параметр min server memory для установки минимально доступной памяти. Во избежание размещения на диске страниц системной памяти можно также установить максимальный объем памяти с помощью параметра max server memory . Дополнительные сведения см. в статье Параметры конфигурации сервера "Server Memory".
Обеспечьте надлежащее размещение файлов базы данных и файлов журналов. Используйте отдельный диск для журнала транзакций всех баз данных, задействованных в репликации.
Можно уменьшить время, требуемое для записи транзакций, посредством сохранения файлов журналов на дисковом накопителе, отличном от того, который используется для хранения базы данных. Если необходимо обеспечить отказоустойчивость, можно создать зеркало такого диска, применяя технологию RAID-1 (Redundant Array of Inexpensive Disks). Используйте RAID 0 или 0+1 (в зависимости от требований к отказоустойчивости) для хранения других файлов базы данных. Матрицы независимых дисковых накопителей (RAID) рекомендуется применять независимо от того, используется репликация или нет.
Рассмотрите возможность добавления памяти на серверы, участвующие в репликации, особенно на сервер распространителя.
Используйте многопроцессорные компьютеры.
Агенты репликации могут также воспользоваться преимуществами дополнительных процессоров сервера. Если вы запускаете приложение при высокой загрузке центрального процессора, рассмотрите возможность установки более быстрого процессора или нескольких процессоров.
Используйте сеть с высокой пропускной способностью.
Скорость работы сети может быть критическим фактором производительности, особенно для репликации транзакций. Распространение изменений на подписчики может быть ускорено при использовании высокоскоростной сети со скоростью 100 мегабит/с (Mbps) или более быстрой сети. Если у сети низкая пропускная способность, установите подходящие настройки сети и параметры агента.
Структура базы данных
Следуйте рекомендациям по разработке баз данных.
Оптимизация производительности обычно положительно сказывается на работе как нереплицированной базы данных, так и реплицированной базы данных. Однако индексы следует использовать на подписчике аккуратно: первичный ключевой столбец на подписчике должен быть индексирован, однако дополнительные индексы могут негативно повлиять на производительность работы при операциях вставки, обновления и удаления.
Рассмотрите возможность установки параметра READ_COMMITTED_SNAPSHOT базы данных.
С целью сокращения вероятности возникновения состязаний между действиями пользователя и действиями агента репликации установите для баз данных публикации и подписки этот параметр:
ALTER DATABASE AdventureWorks SET READ_COMMITTED_SNAPSHOT ON
Дополнительные сведения см. в разделе ALTER DATABASE (Transact-SQL).
Осмотрительно используйте логику приложения в триггерах.
Использование бизнес-логики в пользовательских триггерах на подписчике может замедлить репликацию изменений на подписчик.
Для репликации транзакций может быть более эффективным включение этой логики в отдельные хранимые процедуры, используемые для применения реплицированных команд. Дополнительные сведения см. в статье Указание способа распространения изменений для статей транзакций.
Для репликации слиянием может быть эффективнее использовать обработчики бизнес-логики. Дополнительные сведения см. в статье Выполнение бизнес-логики при синхронизации слиянием.
Если используются триггеры для поддержки ссылочной целостности таблиц, опубликованных для репликации слиянием, укажите порядок обработки таблиц, чтобы уменьшить количества повторных попыток, выполняемых агентом слияния. Дополнительные сведения см. в разделе Указание параметров репликации слиянием.
Ограничьте использование типов данных больших объектов.
По сравнению с другими типами данных столбцов для хранения и обработки типа данных больших объектов требуется больше места и времени. Эти столбцы следует включать в статьи только в том случае, если они необходимы для работы приложения. Не рекомендуется использовать типы данных text, ntextи image . При включении больших объектов (LOB) рекомендуется использовать типы данных varchar(max), nvarchar(max), varbinary(max), соответственно.
Для репликации транзакций рассмотрите возможность использования профиля агента распространителя, именуемого Профиль распространения для потока OLEDB. Дополнительные сведения см. в статье Replication Agent Profiles.
Разработка публикации
Публикуйте только нужные данные.
В связи с тем, что настройка репликации достаточно проста, существует тенденция публиковать больше данных, чем требуется фактически. Это может привести к использованию дополнительных ресурсов баз данных распространителя и файлов моментальных снимков, а также понизить пропускную способность при работе с необходимыми данными. Избегайте публикации ненужных таблиц и рассмотрите возможность более редкого обновления публикаций.
Минимизируйте конфликты посредством использования надлежащей структуры публикации и верного алгоритма приложения.
Изменения данных на подписчиках допускают следующие типы репликации: репликация слиянием, репликация транзакций с обновляемыми подписками и одноранговая репликация транзакций. Репликация слиянием и репликация транзакций с обновляемыми подписками поддерживают конфликты данных, если данная строка обновляется более чем в одном узле между синхронизациями. Одноранговая репликация не поддерживает конфликты данных. Изменения данных должны быть секционированы. Независимо от типа используемой репликации рекомендуется использовать секционирование изменений везде, где это возможно, так как это сокращает обработку, выполняемую в целях обнаружения и разрешения конфликтов.
Изменения могут секционироваться путем публикации подмножеств данных на каждом подписчике или посредством прямого внесения приложением изменений заданной строки на указанном узле.
Репликация слиянием поддерживает публикацию подмножеств данных с помощью параметризованных фильтров с одиночной публикацией. Дополнительные сведения см. в разделе Параметризованные фильтры строк.
Репликация транзакций поддерживает публикацию подмножеств данных с помощью статических фильтров с несколькими публикациями. Дополнительные сведения см. в статье Фильтрация опубликованных данных.
Используйте фильтры обдуманно.
Когда публикация транзакций включает одну или более статей, использующих фильтры строк, агент чтения журнала должен применять фильтр к каждой строке, измененной обновлением таблицы, по мере сканирования журнала транзакций. Это влияет на производительность агента чтения журнала.
Аналогично репликация слиянием должна оценивать измененные или удаленные строки для определения тех подписчиков, которые должны получить эти строки. При использовании фильтров строк для уменьшения данных, востребованных на подписчике, следует учитывать, что эта обработка является более сложной и может потребовать больше времени, чем публикация всех строк таблицы. Рассмотрите возможность компромисса между сокращением требований к пространству для хранения на каждом подписчике и необходимостью достижения максимальной производительности. Дополнительные сведения о фильтрации см. в статье Фильтрация опубликованных данных.
Вопросы использования подписок
Если имеется большое число подписчиков, используйте подписки по запросу.
Агент распространителя и агент слияния выполняются на распространителе для принудительных подписок и на подписчиках для подписок по запросу. Использование подписок по запросу может повысить производительность за счет перемещения процесса обработки агента с распространителя на подписчики. Дополнительные сведения см. в статье Подписка на публикации.
Рассмотрите возможность повторной инициализации подписки, если данные у подписчиков чрезмерно устарели.
При необходимости отправки подписчикам большого количества изменений их повторная инициализация с помощью нового моментального снимка может оказаться быстрее, чем применение репликации для перемещения отдельных изменений. Дополнительные сведения см. в статье Повторная инициализация подписок.
Для репликации транзакций монитор репликации отображает на вкладке Нераспределенные команды информацию о количестве транзакций в базе данных распространителя, которые еще не были переданы на подписчик, и предполагаемое время, затрачиваемое на распространение этих транзакций. См. дополнительные сведения о просмотре сведений и выполнении задач с помощью монитора репликации.
Вопросы использования моментальных снимков
Запускайте агент моментальных снимков только в том случае, когда необходимо, и в периоды, когда отсутствует пиковая нагрузка.
Агент моментальных снимков выполняет массовое копирование данных из опубликованной таблицы издателя в файл каталога моментальных снимков на распространителе. Создание моментального снимка может быть ресурсоемким процессом, и его лучше планировать на время отсутствия пиковой нагрузки.
Если не требуется моментальный снимок в символьном формате, используйте моментальный снимок в собственном формате.
Используйте моментальный снимок собственного режима по умолчанию для всех подписчиков, кроме подписчиков, отличных от SQL Server Server Compact, для которых требуется моментальный снимок режима символа.
Используйте для публикации одну папку моментальных снимков.
Определяя свойства публикации, связанные с расположением моментального снимка, можно выбрать создание файлов моментальных снимков в папке моментальных снимков по умолчанию, или в альтернативной папке моментальных снимков, или в обеих папках. Создание файлов моментальных снимков в обеих папках требует дополнительного дискового пространства и большего объема обработки при работе агента моментальных снимков.
Поместите папку моментальных снимков на диск, который является локальным для распространителя и не используется для хранения файлов баз данных или журналов.
Агент моментальных снимков выполняет последовательную запись данных в папку моментальных снимков. Размещение папки моментальных снимков на отдельном диске, где нет баз данных или файлов журнала, уменьшает вероятность конфликтов дисков и ускоряет процесс создания и записи моментального снимка.
При создании базы данных подписки на подписчике рассмотрите возможность задания простой модели восстановления или модели восстановления с неполным протоколированием. Это позволяет минимизировать запись в журнал массовых вставок, выполняемых во время применения моментального снимка на подписчике. После того, как моментальный снимок применен к базе данных подписки, можно при необходимости включить другую модель восстановления (реплицированные базы данных могут использовать любую модель восстановления). Дополнительные сведения о выборе модели восстановления см. в разделе "Обзор восстановления и восстановления" (SQL Server).
Рассмотрите возможность использования альтернативной папки моментальных снимков и хранения сжатых моментальных снимков на сменных носителях при работе в сетях с низкой пропускной способностью.
Сжатие файлов моментальных снимков в альтернативной папке моментальных снимков может снизить требования к размеру места для хранения моментальных снимков на диске и облегчить перенос файлов моментальных снимков на сменных носителях.
В некоторых случаях сжатые моментальные снимки повышают производительность передачи файлов моментальных снимков по сети. Однако сжатие моментального снимка требует дополнительной обработки, выполняемой агентом моментальных снимков при создании файлов моментальных снимков и агентом распространителя или агентом слияния при применении файлов моментальных снимков. Это может замедлить создание моментального снимка и в некоторых случаях увеличить время, необходимое для применения моментального снимка. Кроме того, сжатые моментальные снимки не могут быть возобновлены в случае сбоя в сети, поэтому они непригодны для ненадежных сетей. Внимательно рассмотрите перечисленные достоинства и недостатки, если планируете применять сжатые моментальные снимки в сети. Дополнительные сведения см. в разделе Изменение параметров моментального снимка.
Рассмотрите возможность инициализации подписки вручную.
В некоторых случаях, например при больших объемах начальных наборов данных, предпочтительнее инициализировать подписку методами, отличными от инициализации с помощью моментального снимка. Дополнительные сведения см. в статье Инициализация подписки на публикацию транзакций без моментального снимка.
Параметры агента
Уменьшите уровни детализации агентов репликации за исключением начального периода проверки, наблюдения или отладки.
Уменьшите значение параметра –HistoryVerboseLevel и параметра –OutputVerboseLevel для агентов распространителя или слияния. Это сократит число новых строк, вставляемых для отслеживания действий агента и выходных данных. Вместо этого предыдущие журнальные сообщения с тем же статусом будут обновляться новой информацией. Увеличьте уровень детализации для проверки, наблюдения и отладки, чтобы получить как можно больше информации о деятельности агента.
Используйте параметр –MaxBCPThreads агентов моментальных снимков, слияния и распространителя (количество указанных потоков не должно превышать количество процессоров компьютера). Этот параметр определяет количество операций массового копирования, которые могут выполняться одновременно при создании и применении моментального снимка.
Используйте параметр –UseInprocLoader агентов распространителя и слияния (этот параметр не может быть использован, если опубликованные таблицы содержат XML-столбцы). Этот параметр вызывает использование агентом команды BULK INSERT при применении моментального снимка.
Параметры агента могут задаваться в профилях агента или в командной строке. Дополнительные сведения см. в разделе: