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