Sumário
Este artigo descreve a saída do comando DBCC MEMORYSTATUS. Esse comando frequentemente é usado para solucionar problemas de consumo de memória do Microsoft SQL Server.
Este artigo descreve os elementos da saída para o Gerenciador de memória, para o resumo do uso da memória, para obter as informações agregadas de memória, para obter as informações de distribuição buffer, as informações do pool de buffer e as informações de cache de procedimento. Ele também descreve a saída sobre objetos de memória global, sobre os objetos de memória de consulta, sobre otimização e sobre os agentes de memória.
INTRODUÇÃO
O comando DBCC MEMORYSTATUS apresenta um instantâneo do status de memória atual do Microsoft SQL Server. Você pode usar a saída desse comando para solucionar problemas de consumo de memória no SQL Server ou para solucionar problemas de erros de falta de memória específicos. (Muitos erros de falta de memória automaticamente imprimir essa saída no log de erros). Os serviços de suporte técnico da Microsoft também podem solicitar a executar este comando durante um incidente de suporte específico, se houver um erro que pode ser associado uma condição de memória baixa.
Observação: Monitor de desempenho (PerfMon) e o Gerenciador de tarefas não são considerados para memória corretamente se o suporte de extensões de janela de endereço (AWE) está habilitado.
Este artigo descreve alguns dos dados que você pode obter a partir da saída do comando DBCC MEMORYSTATUS. Várias seções deste artigo incluem detalhes de implementação proprietário que não são explicados aqui. Suporte técnico da Microsoft não irá responder a perguntas ou fornecem mais informações sobre o significado de contadores específicos, além das informações fornecidas neste artigo.
Mais informações
Importante: O comando DBCC MEMORYSTATUS destina-se a ser uma ferramenta de diagnóstico de suporte técnico da Microsoft. O formato da saída e o nível de detalhe é fornecido estão sujeitos a alterações entre versões do produto e os service packs. A funcionalidade que fornece o comando DBCC MEMORYSTATUS pode ser substituída por um mecanismo diferente em versões posteriores do produto. Portanto, em versões posteriores do produto, esse comando pode não funcionar mais. Nenhum aviso adicional será feito antes que este comando é alterado ou removido. Portanto, os aplicativos que usam este comando podem quebrar sem aviso.
A saída do comando DBCC MEMORYSTATUS foi alterado de versões anteriores do SQL Server. O resultado contém agora várias seções que não estavam disponíveis em versões anteriores do produto.
Gerenciador de memória
A primeira seção da saída é o Gerenciador de memória. Esta seção mostra o consumo total de memória pelo SQL Server. Memory Manager KB ------------------------------ --------------------
VM Reserved 1761400
VM Committed 1663556
AWE Allocated 0
Reserved Memory 1024
Reserved Memory In Use 0
(5 row(s) affected)
Os elementos nesta seção são as seguintes:
-
VM reservada: este valor mostra a quantidade total de espaço de endereço virtual (VAS) que reservou o SQL Server.
-
Compromisso de VM: este valor mostra a quantidade geral de VAS SQL Server foi confirmada. VAS é confirmada foi associada a memória física.
-
AWE alocados: este valor mostra a quantidade total de memória é alocada pelo mecanismo de AWE na versão de 32 bits do SQL Server. Ou, este valor mostra a quantidade total de memória que páginas bloqueadas consumir na versão de 64 bits do produto.
-
Memória reservada: este valor mostra a memória reservada para a conexão de administrador dedicada (DAC).
-
Memória reservada em uso: Este valor mostra a memória reservada que está sendo usada.
Resumo do uso da memória
A seção Gerenciador de memória é seguida de um resumo do uso de memória para cada nó de memória. Em um sistema de acesso (NUMA) habilitado de memória não uniforme, haverá uma entrada de nó de memória correspondente para cada nó de hardware. Em um sistema SMP, haverá uma única entrada de nó de memória.
Observação: A ID do nó de memória pode não corresponder à ID do nó de hardware. Memory node Id = 0 KB ------------------------------ --------------------
VM Reserved 1757304
VM Committed 1659612
AWE Allocated 0
MultiPage Allocator 10760
SinglePage Allocator 73832
(5 row(s) affected)
Observação: Esses valores mostram a memória alocada por threads em execução neste nó NUMA. Esses valores não são a memória que é local para o nó NUMA.
Os elementos nesta seção são as seguintes:
-
VM reservada: este valor mostra o VAS é reservado por threads em execução neste nó.
-
Compromisso de VM: este valor mostra o VAS confirmada por threads em execução neste nó.
-
AWE alocados: este valor mostra a memória é alocada pelo mecanismo de AWE na versão de 32 bits do produto. Ou este valor mostra a quantidade total de memória consumida por páginas bloqueadas na versão de 64 bits do produto.
Em um sistema NUMA habilitado, esse valor pode ser negativo ou incorretas. No entanto, o valor geral AWE alocados na seção Gerenciador de memória é um valor correto. Para controlar a memória alocada por nós NUMA individuais, use do SQL Server: nó do Buffer objetos de desempenho. (Para obter mais informações, consulte SQL Server Books Online.) -
Alocador multiPage: este valor mostra a memória é alocada por meio do alocador multipage por threads em execução neste nó. Essa memória vem de fora do pool de buffer.
-
Alocador SinglePage: este valor mostra a memória é alocada pelo alocador de página única por threads em execução neste nó. Essa memória é roubada do pool de buffers.
Observação: As somas dos valores VM reservados e os valores em todos os nós de memória Confirmada de VM poderá ser um pouco menor do que os valores correspondentes são relatados na seção Gerenciador de memória.
Memória agregada
A próxima seção contém informações de memória agregada para cada tipo de funcionário em cada nó NUMA. Para um sistema NUMA habilitado, você poderá ver saída semelhante à seguinte.
Observação: A tabela a seguir contém somente uma parte da saída.
MEMORYCLERK_SQLGENERAL (node 0) KB ---------------------------------------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 592
MultiPage Allocator 2160
(7 row(s) affected)
MEMORYCLERK_SQLGENERAL (node 1) KB
---------------------------------------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 136
MultiPage Allocator 0
(7 row(s) affected)
MEMORYCLERK_SQLGENERAL (Total) KB
---------------------------------------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 728
MultiPage Allocator 2160
(7 row(s) affected)
Observação: Essas identificações de nó correspondem à NUMA nó Configuração do computador que está executando o SQL Server. O nó IDs incluem nós de software possíveis definidas sobre nós de hardware, ou na parte superior de um sistema SMP. Para localizar o mapeamento entre IDs de nó e CPUs para cada nó, exiba informações sobre o número de identificação de evento 17152. Esse evento é registrado no log do aplicativo em Visualizar eventos quando você iniciar o SQL Server.
Para um sistema SMP, você verá apenas uma seção para cada tipo de funcionário. Esta seção é semelhante ao seguinte. MEMORYCLERK_SQLGENERAL (Total) KB ---------------------------------------------------------------- --------------------
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 768
MultiPage Allocator 2160
(7 row(s) affected)
Outras informações nessas seções são sobre memória compartilhada:
-
SM reservada: este valor mostra o VAS é reservado por todos os assistentes desse tipo que estão usando os arquivos de memória mapeada API. Essa API também é conhecido como memória compartilhada.
-
SM compromisso: este valor mostra o VAS confirmada por todos os assistentes desse tipo que estão usando arquivos de memória mapeada API.
Você pode obter informações de resumo para cada tipo de funcionário para todos os nós de memória usando a exibição de gerenciamento dinâmico sys.dm_os_memory_clerks (DMV). Para fazer isso, execute a seguinte consulta:
select type,
sum(virtual_memory_reserved_kb) as [VM Reserved],
sum(virtual_memory_committed_kb) as [VM Committed],
sum(awe_allocated_kb) as [AWE Allocated],
sum(shared_memory_reserved_kb) as [SM Reserved],
sum(shared_memory_committed_kb) as [SM Committed],
sum(multi_pages_kb) as [MultiPage Allocator],
sum(single_pages_kb) as [SinlgePage Allocator]
from
sys.dm_os_memory_clerks
group by type
Distribuição de buffer
A próxima seção mostra a distribuição de 8 kilobytes (KB) buffers no pool de buffer. Buffer Distribution Buffers ------------------------------ -----------
Stolen 553
Free 103
Cached 161
Database (clean) 1353
Database (dirty) 38
I/O 0
Latched 0
(7 row(s) affected)
Os elementos nesta seção são as seguintes:
-
Roubada: memória roubada descreve buffers de 8 KB que o servidor usa para diversos fins. Esses buffers servem como as alocações de armazenamento de memória genérico. Diferentes componentes do servidor usam esses buffers para armazenar estruturas de dados internas. O processo de lazywriter não é permitido para liberar os buffers roubada fora do pool de buffer.
-
Livre: este valor mostra o compromisso buffers que não estão sendo usados no momento. Esses buffers estão disponíveis para armazenar dados. Ou, outros componentes podem solicitar esses buffers e, em seguida, marcar esses buffers como roubada.
-
Cache: este valor mostra os buffers são utilizados para vários caches.
-
Banco de dados (limpo): este valor mostra os buffers que possuem conteúdo de banco de dados e que não foram modificados.
-
Banco de dados (sujo): este valor mostra os buffers que possuem conteúdo de banco de dados e que foram modificados. Esses buffers contém alterações que precisam ser liberadas para o disco.
-
E/s: Este valor mostra os buffers que estão aguardando para uma operação de e/s pendente. -
Latched: este valor mostra os buffers travadas . Um buffer é travado quando um thread é ler ou modificar o conteúdo de uma página. Um buffer é também travado quando a página está sendo lidos do disco ou gravados em disco. Uma trava é usada para manter a consistência física dos dados na página enquanto está sendo lido ou modificado. Um bloqueio é usado para manter a consistência transacional e lógica.
Detalhes do pool de buffer
Você pode obter informações detalhadas sobre buffers do pool de buffer para páginas de banco de dados usando o sys.dm_os_buffer_descriptors DMV. E você pode obter informações detalhadas sobre páginas de pool de buffer que estão sendo usadas para fins diversos do servidor usando o sys.dm_os_memory_clerks DMV.
A próxima seção lista detalhes sobre o pool de buffers, além de informações adicionais. Buffer Counts Buffers ------------------------------ --------------------
Committed 1064
Target 17551
Hashed 345
Stolen Potential 121857
External Reservation 645
Min Free 64
Visible 17551
Available Paging File 451997
(8 row(s) affected)
Os elementos nesta seção são as seguintes:
-
Confirmado: este valor mostra o total de buffers é confirmadas. Buffers são confirmadas tem memória física associada a eles. O valor confirmado é o tamanho atual do pool de buffer. Esse valor inclui a memória física é alocada se o suporte AWE é ativado.
-
Destino: este valor mostra o tamanho do pool de buffer de destino. Se o valor de destino for maior que o valor confirmado , o pool de buffer está crescendo. Se o valor de destino for menor que o valor confirmado , o pool de buffer está diminuindo.
-
Hashed: este valor mostra as páginas de dados e páginas de índice são armazenadas no pool de buffer.
-
Potencial de roubo: este valor mostra o máximo de páginas que pode ser roubado do pool de buffers.
-
ExternalReservation: este valor mostra as páginas que foram reservadas para consultas que irá executar uma operação de hash ou uma operação de classificação. Essas páginas ainda não foi roubadas.
-
Min livre: este valor mostra as páginas que o pool de buffer tenta ter na lista livre.
-
Visível: este valor mostra os buffers são visíveis ao mesmo tempo. Esses buffers podem ser acessados diretamente ao mesmo tempo. Este valor é geralmente igual ao total de buffers. No entanto, quando o suporte AWE é habilitado, este valor pode ser menor do que o total de buffers.
-
Arquivo de paginação disponível: este valor mostra a memória que está disponível para ser confirmada. Esse valor é expresso como o número de buffers de 8 KB. Para obter mais informações, consulte o tópico "GlobalMemoryStatusEx função" na documentação da API do Windows.
Cache de procedimento
A próxima seção descreve a composição do cache de procedimento. Procedure Cache Value ------------------------------ -----------
TotalProcs 4
TotalPages 25
InUsePages 0
(3 row(s) affected)
Os elementos nesta seção são as seguintes:
-
TotalProcs: este valor mostra o total de objetos em cache que estão atualmente no cache de procedimento. Esse valor corresponderá as entradas em sys.dm_exec_cached_plans DMV.
Observação: Devido à natureza dinâmica das informações, a correspondência pode não ser exata. Você pode usar o PerfMon para monitorar a do SQL Server: planejar Cache objeto e o sys.dm_exec_cached_plans DMV para obter informações detalhadas sobre o tipo de objetos em cache, como disparadores, procedimentos e objetos ad-hoc. -
TotalPages: este valor mostra as páginas cumulativas que você deve ter que armazenar todos os objetos em cache no cache de procedimento.
-
InUsePages: este valor mostra as páginas no cache de procedimento que pertencem a procedimentos que estão sendo executados. Essas páginas não podem ser descartadas.
Objetos de memória global
A próxima seção contém informações sobre vários objetos de memória global. Esta seção também contém informações sobre quanto os objetos de memória memória global em uso. Global Memory Objects Buffers ------------------------------ --------------------
Resource 126
Locks 85
XDES 10
SETLS 2
SE Dataset Allocators 4
SubpDesc Allocators 2
SE SchemaManager 44
SQLCache 41
Replication 2
ServerGlobal 25
XP Global 2
SortTables 2
(12 row(s) affected)
Os elementos nesta seção são as seguintes:
-
Recurso: este valor mostra a memória que usa o objeto de recurso . O objeto de recurso é usado pelo mecanismo de armazenamento e várias estruturas de todo o servidor.
-
Bloqueia: este valor mostra a memória que usa o Gerenciador de bloqueio.
-
XDES: este valor mostra a memória que usa o Gerenciador de transações.
-
SETLS: este valor mostra a memória que é usada para alocar a estrutura de cada thread específico do mecanismo de armazenamento que usa armazenamento local de segmento.
-
Alocadores de Dataset SE: este valor mostra a memória que é usada para alocar estruturas de acesso à tabela por meio da configuração de Métodos de acesso .
-
Alocadores SubpDesc: este valor mostra a memória que é usada para gerenciar os subprocessos para consultas paralelas, operações de backup, as operações de restauração, operações de banco de dados, operações de arquivo, espelhamento e cursores assíncronas. Esses subprocessos são também conhecidas como processos paralelos.
-
SE SchemaManager: este valor mostra a memória usada pelo Gerenciador de esquemas para armazenar os metadados específicos do mecanismo de armazenamento.
-
SQLCache: este valor mostra a memória que é usada para armazenar o texto de instruções ad hoc e de instruções preparadas.
-
Replicação: este valor mostra a memória que o servidor usa para subsistemas de replicação internos.
-
ServerGlobal: este valor mostra o objeto de memória global do servidor é usado genericamente por vários subsistemas.
-
XP Global: este valor mostra a memória estendida uso de procedimentos armazenados.
-
Tabelas de classificação: este valor mostra a memória que classificar o uso de tabelas.
Objetos de memória de consulta
A próxima seção descreve informações de concessão de memória de consulta. Esta seção inclui um instantâneo do uso de memória da consulta. Consulta memória é também conhecida como espaço de trabalho. Query Memory Objects Value ------------------------------ -----------
Grants 0
Waiting 0
Available (Buffers) 14820
Maximum (Buffers) 14820
Limit 10880
Next Request 0
Waiting For 0
Cost 0
Timeout 0
Wait Time 0
Last Target 11520
(11 row(s) affected)
Small Query Memory Objects Value
------------------------------ -----------
Grants 0
Waiting 0
Available (Buffers) 640
Maximum (Buffers) 640
Limit 640
(5 row(s) affected)
Se o tamanho e o custo de uma consulta de satisfazem os limites de memória de consulta "pequeno", a consulta é colocada em uma fila de consulta pequeno. Esse comportamento impede que consultas menores atrasadas por trás de consultas maiores que já estão na fila.
Os elementos nesta seção são as seguintes:
-
Concede: este valor mostra as consultas em execução com concessões de memória.
-
Aguardando: este valor mostra as consultas que estão aguardando para obter concessões de memória.
-
Disponível: este valor mostra os buffers que estão disponíveis para consultas para uso como espaço de trabalho de hash e como classificar o espaço de trabalho. O valor de disponível é atualizado periodicamente.
-
Máximo: este valor mostra o total de buffers que pode ser fornecidas a todas as consultas para ser usado como espaço de trabalho.
-
Limite: este valor mostra o destino de execução de consulta para a fila de consulta grande. Esse valor é diferente do valor máximo (Buffers) porque o valor máximo (Buffers) não é atualizado até que não haja alteração na fila.
-
Próxima solicitação: este valor mostra o tamanho da solicitação de memória, em buffers para a próxima consulta de espera.
-
Aguardando: este valor mostra a quantidade de memória que deve estar disponível para executar a consulta ao qual se refere o valor Próximo a solicitação . A Espera para é o Próxima solicitação valor multiplicado por um fator de sobra. Esse valor efetivamente garante que uma quantidade específica de memória estará disponível quando a próxima consulta espera é executada.
-
Custo: este valor mostra o custo da próxima consulta de espera.
-
Tempo limite: este valor mostra o tempo limite, em segundos, para a próxima consulta de espera.
-
Tempo de espera: Este valor mostra o tempo decorrido, em milissegundos, desde que a próxima consulta espera foi colocada na fila. -
Último destino: este valor mostra o limite de memória geral para a execução da consulta. Esse valor é o limite combinado para a fila de consulta grande e a fila de consulta pequeno.
Otimização
A próxima seção apresenta um resumo dos usuários que estão tentando otimizar consultas ao mesmo tempo. Optimization Queue Value ------------------------------ --------------------
Overall Memory 156672000
Last Notification 1
Timeout 6
Early Termination Factor 5
(4 row(s) affected)
Small Gateway Value
------------------------------ --------------------
Configured Units 8
Available Units 8
Acquires 0
Waiters 0
Threshold Factor 250000
Threshold 250000
(6 row(s) affected)
Medium Gateway Value
------------------------------ --------------------
Configured Units 2
Available Units 2
Acquires 0
Waiters 0
Threshold Factor 12
(5 row(s) affected)
Big Gateway Value
------------------------------ --------------------
Configured Units 1
Available Units 1
Acquires 0
Waiters 0
Threshold Factor 8
(5 row(s) affected)
Consultas são enviadas para o servidor de compilação. O processo de compilação inclui análise, algebraization e otimização. Consultas são classificadas de acordo com a quantidade de memória que cada consulta consumirá durante o processo de compilação.
Observação: Esse valor não inclui a memória necessária para executar a consulta.
Quando uma consulta é iniciado, não há nenhum limite em quantas consultas podem ser compiladas. Como o consumo de memória aumenta e atinge um limite, a consulta deve passar um gateway para continuar. Há um limite progressivamente decrescente de consultas simultaneamente compilados após cada gateway. O tamanho de cada gateway depende da plataforma e da carga. Tamanhos de gateway são escolhidos para maximizar a taxa de transferência e a escalabilidade.
Se a consulta não pode passar um gateway, a consulta aguardará até que a memória está disponível. Ou, a consulta retornará um erro de tempo limite (erro 8628). Além disso, a consulta não pode adquirir um gateway se o usuário cancela a consulta ou se um deadlock é detectado. Se uma consulta passar vários gateways, a consulta não libera os gateways menores até que o processo de compilação.
Esse comportamento permite que apenas algumas compilações de muita memória ocorrem ao mesmo tempo. Além disso, esse comportamento aumenta o throughput para consultas menores.
Agentes de memória
As próximas três seções mostram informações sobre agentes de memória que controle em cache de memória, roubada memória e memória reservada. Informações que elas fornecem somente podem ser usadas para diagnósticos internos. Portanto, essas informações não estão detalhadas aqui.
MEMORYBROKER_FOR_CACHE Value -------------------------------- --------------------
Allocations 1843
Rate 0
Target Allocations 1843
Future Allocations 0
Last Notification 1
(4 row(s) affected)
MEMORYBROKER_FOR_STEAL Value
-------------------------------- --------------------
Allocations 380
Rate 0
Target Allocations 1195
Future Allocations 0
Last Notification 1
(4 row(s) affected)
MEMORYBROKER_FOR_RESERVE Value
-------------------------------- --------------------
Allocations 0
Rate 0
Target Allocations 1195
Future Allocations 0
Last Notification 1
(4 row(s) affected)