Может ли кто-нибудь помочь мне ответить на, как я надеюсь, очень простой вопрос?
Предположим, у меня есть приложение, работающее с базой данных SQL Server, и я запускаю тесты производительности. Стоит ли ожидать улучшения производительности, если я настрою кластер сервера базы данных? Или это "просто" даст мне лучшее время работы и характеристики доступности с отказоустойчивостью и т. д.?
Я склонен думать, что это последний вариант, поэтому, если я считаю, что производительность базы данных низкая, мне следует поработать над дизайном приложения, а не покупать дополнительное оборудование...
С уважением, Эмиль.
решение1
Это очень сильно зависит от того, как настроен и доступен ваш кластер. Не помогает и то, что слово «кластер» может охватывать несколько различных расположений.
Некоторые договоренности будут иметь очень незначительное влияние, некоторые будут заметно замедлять работу (например, несколько активных серверов, когда транзакция должна ждать, пока все серверы обновятся, прежде чем она будет считаться зафиксированной, что может добавить значительную транзакционную задержку для операций, включающих вставки/обновления, также распределение информации о блокировках между серверами может аналогичным образом влиять на операции только для чтения) , а некоторые договоренности могут ускорить работу (например, несколько реплик только для чтения для распределения нагрузки только для чтения по нескольким машинам, если позволяют требования к блокировкам) .
Итак: да, нет или может быть! Если вы опишете свою схему более подробно [машины, ОС, СУБД, конфигурация кластера, какой код обращается к кластеру (один веб-сервер, много веб-серверов, много внешних клиентов, ...), шаблоны нагрузки, ...], вы можете получить гораздо лучший ответ.
(к сожалению, это не такой простой вопрос, как вы надеялись, извините!)
решение2
Нет, вы не увидите никакого повышения производительности. Кластерное решение в сервере MS SQL предназначено только для обеспечения высокой доступности, а не для масштабирования или балансировки нагрузки.
Вы можете настроить оба узла в кластере так, чтобы они были активны одновременно, но тогда они будут обслуживать разные базы данных и «перенимать» базы данных с другого узла только в случае его отказа.
Получение от SQL-сервера большей производительности, чем может обеспечить один сервер, — сложная задача, и я рискну заявить, что независимо от вашего сценария вы сможете легче решить проблемы с производительностью базы данных, используя больше оперативной памяти, более быстрые диски и настроив код базы данных.
решение3
Вам понадобится общее хранилище (SAN/NAS), и оно, скорее всего, будет работать лучше, чем напрямую подключенные диски, но кластер не работает лучше, чем автономный экземпляр. Кластер только для снижения риска отказа оборудования.