We couldn’t sign you in
Select the account you want to use.

Resumo

O Microsoft SQL Server executa gerenciamento dinâmico de memória com base nos requisitos de memória da carga e atividades atuais no sistema. No Windows, o SQL Server pode usar os mecanismos de notificação de memória fornecidos pela API do Windows De notificação de recursos consulta. Com base nestas informações da API do Windows de ConsultaMemoryResourceNotification ou do cálculo da memória, o SQL Server responde à situação de memória atual em um sistema específico. Isso proporciona os seguintes benefícios:

  • O sistema não define o conjunto de trabalho do processo de servidor SQL.

  • As páginas necessárias do banco de dados estão disponíveis na memória para reduzir as necessidades físicas de I/O.

Para mais informações, consulte o tópico "Gerenciamento dinâmico de memória" e o tópico "Opções de memória do servidor" no SQL Server Books Online.

Sintomas

Considere os seguintes problemas que podem ocorrer no Servidor SQL:

  • O desempenho do Servidor SQL diminui de repente.

  • Um computador que está executando o SQL Server deixa de responder por um curto período de tempo.

  • Ocorre um intervalo para aplicativos que se conectam ao Servidor SQL.

  • Os problemas ocorrem quando você executar até mesmo comandos simples ou usar aplicativos no sistema.

Uma das seguintes mensagens de erro pode ser registrada no registro de erro do Servidor SQL quando esses problemas ocorrem:

Mensagem de erro 1

DateTime spid1s Uma parte significativa da memória do processo do servidor sql foi paged para fora. Isso pode resultar em uma degradação do desempenho. Duração: 0 segundos. Conjunto de trabalho (KB): 1086400, comprometido (KB): 2160928, utilização da memória: 50%.

Mensagem de erro 2

DateTime spid1s Uma parte significativa da memória do processo do servidor sql foi paged para fora. Isso pode resultar em uma degradação do desempenho. Duração: 315 segundos. Conjunto de trabalho (KB): 410156, comprometido (KB): 2201296, utilização da memória: 18%.

Mensagem de erro 3

DateTime spid1s Uma parte significativa da memória do processo do servidor sql foi paged para fora. Isso pode resultar em uma degradação do desempenho. Duração: 646 segundos. Conjunto de trabalho (KB): 901904, comprometido (KB): 2215752, utilização da memória: 40%.

A equipe de suporte ao Servidor SQL da Microsoft também observou mensagens de erro adicionais ou avisos que são registrados no registro de erro do servidor SQL ou nos registros do Evento Windows. Estas mensagens assemelham-se ao seguinte:

            DateTime Server      Resource Monitor (0x13c43) Worker 0x0412C1E8 appears to be non-yielding on Node 0. Memory freed: 34152 KB. Approx CPU Used: kernel 171 ms, user 140 ms, Interval: 125093.

DateTime Server      * *******************************************************************************
DateTime Server      * BEGIN STACK DUMP:
DateTime Server      *   DateTime spid 0
DateTime Server      * Non-yielding Resource Monitor
DateTime Server      * *******************************************************************************

DateTime Server      * *******************************************************************************
DateTime Server      * BEGIN STACK DUMP:
DateTime Server      *   DateTime spid 0
DateTime Server      * Non-yielding IOCP Listener
DateTime Server      * *******************************************************************************

DateTime spid2s      LazyWriter: warning, no free buffers found.

DateTime spid4s      AppDomain xx (SQLCLR.dbo[runtime].xx) is marked for unload due to memory pressure.
DateTime spid4s      AppDomain xx (SQLCLR.dbo[runtime].xx) unloaded.

DateTime Logon       Error: 17189, Severity: 16, State: 1.
DateTime Logon       SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the Windows event logs for information about possible related problems. [CLIENT: xx.xxx.xx.xx]

Event Type:Error
Event Source:SQLBrowser
Event ID:8
Description: The SQLBrowser service was unable to process a client request. 
 

Essas mensagens ou avisos de erro adicionais podem aparecer junto com a mensagem de erro "Uma parte significativa da memória do processo do servidor sql foi paged out". Em vários casos, essas mensagens ou avisos de erro adicionais não apareceram junto com a mensagem de erro. Se você notar uma dessas mensagens de erro ou avisos, considere a paginação do conjunto de trabalho do Servidor SQL que é discutida neste artigo como uma causa possível, mas não como a única causa. Essas mensagens ou avisos de erro adicionais podem ser registrados por causa de várias outras condições ou causas.

Solução alternativa

Antes de tentar contornar esse problema, execute as etapas da seção "Como solucionar esse problema" para resolver esse problema. Se você ainda tiver esse problema, você pode evitar que o sistema operacional Windows pagine a memória do pool tampão do processo do servidor SQL bloqueando a memória que é alocada para o pool tampão na memória física. Você bloqueia a memória atribuindo as páginas de bloqueio no usuário de memória direto para a conta do usuário que é usada como conta de inicialização do serviço de servidor SQL.

Nota O uso de páginas de bloqueio na memória garante que a memória gerenciada pelo Servidor SQL não seja descartada. No entanto, pilhas de fios, o EXE e quaisquer imagens DLL, memória de pilha, memória CLR ainda pode ser paged para fora pelo sistema operacional. Nota Como o SQL Server 2008 SP1 Cumulative Update 2, as edições SQL Server Standard e Enterprise podem usar as páginas Lock no usuário de memória.Para obter mais informações sobre o suporte para páginas bloqueadas, clique no número seguinte do artigo para visualizar o artigo na Base de Conhecimento da Microsoft:

970070 Suporte para páginas bloqueadas no SQL Server 2005 Edição Padrão e no SQL Server 2008 Standard EditionPara atribuir as páginas de bloqueio no usuário de memória à direita, siga essas etapas:

  1. Clique em Iniciar,clique em Run,digite gpedit.msce, em seguida, clique em OK.Nota O A caixa de diálogo da política do grupo aparece.

  2. Expandir a configuração do computadore, em seguida, expandir as configurações do Windows.

  3. Expandir as configuraçõesde segurança e, em seguida, expandir Políticas locais.

  4. Clique na atribuiçãode direitos do usuário e, em seguida, clique duas vezes em páginas de bloqueio na memória.

  5. Na caixa de diálogo de configuração de política de segurança local,clique em adicionar usuário ou grupo.

  6. Na caixa de diálogo select users ou grupos, adicione a conta que tem permissão para executar o arquivo Sqlservr.exe e, em seguida, clique Ok.

  7. Feche a caixa de diálogo da política do grupo.

  8. Reinicie o serviço do SQL Server.

Depois de atribuir as páginas de bloqueio no usuário de memória e reiniciar o serviço de servidor SQL, o sistema operacional Windows não apresenta mais as páginas da memória do pool tampão no processo do servidor SQL. No entanto, o sistema operacional Windows ainda pode distribuir a memória do pool não tampão dentro do processo do servidor SQL. Você pode validar que o direito do usuário é usado pela instância do Servidor SQL, certificando-se de que a seguinte mensagem está escrita no Registro de Erro do Servidor SQL na inicialização:

"Usando páginas bloqueadas para pool tampão"Esta mensagem aplica-se apenas ao SQL Server. Para mais informações sobre esta mensagem no ERRORLOG, visite o seguinte:

Eu tenho que atribuir as páginas de bloqueio para privilégio de memória no sistema localQuando o sistema operacional Windows páginas para fora da memória piscina não tampão, você ainda pode encontrar problemas de desempenho. No entanto, as mensagens de erro que são mencionadas na seção "Sintomas" não estão registradas no registro de erro do servidor SQL.

Informações adicionais

Como solucionar esse problema

Existem três grandes categorias de problemas que podem causar este problema:

  1. Problemas relacionados a aplicativos: Todos os aplicativos juntos esgotaram a memória física disponível e o sistema operacional deve liberar alguma memória para novas solicitações de aplicativos de recursos. Normalmente, a abordagem aqui é encontrar quais aplicativos estão esgotando a memória e tomar as medidas necessárias para equilibrar a memória entre eles sem levar à exaustão ram.

  2. Problemas de driver do dispositivo: os drivers de dispositivo podem causar a paginação de todos os processos se o motorista chamar uma função de alocação de memória incorretamente.

  3. Problemas do sistema de operação

Para solucionar esse problema, siga estas etapas:

  1. Questões relacionadas a aplicações:

    Aplicativos juntos podem consumir toda a RAM no sistema. Se novos pedidos de memória são feitas, o sistema operacional precisa satisfazê-los e se não houver memória livre, ele irá aparar o conjunto de trabalho de execução de aplicações para satisfazer os pedidos de memória. Nesses casos, você pode observar que o conjunto de trabalho para a maioria, se não todas as aplicações cai significativamente. Para observar isso, colete o contador monitor de desempenho a seguir para todas as aplicações no sistema:

    Objeto de desempenho: Processo Contador: Conjunto de Trabalho

    Além disso, monitorar o contador a seguir para correlacionar a quantidade de memória física está disponível no sistema.

    Objeto de desempenho: Memória Contador: Memória disponível (MB)

    O comportamento típico que você pode observar é a redução da memória disponível perto de 0 MB, enquanto ao mesmo tempo uma queda súbita dos contadores Working Set para a maioria (todos) processos no sistema. Se observar esse comportamento, talvez seja necessário tomar medidas para reduzir o uso da memória no sistema, o que inclui, por exemplo, reduzir a memória máxima do servidor para o servidor SQL.

    Os aplicativos também podem usar o cache do sistema demais, e podem causar um grande crescimento do cache do sistema. Para responder ao crescimento do cache do sistema, o sistema afina o conjunto de trabalho do processo de servidor SQL ou de outros aplicativos. Se você tiver esse problema, você pode usar algumas funções de gerenciamento de memória no aplicativo. Essas funções controlam o espaço de cache do sistema que as operações de I/O do arquivo podem usar no aplicativo. Por exemplo, você pode usar a função SetSystemFileCacheSize e a função GetSystemFileCacheSize para controlar o espaço de cache do sistema que as operações de I/O do arquivo podem usar. Você pode usar o objeto de desempenho da memória para visualizar os valores de vários contadores neste objeto para determinar se o conjunto de trabalho do cache do sistema usa muita memória. Por exemplo, você pode visualizar os balcões de bytes residentes de Cache Bytes e Cache. Para mais informações sobre este tópico, visite os seguintes sites da Microsoft:

    Muito Cache Microsoft Windows Dynamic Cache Service 976618   Você experimenta problemas de desempenho em aplicativos e serviços quando o cache de arquivos do sistema consome a maior parte da RAM física

    Você pode baixar e implantar o "Microsoft Windows Dynamic Cache Service" para controlar a memória que é consumida pelo cache do sistema.

  2. Problemas com o driver do dispositivo:

    Se um motorista de dispositivo usar a função MmAllocateContiguousMemory e, se definir o valor do parâmetro HighestAcceptableAddress, para menos de 4 gigabytes (GB), o sistema operacional Windows poderá definir o conjunto de trabalho dos processos no sistema, incluindo o processo de servidor SQL. Para resolver esse problema, entre em contato com o fornecedor do motorista do dispositivo para atualizações do motorista.

    Quando um motorista de dispositivo tenta alocar a memória, o sistema operacional Windows pode distribuir o conjunto de trabalho de outros aplicativos. Este hotfix windows permite que você use o rastreamento de eventos para encontrar o driver do dispositivo que causa problema. Para encontrar mais informações sobre o motorista específico que causa o comportamento de corte conjunto de trabalho, consulte o artigo msdn "identificando motoristas que alocam memória contígua."

  3. Problemas do sistema de operação: Para resolver os problemas conhecidos que fazem com que o sistema operacional Windows reserve o conjunto de trabalho do processo do Servidor SQL, aplique os hotfixes descritos nos seguintes artigos da Base de Conhecimento da Microsoft.

    Nota Hotfixes são cumulativos. Uma versão posterior de um hotfix contém as versões anteriores desse hotfix.

  • O conjunto do servidor SQL pode ser cortado quando o sistema está usando alguns recursos avançados do TCP. Para mais informações, clique no seguinte número do artigo para visualizar o artigo na Base de Conhecimento da Microsoft:

942861Mensagem de erro quando um aplicativo se conecta ao Servidor SQL em um servidor que está executando o Windows Server: "Erro de rede geral", "falha de link de comunicação" ou "Um erro de nível de transporte"

  • Em um computador multiprocessador que está executando o Windows Server 2003, o processo do sistema pode consumir a maior parte da memória do sistema disponível. Para mais informações, clique no seguinte número do artigo para visualizar o artigo na Base de Conhecimento da Microsoft:

942486O processo do sistema pode consumir a maior parte da memória do sistema disponível em um computador multiprocessador que está executando o Windows Server 2003

  • Se o SQL Server estiver em execução em conjunto com a SAP R/3, você poderá ter um problema de paginação. Para mais informações, clique no seguinte número do artigo para visualizar o artigo na Base de Conhecimento da Microsoft:

931308 Você pode experimentar o aumento da paginação para o disco rígido quando você executar um programa SAP R/3 em um computador baseado em Windows Server 2003

  • Se você estiver executando o SQL Server no Windows Server 2008, você deve aplicar correções para problemas conhecidos que podem levar ao corte definido de trabalho ou ao consumo excessivo desnecessário de memória por outros componentes do sistema operacional. Para mais informações, clique nos seguintes números de artigos para visualizar os artigos na Base de Conhecimento da Microsoft:

971714 O processo de geração de relatório pode parar de responder quando você executar Perfmon.exe com o modelo de diagnóstico de direção ativa para gerar um relatório sobre um controlador de domínio baseado no Windows Server 2008

  • Se você estiver executando o SQL Server no Windows Serve 2008 R2, você deve aplicar correções para problemas conhecidos que podem levar ao corte definido de trabalho. Para mais informações, clique nos seguintes números de artigos para visualizar o artigo na Base de Conhecimento da Microsoft:

979149 Um computador que está executando o Windows 7 ou windows Server 2008 R2 torna-se sem resposta quando você executa um aplicativo grande

2155311 Mau desempenho ocorre em um computador que tem processadores baseados em NUMA e que está executando o Windows Server 2008 R2 ou Windows 7 se um segmento solicita muita memória que está dentro dos primeiros 4 GB de memória 2468345 O computador executa intermitentemente mal ou para de responder quando o excitador de Storport é usado no usuário 2008 R2 do windows

Como determinar a memória que é usada pelo servidor SQL

Você pode usar o Monitor de Desempenho para visualizar a memória usada pelo Servidor SQL quando as páginas bloqueadas na memória não estiverem ativadas.

O SQL Server também usa o contador de desempenho a seguir para expor a memória que o pool tampão aloca:

Objeto de desempenho: SQL Server:Memory Manager Contador: Memória total do servidor (KB)

Nota Se a instância do Servidor SQL for uma instância nomeada, o nome do objeto de desempenho é o seguinte:

MSSQL$InstanceName:Gerente de Memória

Além disso, você pode medir o efeito da paginação no Servidor SQL monitorando os seguintes contadores de desempenho:

Objeto de desempenho: Processo Contador: Bytes privados Exemplo: sqlservr Objeto de desempenho: Processo Contador: Conjunto de Trabalho Exemplo: sqlservr

O contador Private Bytes mede a memória virtual que está atualmente comprometida. O working set contra mede o quanto da memória virtual atualmente comprometida está ocupando memória física (RAM).

Se o valor do contador Working Set for menor do que o valor do contador total de memória do servidor (KB) (ou o de Bytes Privados), pelo menos alguma memória que faz parte do pool tampão foi cortada do conjunto de trabalho do Servidor SQL.

Você também pode observar a paginação geral (ajuste de trabalho) no sistema, monitorando o contador de desempenho a seguir, que mostra as páginas lidas e escritas em disco:

Objeto de desempenho: Memória Contador: Entradas/segundo da página e saídas/sec da página

Para obter mais informações sobre como usar esses contadores para determinar a página de memória, clique no número seguinte do artigo para visualizar o artigo na Base de Conhecimento da Microsoft:

889654 Como determinar o tamanho apropriado do arquivo da página para versões de 64 bits do Windows Server 2003 ou Windows XPDepois de atribuir as páginas de bloqueio no usuário de memória à direita e reiniciar o serviço de servidor SQL, o pool tampão do processo do servidor SQL ainda responde a eventos de notificação de recursos de memória e aumenta ou diminui dinamicamente em resposta a esses eventos. No entanto, você não pode ver alocações de memória para o pool tampão que estão bloqueados na memória nos seguintes contadores de desempenho:

  • O contador Private Bytes e o contador Working Set no Monitor de Desempenho

  • A coluna mem uso na guia processos em gerenciador de tarefas

A razão é que, uma vez que você ativar páginas bloqueadas na memória, o Servidor SQL começa a usar a API AWE e não aloca memória através do Gerente de Memória Virtual do SISTEMA Operacional. Depois que essas páginas são bloqueadas, esses contadores de desempenho representam as alocações de memória dentro do processo de servidor SQL para alocações que não usam o pool tampão. O contador de memória total do servidor (KB) do objeto de desempenho do SQL Server:Memory Manager ainda representa com precisão a memória que é alocada para o pool tampão.

Considerações importantes antes de atribuir as "páginas de bloqueio na memória" direito do usuário para uma instância de Servidor SQL

Você deve fazer considerações adicionais antes de atribuir as páginas Lock no usuário de memória certo. Se você designar esse usuário em sistemas configurados incorretamente, o sistema pode se tornar instável ou experimentar uma diminuição de desempenho de todo o sistema. Além disso, o evento ID 333 pode ser registrado no registro do evento. Se você entrar em contato com o Microsoft Customer Support Service (CSS) para esses problemas, os engenheiros da CSS podem pedir que você revogue esse direito de usuário para a conta de usuário usada como conta de inicialização do serviço de servidor SQL. Esta etapa pode ser necessária para coletar dados de desempenho importantes que os engenheiros da CSS podem usar para a configuração necessária das várias opções para o Servidor SQL e para outros aplicativos que estão sendo executados no sistema. Depois que os engenheiros do CSS coletarem os dados de desempenho, você pode atribuir as páginas de bloqueio no usuário de memória direto para a conta de inicialização do serviço de servidor SQL. Antes de atribuir as páginas de bloqueio no usuário de memória, certifique-se de capturar um registro do Monitor de Desempenho para determinar os requisitos de memória de vários aplicativos e serviços que estão instalados no sistema. Esses aplicativos também incluem o SQL Server . Para determinar os requisitos de memória, colete as seguintes informações de base:

  • Certifique-se de definir a opção de memória máxima do servidor e a opção de memória do servidor min corretamente. Essas opções refletem apenas o requisito de memória do pool tampão do processo do servidor SQL. Essas opções não incluem a memória que é alocada para outros componentes dentro do processo do servidor SQL. Estes componentes incluem o seguinte:

    • Os tópicos do trabalhador do servidor SQL

    • Vários DLLs e componentes que o processo do servidor SQL carrega dentro do espaço de endereço do processo do servidor SQL

    • O backup e restauração de operações

  • Os DLLs e componentes incluem vários provedores de OLE DB, procedimentos armazenados estendidos, objetos Microsoft COM que são usados para o procedimento armazenado sp_OACreate, servidores vinculados e CLR do Servidor SQL. A memória que é alocada para esses componentes cai a região da piscina não tampão do espaço de endereço do processo do servidor SQL. Para determinar idealmente a quantidade máxima de memória que todo o processo do servidor SQL pode usar, você deve subtrair a memória que é alocada para componentes que não usam o pool tampão da memória total que você deseja que o processo do servidor SQL use. Em seguida, você pode usar o valor restante para definir a opção de memória máxima do servidor. Antes de definir a opção de memória máxima do servidor e a opção de memória do servidor min, você deve revisar cuidadosamente o tópico "Definir as opções de memória manualmente" no SQL Server Books Online.

  • Determine a exigência de memória de outras aplicações e dos componentes do sistema operacional Windows. Os aplicativos podem incluir outros componentes do servidor SQL, por exemplo, agente de servidor SQL, agentes de replicação do servidor SQL, serviços de relatórios de servidores SQL, serviços de análise de servidores SQL, serviços de integração do servidor SQL e pesquisa de texto completa do servidor SQL. Aplicativos que realizam operações de backup e operações de cópia de arquivo podem usar muita memória. Considere operações como cópia em massa e o agente instantâneo que geram iO de arquivo. Você deve considerar o requisito de memória de todos esses aplicativos quando você determinar o valor da opção de memória do servidor máximo e da opção de memória do servidor min. Você pode usar o contador Private Bytes e o contador Working Set o objeto processo para cada processo para determinar o requisito de memória para um processo específico.

  • Por padrão, as páginas de bloqueio no direito do usuário de memória já foram atribuídas à conta interna do Sistema Local. Para mais informações, visite o seguinte site da Microsoft:

    Tenho que atribuir as páginas de bloqueio no privilégio de memória para o sistema Lcal?

  • Se você usar uma conta de usuário do Windows globalmente para todos os processos de servidor SQL em um domínio, determine os direitos do usuário que são atribuídos usando uma configuração de política de grupo. Um processo de servidor SQL de 32 bits pode usar essa conta como conta de inicialização. No entanto, essa conta requer as páginas de bloqueio no direito do usuário de memória para ativar o recurso de extensões de janelas de endereço (AWE). Para mais informações, consulte o tópico "Fornecendo a quantidade máxima de memória para o SQL Server" no SQL Server Books Online.

  • Antes de configurar a opção de memória máxima do servidor e a opção de memória do servidor min para várias instâncias do servidor SQL, considere os requisitos de memória do pool de não-buffer para cada instância do Servidor SQL. Em seguida, configure essas opções para cada instância do Servidor SQL.

Idealmente, você coleta essas informações básicas durante as cargas de pico. Portanto, você pode determinar os requisitos de memória para várias aplicações e componentes para suportar a carga de pico. Os requisitos de memória variam de um sistema para outro sistema, dependendo das atividades e das aplicações que estão sendo executados no sistema.

Você pode consultar as informações fornecidas na visão de gerenciamento dinâmico sys.dm_os_process_memory para entender se o sistema está encontrando condições de memória baixas. Para mais informações, consulte a referência online da SQL Server Books online no site a seguir:

sys.dm_os_process_memory (Transact-SQL)

Melhorias adicionadas no Windows Server 2008 e no Windows Server 2008 R2 que reduzem o corte do conjunto de trabalho

O Windows Server 2008 e o Windows Server 2008 R2 melhoram o mecanismo contíguo de alocação de memória. Essa melhoria permite que o Windows Server 2008 e o Windows Server 2008 R2 reduzam, em certa medida, os efeitos de desapagar o conjunto de aplicativos quando novas solicitações de memória chegam.  O seguinte é uma explicação das melhorias do whitepaper da Microsoft "Avanços no Gerenciamento de Memória no Windows":

No Windows Server 2008, a alocação de memória fisicamente contígua é muito aprimorada. Os pedidos para alocar memória contígua são muito mais propensos a ter sucesso porque o gerente de memória agora substitui dinamicamente páginas, normalmente sem aparar o conjunto de trabalho ou realizar operações de I/O. Além disso, muitos outros tipos de páginas, como pilhas de kernel e páginas de metadados do sistema de arquivos, entre outros, agora são candidatos à substituição. Consequentemente, a memória mais contígua está geralmente disponível a qualquer momento. Além disso, o custo para obter tais alocações é muito reduzido.Para ver o livro "Avanços no Gerenciamento de Memória no Windows", visite o seguinte site da Microsoft:

[Ativo 4009805]http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/MemMgt.docxPara mais informações, visite os seguintes sites da Microsoft:

Problemas de acabamento do conjunto de servidor esql

2001745 O corte de conjunto de trabalho pode afetar negativamente o desempenho do SQL, Exchange e Sistema Operacional o Windows 2003 Nota Em um computador baseado no Windows Server 2008, você deve instalar o Pacote de Serviço de Servidor SQL 2 (SP2) ou um pacote de serviço sql de servidor posterior. Os produtos de terceiros que este artigo discute são fabricados por empresas que são independentes da Microsoft. A Microsoft não faz nenhuma garantia, implícita ou não, sobre o desempenho ou confiabilidade desses produtos.

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?

Obrigado pelos seus comentários!

×