2009-09-18 3 views
30

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

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

+1

Для получения более подробной информации о состоянии сеанса ASP.NET посмотрите здесь:> http://msdn.microsoft.com /fr-fr/library/system.web.sessionstate.httpsessionstate%28v=vs.80%29.aspx – 7addan

ответ

53

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

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

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

См. Преамбулу в this article для подробного объяснения.

+0

Спасибо, Марк, очень ясный и точный ответ –

11

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

Performance

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

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

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

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

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

14

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

От here:

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

Также имейте в виду, что и SQL Server, и Out-of-process подразумевают сериализацию и десериализацию данных сеанса, что является дополнительная служебная нагрузка inproc не обременена. –

+0

Кроме того, SQL-сервер и внепроцессный процесс обычно требуют отправки данных по сети, поэтому также возникают накладные расходы по сетевым связям, которые также не обременены InProc. –