Eu gosto bastante de dbatools, então experimentei Get-DbaDbMemoryUsage
( documentos aqui ) em meu servidor SQL Server 2019 de produção. Especificamente, eu executei isso
Get-DbaDbMemoryUsage -SqlInstance [MyProdServer] -IncludeSystemDbs |
Select Database, PageType, PercentUsed |
Where PercentUsed -ne 0 |
Format-Table
A ideia do comando é mostrar qual porcentagem da RAM do seu servidor está sendo usada por quais tipos de páginas em cada um dos seus bancos de dados.
Depois de esperar alguns minutos, executei novamente. Apenas um banco de dados retornou o mesmo resultado. O restante retornou números completamente diferentes ou desapareceu do conjunto de resultados.
Dado esse resultado, há algo a ganhar com o monitoramento do uso de RAM em nível por banco de dados? Ou é muito barulhento para ser útil?
Nota: Se isso for uma dica de que meu servidor tem muito pouca RAM, me avise.
Get-DbaDbMemoryUsage
usa o DMV sys.dm_os_buffer_descriptors . Acho que este é um DMV interessante, mas nunca o usei para diagnosticar problemas de desempenho. Vi que isso é um fator que contribui significativamente para os problemas de desempenho em algumas instâncias SQL. Também ouvi falar de outras pessoas que tiveram problemas com este DMV.Portanto, vale a pena notar que este DMV pode ser bastante pesado para executar se o seu servidor tiver uma grande quantidade de memória. Nas situações que investiguei, os servidores não tinham muita memória, mas a ferramenta de monitoramento executava a consulta a cada aproximadamente 20 segundos.
Acho que o DMV sys.dm_os_memory_clerks é mais útil para monitorar para diagnosticar certos problemas de desempenho relacionados à memória. por exemplo, problemas de USERSTORE_TOKENPERM . Ele informa onde sua memória foi usada, mas dividida pelo funcionário. Ele não pode informar quais bancos de dados estão usando memória em seu buffer pool. Para isso, talvez você possa se concentrar no que foi lido no disco. por exemplo, sys.dm_io_virtual_file_stats
Eu provavelmente daria um passo atrás na memória e me concentraria mais nas esperas como ponto de partida. É provavelmente a melhor coisa para se observar em alto nível, embora você também queira analisar outras coisas em combinação com isso para obter uma imagem mais completa. por exemplo, SE as esperas PAGEIOLATCH* forem um dos principais tipos de espera, você poderá se beneficiar de memória adicional e/ou precisará concentrar seus esforços de ajuste na redução de E/S física.
PS. Parece que você pode se beneficiar com uma ferramenta de monitoramento. Criei o DBA Dash que é gratuito e de código aberto. Pode valer a pena dar uma olhada.
Espero que isto ajude.