Оценки производительности сеанса ASP.NET

Я нашел много отличной информации, сравнивающей InProc, StateServer и SQLServer для управления состоянием ASP.NET, но я не могу найти сравнения производительности. Понятно, что InProc быстрее, чем StateServer, который, в свою очередь, быстрее, чем SQLServer, но не ясно, насколько быстрее. Я понимаю, что это сильно изменится в зависимости от приложения и окружающей среды, но относительное представление о том, как они сравниваются, было бы ценным.

Знаете ли вы о каких-либо тестах, которые были выполнены, которые вы могли бы поделиться? или иметь личный опыт с этим? Спасибо!

Есть хорошие тесты DevOps Guys. http://www.slideshare.net/devopsguys/best-performing-aspnet-session-state-providers, сравнивающие

  • ASP.Net In-Proc
  • Сервер состояния сеанса ASP.Net
  • Сервер ASP.Net Sql
  • CouchBase
  • MongoDb
  • RavenDb
  • Redis (этот, TheCloudlessSky , а не этот AngiesList )

AppHarbor также рекомендует memcached, но не имеет эталона. http://support.appharbor.com/kb/tips-and-tricks/using-memcached-backed-sessionprovider и предоставляет провайдера сеансов https://github.com/friism/Memcached-Providers

У меня есть личный опыт, но нет контрольных показателей или фактических записанных показателей. Сначала мы создали сайт Asp.Net, в котором хранился пользовательский объект большего размера, чем обычный, с использованием метода InProc. Мы обнаружили, что размер объекта и характер наших библиотек обработки ошибок вызвали 2 нежелательных поведения. Первый – это рециркуляция пула приложений в произвольные интервалы во время процессов. Поскольку процесс w3wp.exe будет перерабатывать себя в середине потока, он по существу сбрасывает сеанс, и объект будет потерян. Это привело к тому, что другой код ударил и восстановил сеанс, и это увеличило задержку наших транзакций. Мы также обнаружили (хотя это была не ужасная проблема, и я только обнаружил, что при попытке отлаживать потеря памяти, которую я только что описал), что размер объекта в сеансе наряду с некоторыми из объектов, загружаемых в библиотеки для самой страницы, w3wp.exe для повторного ввода и повторного ввода страницы. Для небольших запросов, в которых задействовался только объект сеанса или эти объекты библиотеки, но не оба, не было никакого нечетного поведения подкачки в процессе.

При переходе с InProc на StateServer мы обнаружили немедленную отдачу от утилизации. Пул фактически закончил переработку меньше, и даже тогда, когда наши объекты сеанса остались в отдельной памяти. Мы также заметили, что это создало универсальное условие «только для библиотеки», как описано выше в отношении пейджинга, и мы не испытывали его снова (хотя, по общему признанию, я прекратил проверку после 1 месяца безотказной работы). В то время мы получали очень небольшую задержку при доступе к некоторым библиотекам баз данных, но когда мы обновлялись с 2.0 до 3.5, эти аномалии доступа полностью исчезли. Мы надеемся на подобное поведение, когда мы скоро перейдем с 3.5 до 4.0.

Был протестирован тестовый сайт с использованием SQLServer в качестве государственного контроллера, и единственной задержкой, которую мы обнаружили, было начальное создание сеанса / хранение. Последующие вызовы обновления / доступа к сеансу в SQL не привели к существенному отличию от параметра StateServer. У меня нет никаких показателей, но ни в одной из систем не было ничего, что указывало бы на разницу в поведении. Временные метки имели сопоставимые различия во всех аспектах. Преимущество, которое мы получили, хотя и имело редкий потенциал использования, состояло в том, что мы смогли напрямую связать нашу пользовательскую базу данных с сервером состояния сеанса и сравнить временные метки, статусы и другие специализированные переменные сеанса. У нас не было настоящей потребности в этой функции, и опция StateServer уже была в самом разгаре на наших производственных серверах, поэтому решимость оставить ее как есть.

В конце концов, это было не так много, как использование памяти, которое убеждало нас сбросить InProc для StateServer. Преимущества скорости доступа определенно не перевешивали необходимость иметь данные в памяти в первую очередь.

Interesting Posts

Задачи SSIS 2008, выполняемые одновременно

Что такое escape-символ для SSIS Expression Builder?

SQL: выбор строк, содержащихся в группе

Msg 6558: CREATE AGGREGATE не удалось, поскольку тип «Concatenate» не соответствует спецификации UDAGG

Как вернуть данные из функции SQL String_split в таблицу

Будет ли многократно вставлять запросы в одну и ту же таблицу с прямым вызовом и вызвать процедуру-хранилище?

T-SQL: как создать «частную» функцию внутри хранимой процедуры

Цитирование через определенные значения на таблице и вставка новых строк

Записывать только определенные строки текстового файла в SSIS

Выбор первой строки для каждой группы

SQL Server: как найти результат с 2 критериями: один равен определенному столбцу; другой не равен другому столбцу

Определение транзакции TransactionScope или нет

MVC 3: Менеджер транзакций MSDTC не смог вытащить транзакцию из источника

Заблокировать базу данных, используя C #

Ошибка MS Access «ODBC – вызов не выполнен. Недопустимое значение символа для спецификации литья (# 0) "

Давайте будем гением компьютера.