Estou fazendo um teste de desempenho em um banco de dados Microsoft Dynamics de alto tráfego (mais de 16.000 usuários, estimados mais de 1.000 simultâneos no pico).
O servidor está online há alguns meses, e estou fazendo alguns testes para ver como ele está lidando com o tráfego atual.
Ao verificar alguns contadores de desempenho durante o horário comercial, encontrei uma esquisitice na memória de destino e total do servidor.
Embora eu só sinalizasse isso como um problema se a memória de destino fosse claramente maior que a memória total, combinada talvez com outros contadores (dependendo da quantidade de diferença), os resultados aqui são um tanto estranhos.
Usando:
SELECT object_name, counter_name, cntr_value FROM sys.dm_os_performance_counters
where (object_name like '%Buffer Manager%' and counter_name like '%page life%')
or (object_name like '%Memory Manager%' and counter_name like '%memory grants pending%')
or (object_name like '%Memory Manager%' and counter_name like '%target server memory%')
or (object_name like '%Memory Manager%' and counter_name like '%total server memory%');
Cheguei aos seguintes resultados:
counter_name | cntr_value
------------------------------------------------
Page life expectancy | 14887
Memory Grants Pending | 0
Target Server Memory (KB) | 44040192
Total Server Memory (KB) | 44040184
Claramente, atualmente não há pressão de memória e a expectativa de vida útil da página é maior do que o necessário. No entanto, parece que em algum momento o servidor SQL estava com exatamente 8 KB de memória.
Algo sobre esses números parece estranho para mim, mas não consigo identificar.
Isso é uma indicação de que em algum momento o servidor sql estava à beira de um problema de memória?
Estou correto ao pensar que, como esses números são tão semelhantes, posso descartá-los por enquanto e testar novamente quando passar um tempo decente?
Devo dizer que isso é normal e nada para se preocupar. Este blog informa como a memória do servidor de destino é calculada. Por favor, veja a fórmula abaixo
De acordo com minhas descobertas usando esta fórmula, mesmo que a memória do servidor de destino seja um pouco maior que o total, tudo bem. E isso é em virtude de como o valor é calculado.
Se a memória do servidor de destino for maior que a memória total do servidor, isso nem sempre significa uma pressão de memória. Você deve abandonar essa crença (se tiver uma). Como você mencionou, outros contadores devem ser levados em consideração. O SQL Server altera seus valores de destino e memória total do servidor várias vezes e isso depende da carga no sistema. Considere um cenário em que você executa a reconstrução do índice para todas as tabelas grandes, haveria uma enxurrada de atividades e o PLE certamente diminuiria o aumento da memória de destino, mas isso não significa que é uma pressão de memória. A memória do SQL Server acabou de se ajustar à carga atual.
Em
ideal world
você deve ter RAM de forma que possa armazenar todos os bancos de dados na memória, mas isso muitas vezes não é possível.