Dicas para um DBA Iniciante – Utilização histórica de CPU

Galera, tudo bem com vocês?

No vídeo de hoje quero demonstrar para vocês como resolve um problema real de performance em um cliente utilizando a sessão de monitoração system_health.

Caso tenham interesse em reproduzir o cenário descrito no vídeo, basta utilizar o script abaixo:


DECLARE @ts_now bigint

SELECT @ts_now = cpu_ticks / (cpu_ticks/ms_ticks)  FROM sys.dm_os_sys_info
SELECT top 20 record_id, EventTime,
CASE WHEN system_cpu_utilization_post_sp2 IS NOT NULL THEN system_cpu_utilization_post_sp2 ELSE system_cpu_utilization_pre_sp2 END AS system_cpu_utilization,
CASE WHEN sql_cpu_utilization_post_sp2 IS NOT NULL THEN sql_cpu_utilization_post_sp2 ELSE sql_cpu_utilization_pre_sp2 END AS sql_cpu_utilization
FROM
(
SELECT
record.value('(Record/@id)[1]', 'int') AS record_id,
DATEADD (ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime,
100-record.value('(Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS system_cpu_utilization_post_sp2,
record.value('(Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS sql_cpu_utilization_post_sp2 ,
100-record.value('(Record/SchedluerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS system_cpu_utilization_pre_sp2,
record.value('(Record/SchedluerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS sql_cpu_utilization_pre_sp2
FROM (
SELECT timestamp, CONVERT (xml, record) AS record
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_SCHEDULER_MONITOR'
AND record LIKE '%<SystemHealth>%') AS t
) AS t
ORDER BY record_id desc

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube e no grupo de discussão SQLManiacs.

Grande abraço a todos.

Anúncios
  1. 28/09/2016 às 16:30

    Vitão, sempre com ótimas contribuições.
    Tenho uma duvidas:
    Quando tenho mais de uma instancia, a contagem é feita por cada uma ou é baseada na utilização total do serviço do SQLServer no servidor?

    Abs

    • 28/09/2016 às 16:36

      Fala grande Felipe, tudo bem?
      A utilização de CPU do sistema é geral e a utilização pelo SQL Server é da instância na qual estiver executando o comando.
      Grande abraço.

  2. Anderson
    29/09/2016 às 14:56

    Grande Vitor! Como sempre elevando o nível de suas apresentações, seja nos assuntos abordados com total conhecimento, seja nos recursos para facilitar ainda mais nosso entendimento. Eu utilizo uma query pontual para pegar essas informações:

    WITH ScheduleMonitorResults AS
    (
    SELECT
    DATEADD(ms,
    (select [timestamp]-[ms_ticks] from sys.dm_os_sys_info),
    GETDATE()) AS ‘EventDateTime’,
    CAST(record AS xml) AS ‘record’
    FROM sys.dm_os_ring_buffers
    WHERE ring_buffer_type = ‘RING_BUFFER_SCHEDULER_MONITOR’
    AND [timestamp] >
    (select [ms_ticks] – 20*60000 — Last 20 minutes
    – 100 — Round up
    from sys.dm_os_sys_info)
    )
    SELECT
    CONVERT (varchar, EventDateTime, 126) AS EventTime,
    SysHealth.value(‘ProcessUtilization[1]’,’int’) AS ‘% CPU (SQL Server)’,
    100 – SysHealth.value(‘SystemIdle[1]’,’int’) AS ‘% CPU (All Processes)’
    FROM ScheduleMonitorResults CROSS APPLY
    record.nodes(‘/Record/SchedulerMonitorEvent/SystemHealth’) T(SysHealth)
    ORDER BY EventDateTime DESC

    Que como pode observar faço um cross apply com a SysHealth.

    Um assunto interessante para um próximo video, seria o Baseline, pois como você mesmo disse, nesse cliente não tinha, e certamente muitos que assistem seus videos podem estar nessa mesma pegada. Eu criei baselines baseados no livro do Louis Davidson e Tim Ford (Performance Tuning with SQL Server Dynamic Management Views). São muitos contadores, mas implementei somente alguns, para não gerar muitos dados. Parabéns!!

    • 29/09/2016 às 17:50

      Fala grande Anderson, tudo bem contigo meu amigo?
      Muito obrigado por sempre acompanhar o conteúdo que disponibilizo.
      Sua consulta é muito bacana mesmo viu.
      Com certeza abordarei o assunto em futuros vídeos sim.
      Grande abraço.

  3. Heitor Arantes
    02/10/2016 às 18:11

    Boa tarde, Vitor!

    Seus videos são sempre muito bem explicados, e ainda trazendo um cenário real e melhor ainda, e neste caso que você passou todos os administradores de bd passam por este cenário.

    Tenho uma duvida:
    Este tipo de monitoração (System Health) pode ser executada em uma instância no Sql Azure ?

    Abs.

  4. Jefferson
    04/10/2016 às 22:55

    vítor em outras versões como por exemplo 2014 ou 2012 funciona ? fiz no 2014 mais não retornou nenhum dado.

    • 05/10/2016 às 21:49

      Fala grande Jefferson, tudo bem?
      Funciona sim meu amigo, inclusive no vídeo rodei o script em uma instância de SQL Server 2014.

  5. Jefferson
    05/10/2016 às 10:33

    vitor bom dia ! em outras versões funciona ? tentei com a 2014 e não foi.

    • 05/10/2016 às 21:49

      Fala grande Jefferson, tudo bem?
      Funciona sim meu amigo, inclusive no vídeo rodei o script em uma instância de SQL Server 2014.

  6. Rubem Cerqueira
    17/10/2016 às 17:14

    Vitor, boa tarde!

    Executei o script em uma intancia SQL Server 2012 e não retornou dado algum

    Segue print

    http://prnt.sc/cvis5a

    • 18/10/2016 às 12:27

      Grande Rubem, tudo bem?
      Como está o filtro da sua query?

      Grande abraço.
      🙂

  7. Magrão
    28/12/2016 às 14:55

    Valeu Vitor!
    Muito legal o material!

    O povo pode usar LIKE ‘%%’ em vez de LIKE ‘%<SystemHealth>%’.
    Ajudou pra mim.

    Abs

    • Magrão
      28/12/2016 às 15:02

      Opa foi mal! O sistema postou errado. Queria falar que tem que corrigir o filtro com LIKE ‘%%’. E agora no script tem html lt and gt.

      Abs

      • 28/12/2016 às 20:20

        Muito obrigado meu amigo.
        🙂

  1. 27/09/2016 às 1:02
  2. 27/09/2016 às 3:02

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: