Eu configurei alertas em duas instâncias do SQL Server 2005 que tenho em produção. Um desses alertas é enviado sempre que o Free Pages
contador de desempenho fica abaixo da marca de 5.000 páginas.
Ambos os servidores normalmente operam com mais de 300.000 páginas gratuitas, mas às vezes um desses servidores fica momentaneamente bem abaixo de 2.000 ou mesmo de 1.000 páginas gratuitas e depois sobe novamente. Novamente, isso só acontece com um dos servidores.
Tanto quanto eu sei, este comportamento não está degradando o desempenho deste servidor, porque parece-me que sempre que o servidor vai morrer de fome em páginas livres, ele libera páginas de dados mais antigas dos buffers e preenche a Lista de Buffers Livres . Teoricamente falando, pelo menos.
O que não entendo é por que o lazywriter não está mantendo uma lista maior de buffers livres e está 'esperando' que o SQL Server fique tão curto em páginas livres antes de liberar mais buffers.
Portanto, minha pergunta é dupla:
1. Como posso determinar o que/quem está causando falta de páginas gratuitas no SQL Server?
2. Como posso inspecionar o que realmente está acontecendo aqui?
Então, o que pode acontecer para que as listas gratuitas diminuam? Para a maioria dos propósitos, você pode considerar a fórmula
free = total - (max(database, reserved)+stolen)
. Então simplesmente colete todos os contadores no SQL Server, Buffer Manager Object e depois veja qual é o padrão:total
continua o mesmo, masstolen
cresceu. Isso indica algum consumo de memória de código e caches. e geralmente não cicatriza sozinho. Você investigaria isso verificando os administradores de memória, consulte Como usar o comando DBCC MEMORYSTATUS para monitorar o uso de memória . Uma possível explicação para um pico repentino de roubos que desaparece rapidamente é uma compilação de consultas complexas. Colete SQL Server, Memory Manager Object para obter informações adicionais, consulteOptimizer Memory
.database
,reserved
estolen
permanecem os mesmos, mastotal
encolhem. Vamos apenas considerar isso como isso não acontece . Se você vir isso, poste aqui e podemos digerir melhor.total
permanece o mesmo,database
cresce. Provavelmente uma varredura em uma mesa grande. Procure uma consulta com grandelogical_reads
emsys.dm_exec_query_stats
total
permanece o mesmo,reserved
cresce. Indica uma consulta que possui uma grande solicitação de concessão de memória. Colete SQL Server, Memory Manager Object para obter informações adicionais, consulteMemory Grants Outstanding
.