Наша архитектура базы данных состоит из двух серверов Sql Server 2005, каждый из которых имеет экземпляр одинаковой структуры базы данных: один для всех операций чтения и один для всех операций записи. Мы используем репликацию транзакций, чтобы поддерживать актуальность прочитанной базы данных.
Два сервера действительно имеют очень высокую производительность (сервер записи имеет 32 ГБ ОЗУ) и подключены через оптоволоконную сеть.
Принимая решение об этой архитектуре, мы полагали, что задержка репликации данных на сервер чтения будет составлять несколько миллисекунд (очевидно, в зависимости от нагрузки). На практике мы наблюдаем задержку около 2-5 секунд даже в самых простых случаях, что неудовлетворительно. В простейшем случае я имею в виду обновление одного значения в одной строке в одной таблице в базе данных записи и просмотр времени, необходимого для наблюдения нового значения в базе данных чтения.
Какие факторы мы должны учитывать, чтобы достичь задержки ниже 1 секунды? Это вообще достижимо?
В качестве альтернативы, мы должны рассмотреть другой способ репликации? Как лучше всего размещать данные и файлы журналов?
Редактировать
Спасибо всем за совет и понимание - я считаю, что латентные периоды, которые мы переживаем , являются нормальными; наша компания по хостингу баз данных ошибочно повела нас к ожиданиям!
Мы используем метод, описанный в нижней части этой статьи MSDN (под заголовком "масштабирование баз данных"), и мы не смогли правильно обработать это предупреждение:
Следствием создания таких специализированных баз данных является задержка: для записи теперь потребуется время для распространения в базах данных считывателя. Но если вы справитесь с задержкой, потенциал масштабирования огромен.
Сейчас мы смотрим на реализацию изменения в нашем механизме кэширования, который обеспечивает чтение из базы данных записи, когда элемент данных считается «изменчивым».