Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server e Azure SQL Database – Como retornar o uso de CPU e Memória utilizando T-SQL

Tempo de Leitura: 3 minutos

Uma necessidade bem comum no dia a dia de um administrador de banco de dados é analisar o uso de CPU da instância. Por este motivo, compartilharei nesse artigo, uma consulta Transact-SQL (T-SQL) para obter essa informação de um banco SQL Server 2008+ ou Azure SQL Database.

Embora seja possível obter o uso de CPU utilizando ferramentas gráficas, muitas vezes é interessante conseguir ter acesso a essa informação utilizando uma query, pois você pode armazenar esse histórico numa tabela, gerar alertas e ações personalizadas conforme o valor obtido, criar gráficos no Power BI, etc…

Como retornar o uso de CPU utilizando T-SQL

Para retornar o uso de CPU do servidor utilizando T-SQL, utilize o script abaixo:

Exemplo de retorno:

IMPORTANTE
O script acima utiliza a DMV sys.dm_os_ring_buffers e o Extended Event “SystemHealth”, habilitado por padrão. Você não precisa ativar nada para utilizar esse script e ele retorna sempre o uso de CPU dos últimos 256 minutos (um pouco mais de 4h). Caso a instância seja reiniciada, esses dados serão perdidos.

Esse script foi testado no Azure SQL Database e SQL Server 2008 e 2019.

Como retornar o uso de Memória utilizando T-SQL

Para retornar o uso de Memória do servidor utilizando T-SQL, utilize o script abaixo. Com ele, é possível identificar se está havendo pressão de memória e se ela está sendo causada pelo SO ou pelo próprio SQL Server.

O primeiro ponto que deve ser observado, é a coluna “RmNotification”, que nos indica o tipo de notificação gerada:

  • RESOURCE_MEMPHYSICAL_HIGH – SQL tem espaço para alocar mais memória
  • RESOURCE_MEMPHYSICAL_LOW – Memória física interna ou de sistema baixa
  • RESOURCE_MEM_STEADY
  • RESOURCE_MEMVIRTUAL_LOW – Range de endereços virtuais para o SQL Server estão se esgotando

Se a coluna “RmNotification” apresentar uma mensagem de “RESOURCE_MEMPHYSICAL_LOW”, quer dizer que a memória estava baixa e isso gerou esse alerta na Ring Buffer.

Para entender o que estava baixo, vamos observar as colunas “IndicatorsProcess” e “IndicatorsSystem”.

Se a coluna “IndicatorsProcess” retornar 0 e a coluna “IndicatorsSystem” retornar um valor diferente de 0, quer dizer que o problema de pressão de memória afetou todo o sistema. Mas se o contrário acontecer, quer dizer que somente um processo que sofreu pressão de memória e não o sistema todo (mas não fala qual processo foi).

Possívels valores para as colunas “IndicatorsProcess” e “IndicatorsSystem”:

  • IDX_MEMPHYSICAL_HIGH (High Physical Memory) = 1
  • IDX_MEMPHYSICAL_LOW (Low Physical Memory) = 2
  • IDX_MEMVIRTUALL_LOW (Low Virtual Memory) = 4

Exemplo de resultado:

Se precisar de uma query mais simples, pode também utilizar a DMV “dm_os_process_memory”:

Resultado:

Eu já havia compartilhado esses scripts acima no artigo SQL Server – Consultas úteis do dia a dia do DBA que você sempre tem que ficar procurando na Internet, mas a maioria das pessoas acabava não encontrando quando precisava e por isso resolvi criar esse artigo.

Espero que vocês tenham gostado desse post.
Um grande abraço e até mais!