SQLServer против StateServer для производительности состояния сеанса ASP.NET

Я учусь на сертификацию MS, и у одного из практических тестов, которые я делаю, есть вопрос, где предмет спора - производительность между хранением сеанса в SQL Server, а не StateServer.

Учитывая, что приложение работает в веб-ферме, какое решение для состояния сеанса дает наилучшую производительность (SQL Server или StateServer) и, самое главное, почему?

4 ответа

Решение

State Server работает быстрее, потому что он хранит данные сеанса в словаре в памяти. SQL Server работает медленнее, потому что он хранится в базе данных, которая сохраняет данные на диск.

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

SQL-сервер более надежен, поскольку он сохраняется на диске и может быть настроен как кластер с возможностью восстановления после отказа.

Смотрите преамбулу в этой статье для подробного объяснения.

Небольшое, но важное замечание: InProc не может использоваться в ферме, как следует из названия, он выполняется в текущем процессе w3wp и не может использоваться в ферме. StateServer - это служба Windows, поэтому скорость использования StateServer зависит от того, насколько быстро работает машина, на которой работает служба сервера состояний, это только память. SQL, конечно, должен записывать данные и извлекать их, что, вероятно, медленнее, чем только память.

Отсюда:

  • В процессе. Процесс будет работать лучше, потому что память состояния сеанса хранится в процессе ASP.NET. Для веб-приложений, размещенных на одном сервере, приложения, в которых пользователь гарантированно перенаправляется на правильный сервер, или когда данные о состоянии сеанса не являются критическими (в том смысле, что они могут быть перестроены или повторно заполнены) это режим на выбор.
  • Вне процесса. Этот режим лучше всего использовать, когда важна производительность, но вы не можете гарантировать, с какого сервера пользователь будет запрашивать приложение. Вне процесса вы получаете производительность чтения из памяти и надежность отдельного процесса, который управляет состоянием для всех серверов.
  • SQL Server. Этот режим лучше всего использовать, когда надежность данных имеет основополагающее значение для стабильности приложения, поскольку база данных может быть кластеризована для сценариев сбоев. Производительность не так быстро, как вне процесса, но компромисс - более высокий уровень надежности.

По этой ссылке: http://www.eggheadcafe.com/articles/20021016.asp

Спектакль

  • InProc - самый быстрый, но чем больше данных сеанса, тем больше памяти используется веб-сервером, что может повлиять на производительность.

  • StateServer - при хранении данных базовых типов (например, строки, целого числа и т. Д.) В одной тестовой среде он на 15% медленнее, чем InProc. Однако стоимость сериализации / десериализации может повлиять на производительность, если вы храните много объектов. Вы должны выполнить тестирование производительности для вашего собственного сценария.

  • SQLServer - при хранении данных базовых типов (например, строки, целых и т. Д.) В одной тестовой среде он на 25% медленнее, чем InProc. То же предупреждение о сериализации, что и в StateServer.

Поэтому кажется, что StateServer немного быстрее, чем SQL Server, для хранения состояния сеанса.

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

SQL Server (в памяти) является ответом - доступно в SQL 2014

http://blogs.msdn.com/b/kenkilty/archive/2014/07/03/asp-net-session-state-using-sql-sever-in-memory.aspx

Другие вопросы по тегам