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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

Из здесь:

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

Ответ 3

С помощью этой ссылки: http://www.eggheadcafe.com/articles/20021016.asp

Производительность

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

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

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

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

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