Покращена DeleteExpiredSessions, збереженої процедури в ASP.NET 2.0.


ВСТУП


Якщо і кількість сеансів і розмір окремих сеансів, збільшення у Microsoft ASP.NET 2.0, видалення минув сеансів може вплинути на загальну продуктивність ASP.NET, веб-сайту. Під час роботи з видалення, виконання, будь-які блокування, яка виникає на сервері під керуванням Microsoft SQL Server буде негативно вплинути на виконання запитів на ASP.NET SQL Server сеанс режим.

Останні вдосконалення, до DeleteExpiredSessions , збережені процедури, що підвищує продуктивність і зменшує, блокування. Це поліпшення, мінімуму негативний на виконання запитів на ASP.NET. Це поліпшення також відбуватися в наступну версію ASP.NET.

Додаткові відомості


Для використання нових, DeleteExpiredSessions , збереженої процедури, виконайте такі дії:


  1. Відкрийте консоль SQL Server Management Studio.
  2. Клацніть пункт Створити запит.
  3. Якщо використовується Непостійні стан сеансу SQL, вставте наведений нижче сценарій, у правій області вікна.
    USE [ASPState]GO

    DECLARE @ver int
    EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
    DECLARE @cmd nchar(4000)
    IF (@ver >= 8)
    SET @cmd = N'
    ALTER PROCEDURE dbo.DeleteExpiredSessions
    AS
    SET NOCOUNT ON
    SET DEADLOCK_PRIORITY LOW

    DECLARE @now datetime
    SET @now = GETUTCDATE()

    CREATE TABLE #tblExpiredSessions
    (
    SessionId nvarchar(88) NOT NULL PRIMARY KEY
    )

    INSERT #tblExpiredSessions (SessionId)
    SELECT SessionId
    FROM [tempdb].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
    WHERE Expires < @now

    IF @@ROWCOUNT <> 0
    BEGIN
    DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
    FOR SELECT SessionId FROM #tblExpiredSessions

    DECLARE @SessionId nvarchar(88)

    OPEN ExpiredSessionCursor

    FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId

    WHILE @@FETCH_STATUS = 0
    BEGIN
    DELETE FROM [tempdb].dbo.ASPStateTempSessions WHERE SessionId = @SessionId
    FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId
    END

    CLOSE ExpiredSessionCursor

    DEALLOCATE ExpiredSessionCursor

    END

    DROP TABLE #tblExpiredSessions

    RETURN 0'
    ELSE
    SET @cmd = N'
    ALTER PROCEDURE dbo.DeleteExpiredSessions
    AS
    SET NOCOUNT ON
    SET DEADLOCK_PRIORITY LOW

    DECLARE @now datetime
    SET @now = GETDATE()

    CREATE TABLE #tblExpiredSessions
    (
    SessionId nvarchar(88) NOT NULL PRIMARY KEY
    )

    INSERT #tblExpiredSessions (SessionId)
    SELECT SessionId
    FROM [tempdb].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
    WHERE Expires < @now

    IF @@ROWCOUNT <> 0
    BEGIN
    DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
    FOR SELECT SessionId FROM #tblExpiredSessions

    DECLARE @SessionId nvarchar(88)

    OPEN ExpiredSessionCursor

    FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId

    WHILE @@FETCH_STATUS = 0
    BEGIN
    DELETE FROM [tempdb].dbo.ASPStateTempSessions WHERE SessionId = @SessionId
    FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId
    END

    CLOSE ExpiredSessionCursor

    DEALLOCATE ExpiredSessionCursor

    END

    DROP TABLE #tblExpiredSessions

    RETURN 0'
    EXEC (@cmd)
    GO
    Якщо використовується постійний стан сеансу SQL, вставте наведений нижче сценарій, у правій області вікна.
    USE [ASPState]GO

    DECLARE @ver int
    EXEC dbo.GetMajorVersion @@ver=@ver OUTPUT
    DECLARE @cmd nchar(4000)
    IF (@ver >= 8)
    SET @cmd = N'
    ALTER PROCEDURE dbo.DeleteExpiredSessions
    AS
    SET NOCOUNT ON
    SET DEADLOCK_PRIORITY LOW

    DECLARE @now datetime
    SET @now = GETUTCDATE()

    CREATE TABLE #tblExpiredSessions
    (
    SessionId nvarchar(88) NOT NULL PRIMARY KEY
    )

    INSERT #tblExpiredSessions (SessionId)
    SELECT SessionId
    FROM [ASPState].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
    WHERE Expires < @now

    IF @@ROWCOUNT <> 0
    BEGIN
    DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
    FOR SELECT SessionId FROM #tblExpiredSessions

    DECLARE @SessionId nvarchar(88)

    OPEN ExpiredSessionCursor

    FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId

    WHILE @@FETCH_STATUS = 0
    BEGIN
    DELETE FROM [ASPState].dbo.ASPStateTempSessions WHERE SessionId = @SessionId
    FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId
    END

    CLOSE ExpiredSessionCursor

    DEALLOCATE ExpiredSessionCursor

    END

    DROP TABLE #tblExpiredSessions

    RETURN 0'
    ELSE
    SET @cmd = N'
    ALTER PROCEDURE dbo.DeleteExpiredSessions
    AS
    SET NOCOUNT ON
    SET DEADLOCK_PRIORITY LOW

    DECLARE @now datetime
    SET @now = GETDATE()

    CREATE TABLE #tblExpiredSessions
    (
    SessionId nvarchar(88) NOT NULL PRIMARY KEY
    )

    INSERT #tblExpiredSessions (SessionId)
    SELECT SessionId
    FROM [ASPState].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
    WHERE Expires < @now

    IF @@ROWCOUNT <> 0
    BEGIN
    DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
    FOR SELECT SessionId FROM #tblExpiredSessions

    DECLARE @SessionId nvarchar(88)

    OPEN ExpiredSessionCursor

    FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId

    WHILE @@FETCH_STATUS = 0
    BEGIN
    DELETE FROM [ASPState].dbo.ASPStateTempSessions WHERE SessionId = @SessionId
    FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId
    END

    CLOSE ExpiredSessionCursor

    DEALLOCATE ExpiredSessionCursor

    END

    DROP TABLE #tblExpiredSessions

    RETURN 0'
    EXEC (@cmd)
    GO
  4. Натисніть кнопку на виконання.
Щоб визначити, якщо базу даних стану сеансу настроєно як постійних або Непостійні стан сеансу SQL, скористайтеся такими характеристиками:
  • Non постійних SQL-стан сеансу
    Таблиці ASPStateTempApplications і ASPStateTempSessions створюються для зберігання дані бази даних tempdb.
  • Постійного SQL-стан сеансу
    ASPStateTempApplications і ASPStateTempSessions таблиці, створені в базі даних стану сеансу бази даних, щоб зберегти дані.