> 데이터 베이스 > MySQL 튜토리얼 > SQL Server 메모리에서 만료된 SqlDependency 개체를 효과적으로 제거하는 방법은 무엇입니까?

SQL Server 메모리에서 만료된 SqlDependency 개체를 효과적으로 제거하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-15 11:53:47
원래의
449명이 탐색했습니다.

How to Effectively Purge Expired SqlDependency Objects from SQL Server Memory?

SQL Server 메모리에서 만료된 SqlDependency 개체 지우기

SQL Server에서 SqlDependency 개체를 사용하려면 만료된 종속성으로 인한 메모리 누수를 방지하기 위해 신중한 관리가 필요합니다. 이 문서에서는 이를 처리하기 위한 효과적인 전략을 자세히 설명합니다.

SqlDependency의 정리 제한 사항 이해

SqlDependency는 만료된 연결을 자동으로 제거하지 않습니다. Stop()이 호출되고 연결된 SqlCommandSqlConnection 개체가 해제된 후에도 대화 그룹과 엔드포인트는 데이터베이스에 유지됩니다. 이러한 누적은 상당한 서버 메모리를 소모합니다.

수동 정리를 위한 SQL 쿼리

사용하지 않는 대화 끝점을 수동으로 지우고 메모리를 확보하려면 데이터베이스에서 다음 SQL 코드를 실행하세요.

<code class="language-sql">DECLARE @ConvHandle uniqueidentifier
DECLARE Conv CURSOR FOR
SELECT CEP.conversation_handle FROM sys.conversation_endpoints CEP
WHERE CEP.state = 'DI' or CEP.state = 'CD'
OPEN Conv;
FETCH NEXT FROM Conv INTO @ConvHandle;
WHILE (@@FETCH_STATUS = 0) BEGIN
    END CONVERSATION @ConvHandle WITH CLEANUP;
    FETCH NEXT FROM Conv INTO @ConvHandle;
END
CLOSE Conv;
DEALLOCATE Conv;</code>
로그인 후 복사

대안: SqlDependencyEx 클래스

오픈 소스 SqlDependencyEx 클래스 사용을 고려해 보세요. 테이블 변경 이벤트에 대한 데이터베이스 트리거와 기본 Service Broker 알림을 활용하여 다음과 같은 몇 가지 이점을 제공합니다.

  • 만료된 종속성을 자동으로 정리합니다.
  • 재구독 중 이벤트를 포함한 포괄적인 변경 사항 추적

SqlDependencyEx 사용 예

<code class="language-csharp">int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
          TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME)) 
{
    sqlDependency.TableChanged += (o, e) => changesReceived++;
    sqlDependency.Start();

    // Simulate table changes.
    MakeTableInsertDeleteChanges(changesCount);

    // Allow time for change processing.
    Thread.Sleep(1000);
}

Assert.AreEqual(changesCount, changesReceived);</code>
로그인 후 복사

이러한 방법을 사용하면 SqlDependency 개체에 대한 효율적인 메모리 관리와 최적의 SQL Server 애플리케이션 성능이 보장됩니다.

위 내용은 SQL Server 메모리에서 만료된 SqlDependency 개체를 효과적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿