쿼리가는 SQL Server 2005의 TokenAndPermUserStore 캐시의 크기가 커지면 실행 중인 더 걸릴

# 버그: 429501 (SQLBUDT)

증상

Microsoft SQL Server 2005에서는 다음과 같은 현상이 발생할 수 있습니다.

  • 일반적으로 빠르게 실행 하는 쿼리는 실행이 완료 되는 데 시간이 걸릴.

  • SQL Server 프로세스에 대 한 CPU 사용률 별로 이상 않습니다.

  • 임의 쿼리를 실행할 때 성능 저하를 발생 하면 sys.dm_exec_requests 또는 sys.dm_os_waiting_tasks 동적 관리 뷰에서 쿼리 보기 그러나 쿼리가 모든 리소스에 대 한 같지 않습니다.

  • TokenAndPermUserStore 캐시 저장소의 크기는 일정 한 비율로 증가합니다.

  • 몇 백 순서 대로 TokenAndPermUserStore 캐시 저장소의 크기는 메가바이트 (MB)입니다.

  • DBCC FREEPROCCACHE 명령 실행 경우에 따라 임시 릴리프를 제공합니다.

TokenAndPermUserStore 캐시의 크기를 모니터링 하려면 다음과 유사한 쿼리를 사용할 수 있습니다.

SELECT SUM(single_pages_kb + multi_pages_kb) AS 
"CurrentSizeOfTokenCache(kb)"
FROM sys.dm_os_memory_clerks
WHERE name = 'TokenAndPermUserStore'

원인

TokenAndPermUserStore 캐시 저장소 관리는 다음 보안 토큰 형식:

  • LoginToken

  • TokenPerm

  • UserToken

  • SecContextToken

  • TokenAccessResult입니다.

TokenAccessResult 항목의 서로 다른 클래스도 있습니다. 이 특정 한 문제의 65535 클래스에 있는 TokenAccessResult 항목에 표시 되기 때문에 발생 합니다.


비율이 임의의 동적 쿼리 실행에 있는 SQL Server 인스턴스에서 sys.dm_os_memory_cache_entries 뷰에서 65535 클래스에 있는 TokenAccessResult 항목을 많이 볼 수 있습니다. 65535 클래스는 TokenAccessResult 항목을 특별 한 캐시 항목을 나타냅니다. 이러한 캐시 항목이 쿼리에 대 한 누적 권한 검사가 사용 됩니다. 예를 들어, 다음 쿼리를 실행할 수 있습니다.

select * 
from t1 join t2 join t3

이 경우 SQL Server이 쿼리에 대 한 누적 권한 검사를 계산합니다. 이 검사는 사용자가 t1, t2, t3 선택 여부를 결정 합니다. 이러한 누적 권한 확인 결과 TokenAccessResult 항목에 포함 되 고 65535 id TokenAndPermUserStore 캐시 저장소에 삽입 됩니다. 동일한 사용자를 다시 사용 하거나 여러 번이 쿼리를 실행 합니다 경우 SQL Server 다시 TokenAccessResult 캐시 항목이 한 번

이 캐시 저장소를 증가 하는 경우 기존 항목을 다시 사용할 검색 시간이 증가 합니다. 스레드가 하나만 검색을 수행할 수 있도록이 캐시에 대 한 액세스를 제어 합니다. 이 문제가 결국 원인 성능이 저하를 쿼리하고 더 많은 CPU 사용률이 발생 합니다.

해결 방법

서비스 팩 정보

이 문제를 해결 하려면 SQL Server 2005 최신 서비스 팩을 구하십시오. 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.

913089 는 SQL Server 2005 최신 서비스 팩을 구하는 방법
이 문제를 해결 하려면 SQL Server 2005 서비스 팩 2 권한 토큰 캐싱 동작을 변경 합니다. 기본적으로 특정 임시 쿼리가 다시 실행 될 때 임시 쿼리가 TokenAccessResult 보안 캐시 엔트리가 캐시만 됩니다.

해결 방법

이 문제를 해결 하려면 다음 방법 중 하나 이상을 사용 합니다.

  • 임시 쿼리를 명시적으로 매개 변수화 합니다.

    참고

    • 이 메서드를 사용 하면 효과적으로 임의 쿼리 및 해당 계획을 다시 사용할 수 있습니다.

    • 이 메서드를 사용 하는 경우 다른 매개 변수와 함께 임시 쿼리를 실행할 때마다 TokenAccessResult 항목을 만들 필요가 없습니다.

    • 이 메서드를 사용 하 여 TokenAndPermUserStore 캐시 크기 적당 한 제한을 받게 됩니다.

  • 저장된 프로시저 내에서 임시 쿼리를 래핑하고 임의 쿼리를 직접 실행 하는 대신 저장된 프로시저를 사용 하 여.


    참고

    • 저장된 프로시저에 있는 문의 실행 계획이 캐시 됩니다.

    • TokenAccessResult 항목이 각 문에 대해 실행 계획 항목에 연관 됩니다.

    • 으로 남아 프로시저 캐시에 저장 하는 실행 계획을 저장된 프로시저를 실행할 때마다 TokenAccessResult 항목을 효율적으로 재사용 합니다. TokenAccessResult의 새 항목을 만들 필요가 없습니다.

  • FORCE_PARAMETERIZATION 데이터베이스 옵션을 설정 합니다.

    참고

    • 이 메서드를 사용 하면 효과적으로 임의 쿼리 및 해당 계획을 다시 사용할 수 있습니다.

    • 이 메서드를 사용 하는 경우 다른 매개 변수와 함께 임시 쿼리를 실행할 때마다 TokenAccessResult 항목을 만들 필요가 없습니다.

    • 이 메서드를 사용 하 여 TokenAndPermUserStore 캐시 크기 적당 한 제한을 받게 됩니다.

  • 실행 되는 로그인 서버 sysadmin 그룹의 구성원으로 임시 쿼리 변경을 추가 합니다.

    참고

    • TokenAccessResult 항목은 임시 쿼리에 대 한 sysadmin 서버 그룹의 구성원이 아닌 로그인 하 여 쿼리를 실행할 때만 만들어집니다.

    • TokenAccessResult 항목이 만들어지지 않습니다 때문에이 문제 TokenAndPermUserStore 캐시 크기를 관리 가능한 크기로 유지 합니다.

  • TokenAndPermUserStore 캐시에서 항목을 플러시.

    참고

    • 이렇게 하려면 다음 명령을 실행 합니다.

      DBCC FREESYSTEMCACHE (TokenAndPermUserStore)

    • 이상적으로 문제가 나타나기 시작 하면 TokenAndPermUserStore 캐시 크기 임계값을 감시 하려고 합니다.

    • 다음 작업을 수행 하는 예약 된 SQL Server 에이전트 작업을 만들 수 있습니다.

      • TokenAndPermUserStore 캐시 크기를 확인 합니다. 이렇게 하려면 다음 명령을 실행 합니다.

        SELECT SUM(single_pages_kb + multi_pages_kb) AS 
        "CurrentSizeOfTokenCache(kb)"
        FROM sys.dm_os_memory_clerks
        WHERE name = 'TokenAndPermUserStore'
      • 캐시 크기를 하면 관찰 된 임계값 보다 클 경우 다음 명령을 실행 합니다.

        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

참조

자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료에 있는 문서를 참조하십시오.

933564 수정: USERSTORE_TOKENPERM 캐시 저장소 메모리 소비가 점차 증가 하는 SQL Server 2005에서 발생

959823 TokenAndPermUserStore 캐시 저장소에서 SQL Server 2005 서비스 팩 3에 대 한 할당량을 사용자 지정 하는 방법

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

소중한 의견에 감사드립니다.

피드백을 주셔서 감사합니다. Office 지원 에이전트와 연락하는 것이 도움이 될 것 같습니다.

×