В бизнесе, в котором я работаю, мы обсуждаем методы, позволяющие снизить нагрузку на чтение в нашей первичной базе данных.
Один из предложенных вариантов - иметь живую одностороннюю репликацию из нашей первичной базы данных в подчиненную. Затем приложения будут читать из подчиненной базы данных и записывать непосредственно в первичную базу данных. Так...
Каковы основные плюсы и минусы этого метода?





Несколько минусов:
Стратегия, которую я использовал, состоит в том, чтобы каждую ночь отправлять ключевые отчетные данные во вторичную базу данных, де-нормализуя их по пути, чтобы сложные запросы могли выполняться в этой базе данных вместо блокировки таблиц и кражи ресурсов с OLTP-сервера. Я не использую какие-либо формальные инструменты хранения данных или репликации, я скорее выявляю проблемные запросы, которые работают без актуальных данных, и создаю структуры данных на вторичном сервере специально для этих запросов.
В подходе "копировать все" определенно есть свои плюсы:
Мы используем одностороннюю репликацию, но не из одного и того же приложения. Наши приложения выполняют чтение-запись в основную базу данных, данные синхронизируются с базой данных replca, а инструменты отчетности используют эту реплику.
Мы не хотим, чтобы наше приложение считывало данные из другой базы данных, поэтому в этом сценарии я бы предложил использовать группы файлов и разбиение на разделы в основной базе данных. Использование групп файлов (особенно на разных дисках), а также разбиение файлов и индексов может значительно повысить производительность.