Consultas levar mais tempo para concluir a execução quando o tamanho do cache TokenAndPermUserStore cresce no SQL Server 2005

Traduções deste artigo Traduções deste artigo
ID do artigo: 927396 - Exibir os produtos aos quais esse artigo se aplica.
Bug #: 429501 (SQLBUDT)
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Microsoft SQL Server 2005, poderá detectar os seguintes sintomas:
  • Consultas que normalmente executam mais rapidamente levar mais tempo para concluir a execução.
  • Utilização da CPU para o processo do SQL Server é mais comum.
  • Ao enfrentar uma redução no desempenho quando você executa uma consulta ad hoc, você exibir a consulta da exibição de gerenciamento dinâmico sys.dm_exec_requests ou sys.dm_os_waiting_tasks . No entanto, a consulta não parece estar aguardando a qualquer recurso.
  • O tamanho do armazenamento de cache TokenAndPermUserStore cresce a uma taxa constante.
  • O tamanho do armazenamento de cache TokenAndPermUserStore é na ordem de várias centenas megabytes (MB).
  • Em alguns casos, a execução do comando DBCC FREEPROCCACHE fornece alívio temporário.
Para monitorar o tamanho do cache TokenAndPermUserStore, você pode usar uma consulta semelhante à seguinte:
SELECT SUM(single_pages_kb + multi_pages_kb) AS 
   "CurrentSizeOfTokenCache(kb)" 
   FROM sys.dm_os_memory_clerks 
   WHERE name = 'TokenAndPermUserStore'

Causa

O armazenamento de cache TokenAndPermUserStore mantém os tipos de token de segurança do seguinte:
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult.
Classes diferentes de entradas TokenAccessResult também estão presentes. Esse problema específico ocorre porque existem muitas entradas de TokenAccessResult tem uma classe de 65535.

Em uma instância do SQL Server que tenha uma alta taxa de execução aleatória consulta dinâmica, você observa muitas entradas TokenAccessResult que tem uma classe de 65535 no modo de exibição sys.dm_os_memory_cache_entries . Entradas TokenAccessResult que tem uma classe de 65535 representam entradas de cache especial. Essas entradas de cache são usadas para verificações de permissão cumulativa para consultas. Por exemplo, você pode executar a consulta a seguir:
select * 
from t1 join t2 join t3
nesse caso, o SQL Server calcula uma verificação cumulativa permissão para esta consulta. Esta seleção determina se um usuário tem selecione no t1, t2, t3. Esses resultados da seleção de permissão cumulativa são incorporados em uma entrada TokenAccessResult e são inseridos no armazenamento de cache TokenAndPermUserStore com uma identificação de 65535. Se o mesmo usuário reutiliza ou executa essa consulta várias vezes, o SQL Server reutiliza a entrada de cache TokenAccessResult uma vez.

Quando este armazenamento de cache cresce, o tempo para procurar entradas existentes reutilizar aumenta. O acesso a esse cache é controlado para que apenas um thread possa realizar a pesquisa. Esse comportamento, eventualmente, causas consultar diminuir o desempenho e mais utilização da CPU ocorre.

Resolução

Informações sobre o service pack

Para resolver esse problema, obtenha o service pack mais recente para o SQL Server 2005. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
913089Como obter o service pack mais recente para o SQL Server 2005
Para resolver esse problema, o SQL Server 2005 Service Pack 2 altera o comportamento cache de tokens permissão. Por padrão, a entrada de cache de segurança TokenAccessResult para consultas ad hoc é armazenada em somente cache quando uma consulta ad hoc específica é executada novamente.

Como Contornar

Para contornar esse problema, use um ou mais dos seguintes métodos:
  • Parametrizar explicitamente consultas ad hoc.

    anotações
    • Esse método lhe permite reutilizar com eficiência consultas ad hoc e seus planos.
    • Quando você usa esse método, não é necessário criar uma entrada TokenAccessResult toda vez que executar a consulta ad hoc juntamente com parâmetros diferentes.
    • Com esse método, o tamanho do TokenAndPermUserStore cache permanece em limites razoáveis.
  • Quebra automática de consultas ad hoc em procedimentos armazenados e use procedimentos armazenados em vez de diretamente executar consultas ad hoc.

    anotações
    • Planos de execução são armazenados em cache para as instruções no 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 isso armazenado procedimento permanece no cache, cada execução do procedimento armazenado efetivamente reutiliza as entradas TokenAccessResult. Portanto, não é necessário criar TokenAccessResult nova entradas.
  • Habilite a opção de banco de dados FORCE_PARAMETERIZATION.

    anotações
    • Esse método lhe permite reutilizar com eficiência consultas ad hoc e seus planos.
    • Quando você usa esse método, não é necessário criar uma entrada TokenAccessResult toda vez que executar a consulta ad hoc juntamente com parâmetros diferentes.
    • Com esse método, o tamanho do TokenAndPermUserStore cache permanece em limites razoáveis.
  • Adicione o logon executa variados consultas ad hoc como membro do grupo de servidor sysadmin.

    anotações
    • TokenAccessResult entradas são criadas somente para uma consulta ad hoc quando a consulta é executada por um logon não é um membro do grupo de servidor sysadmin.
    • Como as entradas TokenAccessResult não são criadas, esse comportamento mantém o tamanho do cache TokenAndPermUserStore para um tamanho gerenciável.
  • Libere entradas do cache TokenAndPermUserStore.

    anotações
    • Para fazer isso, execute o seguinte comando:
      DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')
    • Idealmente, tente assistir o limite do tamanho de cache TokenAndPermUserStore quando problemas começam a aparecer.
    • Você pode criar um trabalho agendado SQL Server Agent que executa as seguintes ações:
      • Verifique o tamanho do tamanho de cache TokenAndPermUserStore. Para fazer isso, 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 do cache for maior que o limite que você observou, execute o seguinte comando:
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

Referências

Para obter mais informações, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
933564CORRECÇÃO: Um aumento gradual no consumo de memória para o armazenamento de cache USERSTORE_TOKENPERM ocorre no SQL Server 2005
959823Como personalizar a cota de armazenamento de cache TokenAndPermUserStore no SQL Server 2005 Service Pack 3

Propriedades

ID do artigo: 927396 - Última revisão: terça-feira, 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 Server 2005 Enterprise Edition
  • 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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