SQL SERVER, WINDOWS E CPU Rodrigo Ribeiro
PATROCINADORES
Planning on attending PASS Summit 2015? Start saving today! The world’s largest gathering of SQL Server & BI professionals Take your SQL Server skills to the next level by learning from the world’s top SQL Server experts, in over 190 technical sessions Over 5000 registrations, representing 2000 companies, from 52 countries, ready to network & learn Save $150 right now using discount code LCCOMPRX86 or LCCOMPMD54
ENTENDER E INTERPRETAR AS INFORMAÇÕES SOBRE O USO DE CPU, TANTO EM WINDOWS QUANTO NO SQL SERVER OBJETIVO
CPU SQL x
AGENDA 1.Definições 2.O cálculo do uso de CPU 3.Impacto da concorrência e repetições 4.Tempo de Resposta vs Tempo de CPU 5.Conclusão 1.Definições 2.O cálculo do uso de CPU 3.Impacto da concorrência e repetições 4.Tempo de Resposta vs Tempo de CPU 5.Conclusão 1 -> 2 -> 3 -> 4 -> Conclusão
Definindo CPU PACKAGE/PROCESSADOR CORE (FÍSICO) CORE LÓGICO VAMOS DEFINIR CPU NO CONTEXTO DESTA APRESENTAÇÃO PROPÓSITO: EXECUTAR INSTRUÇÕES! CPU
O QUE É USO DA CPU “média de uso sobre um período de tempo” (2002,IBM SYSTEM MAGAZINE, “% de tempo gasto fazendo trabalho. Se uma CPU de 2GHz gastar 1 bilhão de ciclos em 1 segundo, ela está 50% utilizada, para aquele segundo.” (2009,Matthew Robben,Program Manager, Windows Server Perfomance Team) “Quantidade de tempo que uma CPU foi usada para processar instruções. [...] Muitas vezes é útil medir a utilização como uma porcentagem da capacidade da CPU” (WIKIPEDIA, 1 -> 2 -> 3 -> 4 -> Conclusão
1 SEG. ( 1000 ms) 250 MS TEMPO GASTOS EXECUTANDO INSTRUÇÕES ADD MOV INTERVALO DE TEMPO DEFINIÇÃO: TEMPO GASTO EXECUTANDO INSTRUÇÕES DURANTE UM INTERVALO DE TEMPO = 500/1000 = 50% / () Como seria na prática, para threads e processos? 2 instruções executadas O QUE É USO DA CPU 1 -> 2 -> 3 -> 4 -> Conclusão
THREADS E PROCESSOS #1 100 MS 300 MS 50 MS 450/1000= 0,45 = 45% 1 SEGUNDO (1000 ms) Podemos monitorar threads e/ou processos individualmente #2 #3 PROCESSO 1 #1 #3 PROCESSO 2 #2 + + /= 70 MS 70/1000= 0,07 = 7% 45% 450ms 7% 70ms + = E quanto ao uso de uma CPU inteira? É possível obter mais de 100%? E quanto ao uso de uma CPU inteira? É possível obter mais de 100%? 1 -> 2 -> 3 -> 4 -> Conclusão
CPU 0 WINDOWS E O USO DE UMA CPU IDLE THREAD #1 #3 IDLE #0 #2 1 SEGUNDO #1 #2 #3 IDLE #0 160 MS 65 MS160 MS 315 MS200 MS 100 MS IDLE: = 385 = 38,5% OUTRAS: = 615 = 61,5% 100 – 38,5 = 61,5% E quando há várias CPUs? 1 -> 2 -> 3 -> 4 -> Conclusão
MULTI-CORE e MAIS DE 100%? 1 SEGUNDO CPU 0 CPU 1 PROCESSO 1 #1 #3 #1 #3 100% 1000ms + = SELECT * FROM ComParalelismo #4 #3 #2 #1 WORKER_TIME > ELAPSED_TIME (possibilidade) Por que o gerenciador de tarefas nunca acusa mais que 100%? 1 -> 2 -> 3 -> 4 -> Conclusão
USO DE CPU EM MULTI-CORE CPU 0CPU 1CPU 2CPU 3 E quanto aos gráficos? > 2 -> 3 -> 4 -> Conclusão
O que as ferramentas de monitoração estão nos dizendo? REPORTANDO O USO DE CPU > 2 -> 3 -> 4 -> Conclusão
DEMO Nesta demo vamos usar o task manager. process explorer e perfmon para observar e entender as informações de CPU apresentadas. Iremos: Explorar algumas ferramentas e usar os valores de uso CPU total, por core, por processo e por thread! Ver a Idle Thread em ação Mudar o intervalo de coleta Informações sobre uso de CPU no SQL Server Ver 200% de uso de CPU! Observando o uso de CPU #ObservandoUsoCPU 1 -> 2 -> 3 -> 4 -> Conclusão
TEMPO DE CPU x QTD 1 SEGUNDO CPU ms CPU ms SELECT AVG(id) AvgID FROM SQLSat424.dbo.dados SUFICIENTE PARA 100%? CPU UDF 1ms x 1000 linhas = 1s QUERY 10ms x 100 sessões = 1s Outros exemplos: 1 -> 2 -> 3 -> 4 -> Conclusão
TEMPO DE CPU x TEMPO TOTAL TEMPO DE VIDA DA THREAD CPU 0 FILA CPU0 #1 660 MS MS (2s) 660 MS 400 MS 130 MS TEMPO DE EXECUÇÃO TOTAL = = 4000 ms (4s) TEMPO DE CPU TOTAL = = 1190 ms (~ 29% de 4s) 1 -> 2 -> 3 -> 4 -> Conclusão
DEMO Nesta demo iremos explorar alguns recursos disponíveis no SQL Server para obter informações úteis sobre CPU e tempo de execução. Iremos: Ver como a concorrência está relacionada com o Gasto de CPU Ver como uma simples query pode causar 100% Como o uso de funções podem facilmente onerar uma CPU Comparar total de CPU vs Delta! Tirar “deltas” do uso de CPU Analisando o uso de CPU no SQL Server #SQLAnaliseCPU 1 -> 2 -> 3 -> 4 -> Conclusão
CONCLUSÃO TEMPO GASTOS EXECUTANDO INSTRUÇÕES INTERVALO DE TEMPO ADD MOV JMP CMP TOTAL DE CPU = MÉDIA TOTAL DE CPU = MÉDIA GASTO DE CPU = TEMPO EXECUTANDO INSTRUÇÕES GASTO DE CPU = TEMPO EXECUTANDO INSTRUÇÕES 10 QUERIES x 100ms = PODE CAUSAR 100%
REFERÊNCIAS Ivan Lima Inside the Machine Benito Piropo: Interpreting CPU Utilization for perfomance Analysis for-performance-analysis.aspx for-performance-analysis.aspx Performance Insights to Intel® Hyper-Threading Technology Treinamento On Demand Sr. Nimbus: Paralelismo no SQL Server (Em breve)
DÚVIDAS
OBRIGADO