У меня серьезные проблемы с SQL Server - в частности, с репликацией транзакций.
Раньше у нас была физическая машина с Windows 2003 и SQL 2000. Мы называем это «WebDB». Сервер располагался в центре обработки данных, и мы подключались к нему через глобальную сеть.
Вернувшись в офис, у нас есть Windows 2008 с SQL 2008. Мы называем это «OfficeDB». Это публикация репликации транзакций с примерно 20 каталогами. Репликация на этот физический сервер прошла без проблем.
Недавно мы развернули новый сервер в среде, размещенной на виртуальной машине (Esxi). Эта среда также подключена к глобальной сети.
На этом сервере установлен SQL 2008 R2. Он имеет 12 ГБ памяти.
Мы сделали резервную копию исходной WebDB и восстановили ее на новом vWebDB. Я настроил его как подписчика на нашу публикацию из OfficeDB.
После инициализации все вроде работало нормально.
Мы переключили наше веб-приложение на использование нового сервера vWebDB.
Кажется, что ЦП постоянно колеблется около 100%. Ничего в веб-приложении не изменилось - запросы (хотя и несколько неэффективные - и я посмотрю на это в свое время) остались точно такими же.
Задержка репликации увеличилась в диапазоне от 10 минут до 2 часов (варьируется)
Если я отключу репликацию, сервер vWebDB, похоже, успокоится, а загрузка ЦП упадет примерно до 50-60%.
Однако при включенной репликации в конечном итоге БД начинает истекать тайм-аут, и пользователи получают ошибки и т. Д.
Примечания:
Я сделал прямое резервное копирование / восстановление исходной базы данных на новое виртуальное оборудование. Дело в том, что файлы MDF / LDF разделены на 2 виртуальных диска. Это хорошая практика в виртуальной среде?
Дистрибьютор был (и остается) на сервере OfficeDB. Агент распространения является дистрибьютором (push-подписка)
Меня озадачивает то, что эта установка отлично работала на старой машине. Я открыт для предложений по исправлению этого. Я отредактирую этот пост с ответами на вопросы, если это актуально.
Подписки настроены как push или pull? Если тянуть, я бы посоветовал, возможно, переместить их в толчок, чтобы вы уменьшили нагрузку на своего подписчика и посмотрели, поможет ли это. Кроме того, это странный способ инициализировать подписчика (из резервной копии другого подписчика). Вы видите какие-либо ошибки в мониторе репликации? Что профилировщик говорит о хранимых процедурах, отвечающих за доставку реплицированных команд? Если какой-то из них перегревается, как выглядит план запроса для него?