Consultas demorar mais tempo a concluir a execução quando aumenta o tamanho da cache TokenAndPermUserStore no SQL Server 2005

Traduções de Artigos Traduções de Artigos
Artigo: 927396 - Ver produtos para os quais este artigo se aplica.
N.º de bugs: 429501 (SQLBUDT)
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

No Microsoft SQL Server 2005, poderá detectar os seguintes sintomas:
  • Consultas que normalmente são executados mais rapidamente demorar mais tempo para concluir a execução.
  • Utilização da CPU de processo do SQL Server é mais do que é habitual.
  • Quando detecta um desempenho reduzido quando executa uma consulta ad hoc, ver a consulta da vista de gestão dinâmica sys.dm_exec_requests ou sys.dm_os_waiting_tasks . No entanto, a consulta não parece estar a aguardar que qualquer recurso.
  • Aumenta o tamanho do arquivo de cache TokenAndPermUserStore numa percentagem constante.
  • O tamanho do arquivo de cache TokenAndPermUserStore está no modo de várias centenas megabytes (MB).
  • Alguns casos, o execução do comando DBCC FREEPROCCACHE fornece segurança temporária.
Para monitorizar o tamanho da cache TokenAndPermUserStore, pode utilizar uma consulta que se assemelhe ao seguinte:
SELECT SUM(single_pages_kb + multi_pages_kb) AS 
   "CurrentSizeOfTokenCache(kb)" 
   FROM sys.dm_os_memory_clerks 
   WHERE name = 'TokenAndPermUserStore'

Causa

O arquivo de cache TokenAndPermUserStore mantém os tipos de token de segurança folllowing:
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult.
Também existem classes diferentes de TokenAccessResult entradas. Este problema específico ocorre porque existem demasiadas entradas TokenAccessResult com uma classe de 65535.

Numa instância do SQL Server que tiver uma taxa alta de execução da consulta dinâmica aleatório, repare muitas entradas TokenAccessResult com uma classe de 65535 na vista sys.dm_os_memory_cache_entries . Entradas de TokenAccessResult com uma classe de 65535 representam entradas de cache especiais. Estas entradas de cache são utilizadas para verificações de permissão cumulativa de consultas. Por exemplo, pode executar a consulta seguinte:
select * 
from t1 join t2 join t3
neste caso, o SQL Server calcula uma verificação de permissão cumulativa para esta consulta. Esta verificação determina se um utilizador tem de seleccionar t1, t2, t3. Estes resultados de verificação de permissão cumulativa são incorporados uma entrada TokenAccessResult e são inseridos no arquivo de cache TokenAndPermUserStore com um ID de 65535. Se o mesmo utilizador reutiliza ou executa esta consulta várias vezes, o SQL Server reutiliza a entrada da cache TokenAccessResult uma vez.

Quando este arquivo de cache aumenta, aumenta o tempo para procurar entradas existentes para voltar a utilizar. O acesso a esta cache é controlado para que apenas um thread pode efectuar a procura. Este comportamento, eventualmente, o faz com que consulta o diminuir o desempenho e mais utilização da CPU ocorre.

Resolução

Informações sobre Service Packs

Para resolver este problema, obtenha o service pack mais recente para o SQL Server 2005. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
913089Como obter o service pack mais recente para o SQL Server 2005
Para resolver este problema, SQL Server 2005 Service Pack 2 altera o comportamento colocação em cache de tokens permissão. Por predefinição, a entrada de cache de segurança TokenAccessResult de consultas ad hoc é armazenado em apenas cache quando uma consulta ad hoc específica é executada novamente.

Como contornar

Para contornar este problema, utilize um ou mais dos seguintes métodos:
  • Explicitamente parametrizar consultas ad hoc.

    notas
    • Este método permite-lhe reutilizar eficazmente consultas ad hoc e os respectivos planos.
    • Quando utiliza este método, não é necessário criar uma entrada TokenAccessResult sempre que executar a consulta ad hoc juntamente com parâmetros diferentes.
    • Com este método, o tamanho do TokenAndPermUserStore cache permanece em limites razoáveis.
  • Moldar consultas ad hoc de procedimentos armazenados e utilizar procedimentos armazenados, em vez de directamente executar consultas ad hoc.

    notas
    • Planos de execução são colocados em cache as instruções que estão a ser o procedimento armazenado.
    • A entrada TokenAccessResult para cada instrução está associada com a entrada de plano de execução.
    • Desde que o plano de execução para que esta armazenadas procedimento permanece na cache, cada execução do procedimento armazenado reutiliza eficazmente as entradas de TokenAccessResult. Por este motivo, não é necessário criar TokenAccessResult nova entradas.
  • Active a opção de base de dados FORCE_PARAMETERIZATION.

    notas
    • Este método permite-lhe reutilizar eficazmente consultas ad hoc e os respectivos planos.
    • Quando utiliza este método, não é necessário criar uma entrada TokenAccessResult sempre que executar a consulta ad hoc juntamente com parâmetros diferentes.
    • Com este método, o tamanho do TokenAndPermUserStore cache permanece em limites razoáveis.
  • Adicione o início de sessão que executa vários consultas ad hoc como membro do grupo de servidor sysadmin.

    notas
    • Entradas de TokenAccessResult só são criadas para uma consulta ad hoc quando a consulta é executada por um início de sessão não é um membro do grupo de servidor sysadmin.
    • Uma vez que não são criadas as entradas de TokenAccessResult, este comportamento mantém o tamanho da cache TokenAndPermUserStore para um tamanho gerenciáveis.
  • Limpar entradas da cache TokenAndPermUserStore.

    notas
    • Para efectuar este procedimento, execute o seguinte comando:
      DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')
    • Idealmente, tente ver o limite do tamanho da cache TokenAndPermUserStore quando problemas começam a aparecer.
    • Pode criar uma tarefa de SQL Server Agent agendada executa as seguintes acções:
      • Verifique o tamanho do tamanho da cache TokenAndPermUserStore. Para efectuar este procedimento, execute o seguinte comando:
        SELECT SUM(single_pages_kb + multi_pages_kb) AS 
           "CurrentSizeOfTokenCache(kb)" 
           FROM sys.dm_os_memory_clerks 
           WHERE name = 'TokenAndPermUserStore'
      • Se o tamanho da cache estiver maior do que o limite é respeitada, execute o seguinte comando:
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

Referências

Para obter mais informações, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
933564CORRECÇÃO: Um aumento gradual de consumo de memória para o arquivo de cache USERSTORE_TOKENPERM ocorre no SQL Server 2005
959823Como personalizar a quota para o arquivo de cache TokenAndPermUserStore no SQL Server 2005 Service Pack 3

Propriedades

Artigo: 927396 - Última revisão: 28 de julho de 2009 - Revisão: 4.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
Palavras-chave: 
kbmt kbtshoot kbinfo kbsql2005tsql kbprb KB927396 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 927396

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com