Когда я могу разместить IIS и SQL Server на одном компьютере? - PullRequest
13 голосов
/ 10 сентября 2009

Я читал, что неразумно устанавливать SQL Server и IIS на одну и ту же машину, но я не видел никаких доказательств этого. Кто-нибудь пробовал это, и если да, каковы были результаты? В какой момент их необходимо разделять? Нужен ли тюнинг? Меня особенно интересуют IIS7 и SQL Server 2008.

Если кто-то может предоставить цифры, показывающие, когда имеет смысл переходить на две машины, это было бы очень полезно.

Ответы [ 6 ]

47 голосов
/ 15 сентября 2009

Неразумно запускать SQL Server с любым другим продуктом, включая другой экземпляр SQL Server. Причиной этой рекомендации является характер того, как SQL Server использует ресурсы ОС. SQL Server работает в инфраструктуре управления памятью и планирования процессора в пользовательском режиме, которая называется SQLOS . SQL Server предназначен для работы с максимальной производительностью и предполагает, что это единственный сервер в ОС. Таким образом, ОС SQL резервирует всю оперативную память на компьютере для процесса SQL и создает планировщик для каждого ядра ЦП и распределяет задачи для всех планировщиков для запуска, используя все ЦП, которые он может получить, когда это необходимо. Поскольку SQL резервирует всю память, другие процессы, которым требуется память, заставят SQL видеть давление памяти , а ответ на давление памяти будет удалять страницы из пула буферов и скомпилированные планы из кэша планов. И поскольку SQL является единственным сервером, который фактически использует API-интерфейс уведомления о памяти (ходят слухи, что и следующий Exchange тоже), SQL является единственным процессом, который фактически сжимается, чтобы освободить место для других процессов (например, с утечкой ошибок). ASP бассейны). Это поведение также объясняется в BOL: Динамическое управление памятью .

Аналогичная картина происходит с планированием ЦП, когда другие процессы крадут время ЦП у планировщиков SQL. На высокопроизводительных системах и на машинах Opteron дела обстоят хуже, потому что SQL использует локальность NUMA для полного преимущества, но никакие другие процессы обычно не знают о NUMA и настолько, насколько ОС может попытаться сохранить локальность распределений в конечном итоге они распределяются по всей физической ОЗУ и снижают общую пропускную способность системы, поскольку ЦП не работают в ожидании доступа к граничным страницам. Есть и другие вещи, которые следует учитывать, например, TLB и увеличение пропускной способности L2 из-за того, что другие процессы занимают циклы ЦП.

Итак, подведем итог, вы можете запускать другие серверы с SQL Server, но это не рекомендуется. Если вы должны , то убедитесь, что вы изолировали два сервера, насколько это возможно. Используйте маски соответствия процессоров для и SQL и IIS / ASP, чтобы изолировать их на отдельных ядрах, сконфигурируйте SQL для резервирования меньшего количества оперативной памяти, чтобы он оставил свободную память для IIS / ASP, настройте пулы приложений для агрессивной перезапуска в предотвратить рост пула приложений.

6 голосов
/ 10 сентября 2009

Да, это возможно, и многие делают это.

Как правило, это вопрос безопасности и / или производительности.
Безопасность подвергается сомнению, поскольку ваша поверхность атаки увеличивается на коробке, которая имеет оба. Возможно, не проблема для вас.

Производительность ставится под сомнение, так как теперь ваш сервер обслуживает запросы веб и БД. Опять же, возможно, не проблема в вашем случае.

Тест против производства ....

Многие могут чувствовать себя хорошо в тестовых средах, но не на производстве ....

Опять вызов вашей команды. Мне нравится, чтобы мои тестовые и производственные среды были максимально похожими, если это возможно, но это мои предпочтения.

4 голосов
/ 15 сентября 2009

Не забывайте о проблеме обслуживания ... вы не можете перезагрузить / патчить один, не удаляя другой. Если они находятся в двух блоках, вы могли бы предоставить своим пользователям лучший опыт, чем отсутствие ответа от веб-сервера, если вы поддерживаете блок SQL.

Не самый высокий в списке, но следует отметить.

4 голосов
/ 10 сентября 2009

Это неразумно в определенных контекстах ... совершенно мудро в других.

Если ваша машина недостаточно загружена и не испытывает больших нагрузок, то есть преимущество при установке базы данных на той же машине, потому что вам просто не нужно ничего передавать по сети.

С другой стороны, если один или оба из IIS или базы данных будут находиться под большой нагрузкой, они, вероятно, начнут создавать помехи, и прирост производительности выделенного оборудования для каждого из них, вероятно, превысит потерю необходимости проходить через сеть.

4 голосов
/ 10 сентября 2009

Возможно, да.

Хорошая идея для производственной среды, нет.

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

2 голосов
/ 10 сентября 2009

Вы, конечно, можете. Вы столкнетесь с проблемами производительности, если, например, у вас большая база пользователей или если к БД выполняется много тяжелых запросов. Я работал на нескольких сайтах, обычно размещенных на 1 и 1, на которых IIS и SQL Server (Express!) Работают на одном компьютере с тысячами пользователей (сотнями одновременно) и миллионами записей в плохо спроектированных таблицах, доступ к которым осуществляется через плохо написанные хранимые процедуры и пользовательский опыт был, конечно, терпимым. Все сводится к тому, как сильно вы планируете поразить сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...