Проблема с производительностью репликации транзакций базы данных SQL Server 2012

Мы настроили репликацию транзакций базы данных SQL Server 2012 для клиентского веб-приложения .NET, чтобы распределять транзакции SQL и отчеты на разных серверах SQL.

Мы реализовали репликацию транзакций на SQL-Node1, работающем как Master DB Server. Мы настроили репликацию Master DB на SQL-Node2, чтобы вытащить отчеты в наше веб-приложение, которое имеет много транзакций и загрузку данных из записей Excel. около 10 миллионов записей каждый день.

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

Теперь мы стремимся распределить нагрузку на 3 различных узла SQL Server 2012. Если веб-приложение будет получать доступ и обрабатывать данные на SQL-Node1, запросы отчетов получают данные извлечения из SQL-Node2, а SQL-Node3 будет использоваться для загрузки таблицы Excel. данные в базу данных, которая будет реплицирована на все другие узлы SQL.

Текущая установка, все серверы имеют Windows Server 2008 Standard и SQL Server 2012 Enterprise Edition.

Примерный размер базы данных: 15 ГБ / Используемая репликация: роль транзакции / распространителя настроена на узле SQL 1 / роль подписчика настроена на узле SQL 2.

Мы ищем решение для решения вышеуказанных проблем, которое может распределять различные нагрузки (отчеты, загрузка данных, транзакции) и реплицировать данные между всеми узлами SQL.

Какая функция будет хорошо работать для вышеуказанного сценария среди SQL Server 2012 HA, репликации SQL Server или зеркалирования SQL Server?

Будем очень признательны за быстрый ответ ....


person nirish83    schedule 20.07.2013    source источник


Ответы (2)


Поскольку изменения происходят более чем на одном узле (транзакционные данные на узле 1, загрузка Excel на узле 3), «ничего из вышеперечисленного». Все вышеупомянутые технологии основаны на том, что изменения данных происходят в одном месте и распространяются на другие. Вы можете посмотреть на одноранговую репликацию, но это кажется излишним.

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

person Ben Thul    schedule 20.07.2013

Все технологии увязнут в большом импорте данных, который выполняется за одну большую транзакцию. Я предлагаю сделать это как функцию типа ETL. Импортируйте в промежуточную таблицу и переносите данные в производственную таблицу частями размера укуса (протестируйте многие размеры строк данных, чтобы найти размер, который лучше всего подходит для вашей среды). 2 сервера должны хорошо справляться с репликацией в кластере для высокой доступности с рабочими нагрузками, о которых вы говорите.

person SQLGuyChuck    schedule 04.01.2014