Instalei o software de monitoramento em algumas instâncias do SQL Server no ambiente. Estou tentando encontrar gargalos e corrigir alguns problemas de desempenho. Quero descobrir se alguns servidores precisam de mais memória.
Estou interessado em um contador: expectativa de vida da página. Parece diferente em todas as máquinas. Por que isso muda frequentemente em alguns casos e o que isso significa?
Veja os dados da última semana reunidos em algumas máquinas diferentes. O que você pode dizer sobre cada instância?
Instância de produção fortemente usada (1):
Instância de produção moderadamente usada (2)
Instância de teste raramente usada (3)
Instância de produção fortemente utilizada (4)
Instância de teste usada com moderação (5)
Armazém de dados muito usado (6)
EDIT: Estou adicionando a saída de SELECT @@ VERSION para todos esses servidores:
Instance 1: Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Instance 2: Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
Oct 19 2012 13:38:57
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Instance 3: Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Instance 4: Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Jun 28 2012 08:36:30
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Instance 5: Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Instance 6: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Também executei a seguinte consulta nas máquinas:
SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks
e retornou 2 ou 3 linhas para cada servidor:
Instance 1: 0; 64; 1
Instance 2: 0; 64
Instance 3: 0; 64
Instance 4: 0; 64
Instance 5: 0; 64
Instance 6: 0; 64; 1
O que isso significa? Esses servidores executam o NUMA?
Respostas:
Retirado do MSDN: - https://msdn.microsoft.com/en-us/library/ms189628.aspx
Expectativa de vida da página - indica o número de segundos que uma página permanecerá no buffer pool sem referências.
O SQL sempre procura por páginas de dados na memória. Se uma página de dados não estiver na memória, o SQL precisará ir para o disco (executar uma operação de E / S física) para recuperar os dados necessários para atender a uma solicitação. Se o seu contador PLE estiver baixo, isso indica que as páginas de dados na memória são substituídas regularmente por novas páginas provenientes de operações físicas de E / S. As operações de E / S físicas são caras, o que significa que o desempenho da sua instância SQL será afetado adversamente. Portanto, você deseja que seu contador PLE seja o mais alto possível.
Ignore os conselhos que você vê online que mencionam 300 como um bom limite para esse contador
Esse limite vem dos dias em que a memória era limitada (pense em sistemas de 32 bits). Agora temos sistemas de 64 bits que podem ter TBs de RAM, portanto este conselho está muito desatualizado.
Primeira coisa, você limitou a memória do SQL? Em caso afirmativo, quanta memória disponível resta? O limite pode ser aumentado?
A segunda coisa que eu procuraria nos seus servidores é: existem trabalhos de manutenção em execução? Verifique se há trabalhos executando reconstruções de índice, atualizando estatísticas ou operações DBCC CHECKDB. Eles realizam uma grande quantidade de leituras e podem ser o motivo do seu revestimento plano PLE,
Em seguida, ao usar o SQL Server 2008 +, você pode configurar uma sessão de evento estendido para capturar consultas que estão realizando uma grande quantidade de leituras. Aqui está o código para fazer isso: -
Isso capturará todas as consultas em seu servidor que executam mais de 200000 leituras lógicas. Não sei quanta memória você tem em cada servidor, portanto, você pode querer ajustar esse número. Depois de criado, você pode iniciar a sessão executando: -
E, em seguida, consulte a sessão executando: -
Tenha cuidado ao executar isso! O tamanho do arquivo pode ser bastante grande; portanto, teste-o primeiro em uma instância de desenvolvimento. Você pode definir o lance máx. tamanho do arquivo, mas não o incluí aqui. Aqui está o link do MSDN para eventos estendidos: - https://msdn.microsoft.com/en-us/library/hh213147.aspx
Monitore esta sessão rotineiramente e, esperançosamente, ela deve atender a todas as consultas que chegam ao seu PLE.
Leitura adicional -
Blog do MSDN no PLE - http://blogs.msdn.com/b/mcsukbi/archive/2013/04/12/sql-server-page-life-expectancy.aspx
Vídeo sobre a configuração de eventos estendidos - https://dbafromthecold.wordpress.com/2014/12/05/video-identifying-large-queries-using-extended-events/ (É do meu próprio blog, desculpe pela autopromoção desavergonhada )
fonte
A expectativa de vida da página é uma medida de quanto tempo você pode esperar que uma página que acabou de ser lida no disco fique na memória antes de ser empurrada por outra coisa ou ser destruída (ou seja, que a página seja desalocada no disco para que não haja necessidade para manter uma cópia em cache na RAM).
Como uma medida geral, quanto maior for, mais rápido o seu padrão de carga será processado porque as coisas estão sendo mantidas na memória. Se estiver muito baixo, isso pode indicar um problema de desempenho causado por falta de memória.
A leitura baixa nem sempre significa que há um problema: por exemplo, pode ser baixa após uma quantidade excessiva de processos únicos que usaram muitas páginas, para que sejam trazidas e retiradas para dar espaço a mais. Seu gráfico que parece cair no final de cada dia, por exemplo, pode ser causado por tarefas administrativas noturnas (backup, arquivamento de dados, outro processamento noturno).
fonte