Excessive load on ASP.NET Session State store


Description

Implementation details

Sitecore relies on the default implementation of the ASP.NET SessionStateModule for session state management.

To avoid data collisions in the session store and unexpected session state behavior, the SessionStateModule and SessionStateStoreProviderBase classes include the functionality that exclusively locks the session store item for a particular session during the execution of an ASP.NET page.

If the SessionStateModule instance encounters locked session data during a call to either the GetItemExclusive or GetItem methods, it re-requests the session data at half-second intervals until either the lock has been released or the amount of time specified in the ExecutionTimeout property has elapsed.

This behavior is fully described in the Locking Session-Store Data MSDN article. You can obtain detailed information about the specific ASP.NET SessionStateModule behavior by providing the reference number 117091416336585 to Microsoft Support.

Excessive load nature

If multiple requests arrive with the same ASP.NET session identifier, each of them tries to obtain the exclusive lock for the session item, even though only one can succeed at a time. This causes an excessive load on the session state store produced by multiple threads that try to simultaneously lock the same unit.

Symptoms

You can observe the following symptoms when the session state store is under heavy load:

Solution

To resolve this issue, consider the following options: