Fabio GentilePremier Field EngineerMicrosoft
Fabricio CataePremier Field EngineerMicrosoft
SQL Server com Foco em Diagnóstico de Desempenho
CÓDIGO DA SESSÃO: SUP-403
4
Premier Field Engineering
Premier Field
Engineering
Serviços Proativos
ServiçosReativos
WorkshopPlus
Health Checks &
Risk Assessment
Programs
Situações Críticas
5
Agenda
100% CPUWaits Statistics
6
Definindo Performance
Performance (Desempenho)Tempo de Resposta ao Usuário
Sintomas de Baixo DesempenhoAlta Utilização de Recursos
7
Cenário: Alto Consumo de CPU
Utilizar o Task ManagerIdentificar o processoUsar DMV para identificar a causa do problema
Custo em CPUQuery rodandoPlano de execução
8
Alto Consumo de CPU
9
Metodologia: Alto consumo de CPU
Confirmar alto consumo de CPUTask ManagerPerformance Monitor
Rodar a query sys.dm_exec_requests
Ordenar o resultado de acordo com cpu_time
Consultar o SQL Text usando o (sql) handle
Consultar o Query Plan usando o (plan) handle
10
Desafio: Como Otimizar?
set @str = CAST(@i as CHAR(10))
insert tbInfo (info) values ( @str )
11
Redefinindo Performance
Performance (Desempenho)Tempo de Resposta ao UsuárioTamanho da Fila de ProcessamentoUtilização de Recursos
Sintomas de Baixo DesempenhoAlta Utilização de Recursos
Presença constante de 100% CPUAlto consumo de MemóriaBloqueios e Locks entre Queries
12
Análise do Consumo de CPU
Baseia-se no fato de que a THREAD possui dois estados:
RodandoSuspensa (Em Espera) CPU
CPUWait
13
Metodologia: ?
Recursos
CPUDiscoRedeMemoria
CPU
CPUWait
14
Wait Statistics O que são Wait Statistics?
Sempre que uma query inicia a espera por algum recurso (Disco, Locks, Rede), o SQL Server registra o tipo e a duração desta espera
Estas informações sobre esperas são retidas e permitem determinar porque a execução das queries é mais lenta do que o esperado
15
Wait Statistics Por que usar Wait Statistics?
Abordagem inicial antes de aprofundar a análise de performance usando outras ferramentas
Permite encontrar gargalos de performance que não são óbvios e evita tentativas de eliminação de falsos gargalos de performance
Permite identificar o maior retorno para os esforços de ajuste de performance
16
Wait Statistics Onde encontrar Wait Statistics?
SQL Server DMV:sys.dm_os_wait_stats
Wait Statistics são acumuladas desde o último restart da instância do SQL Server, ou do último reset:
DBCC SQLPERF (‘sys.dm_os_wait_stats’, CLEAR)
17
Wait Statistics sys.dm_os_wait_stats
wait_type:Tipo da espera
waiting_tasks_count:Número de esperas deste tipo
wait_time_ms: Tempo total de espera para este tipo em milissegundos
max_wait_time_ms: Tempo máximo de espera para este tipo
signal_wait_time: Diferença entre o tempo em que a espera teminou e o início da execução
18
Wait Statistics sys.dm_os_wait_stats
19
Wait Statistics Interpretando Wait Types
Nem todos os wait types indicam problemas ou exigem ações para serem corrigidos (como esperas associadas a tarefas em background)
Concentre a análise em esperas por recursos que podem indicar gargalos:
DiscoCPUMemóriaLockingRede
20
Tarefas em Background e Esperas
Determinadas esperas (Wait Types) estão relacionadas com tarefas que rodam em background
Exemplo de tarefas de sistema:FT_IFTS_SCHEDULER_IDLE_WAITREQUEST_FOR_DEADLOCK_SEARCHSQLTRACE_BUFFER_FLUSHLAZYWRITER_SLEEPXE_TIMER_EVENTCHECKPOINT_QUEUEBROKER_TO_FLUSHLOGMGR_QUEUE
21
Inserção de DadosProcInsertInfo
22
Cenário: Latência na Gravação do Log
Quando a thread espera por uma escrita no arquivo de LOG, ela fica no modo de espera
Wait type: WRITELOG
Essa espera pode ser observada Online nas DMVsys.dm_exec_requestssys.dm_os_taskssys.dm_os_waiting_tasks
23
WRITELOG
Gravação do LOG: 1msEscrita sequencial
Commit Transaction = 1 escrita em LOG
Limite de Transações/sec
24
Recomendação
Garantir o tempo de acesso ao disco adequadoIdeal: < 1 ms (cache)Bom: < 5 ms (normal)...Desastre Total: > 100 ms
Agrupar as transações excessivamente curtas dentro de um contexto transacional
BEGIN TRANSACTION / COMMIT
25
Otimizando: Inserção de Dados
26
Cenário: Latência no Acesso aos Discos
Ocorre quando uma thread aguarda por uma requisição de I/O num arquivo de dados
Wait type: PAGEIOLATCH_*
Esta espera pode ser observada nas DMVs:sys.dm_os_wait_statssys.dm_exec_requestssys.dm_os_tasks / sys.dm_os_waiting_taskssys.dm_io_pending_io_requests
27
Monitoração de I/O pendentes
sys.dm_io_pending_io_requests
28
Latência no Acesso aos Discos
29
RecomendaçãoGarantir tempos de acesso adequados aos discos (Physical Disk, Avg. Disk sec/Read e Avg. Disk sec/Write)
Ideal: < 10 msBom: < 20 ms...Ruim: > 100 ms
Diminuir a quantidade de leituras lógicas, melhorando a estratégia de indexação
Database Engine Tuning Advisor (DTA)sys.dm_db_missing_index_*Plano de execução: Missing Index Details
30
Outros Wait Types
31
Breve Resumo
Wait Type Possível significadoPAGELATCH 2:*:* Contenção no TEMPDB em memóriaPAGELATCH dbid:*:* Hot-spot em memória (page-split)PAGEIOLATCH Leitura excessiva de discoWRITELOG Escrita em disco de logNETWORKIO Esperando recebimento de pacotes do clienteSOS_SCHEDULER_YIELD Alto consumo de CPURESOURCE_SEMAPHORE Esperando por memória para WorkspaceLCK_M_* Bloqueios
32
Problema de Travamento
33
Cenário: Locks
Tipos de LockLCK_M_X = Exclusive (Escrita)LCK_M_S = Shared (Leitura)LCK_M_U = UpdateLCK_M_IX = Intent-ExclusiveLCK_M_IS = Intent-Shared
Diferentes RecursosTabelaPáginaLinha
IdentificadorLCK_M_X sobre o recurso 5:1234567 (dbid=5, objid=1234567)
34
Matriz de Compatiblidade (COMPLETA)
Conflitos = (C)
35
Compatibilidade de Lock
S = Shared/Leitura ( múltiplas leituras )X = Exclusivo ( bloqueia TODOS )
Intent Lock (IS, IX) – Compatíveis entre si
36
Hierarquia de Locks
Escrita de Linha
TABLE LOCK IXPAGE LOCK IX
ROW LOCK X
Escrita de Linha
TABLE LOCK IXPAGE LOCK IX
ROW LOCK X
37
Hierarquia de Locks (2)
Escrita de Linha
TABLE LOCK IXPAGE LOCK IX
ROW LOCK X
Leitura da Tabela Inteira
TABLE LOCK SPAGE LOCK -
ROW LOCK -
38
Hierarquia de Locks (3)
Escrita de Linha
TABLE LOCK IXPAGE LOCK IX
ROW LOCK X
Leitura de Linha
TABLE LOCK ISPAGE LOCK IS
ROW LOCK S
39
Recomendação
Matriz de CompatibilidadeRange Locks (LCK_M_R*)
Transação em Serializable
Utilize o NOLOCK se necessárioMelhor alternativa: Read Committed Snapshot
SQL tem lock de linha? (ROWLOCK)Como usar um lock de linha se a query faz TABLE SCAN?
40
Referências – Wait Stats
SQL Server 2005 Waits and Queues:http://technet.microsoft.com/en-us/library/cc966413.aspx
Troubleshooting Performance Problems in SQL Server 2005http://technet.microsoft.com/en-us/library/cc966540.aspx
Troubleshooting Performance Problems in SQL Server 2008http://technet.microsoft.com/en-us/library/dd672789(SQL.100).aspx
Description of the waittype and lastwaittype columns in the master.dbo.sysprocesses table in SQL Server 2000 and SQL Server 2005
http://support.microsoft.com/kb/822101The SQL Server Wait Type Repository
http://blogs.msdn.com/b/psssql/archive/2009/11/03/the-sql-server-wait-type-repository.aspx
41
42
Contatos
Fabricio [email protected]
Fabio [email protected]
Blog / Twitterhttp://blogs.msdn.com/fcataeTwitter: @fcatae
© 2008 Microsoft Corporation. Todos os direitos reservados. Microsoft, Windows, Windows Vista e outros nomes de produtos são ou podem ser marcas registradas e/ou marcas comerciais nos EUA e/ou outros países.Este documento é meramente informativo e representa a visão atual da Microsoft Corporation a partir da data desta apresentação. Como a Microsoft deve atender a condições de mercado em constante alteração, este
documento não deve ser interpretado como um compromisso por parte da Microsoft, e a Microsoft não pode garantir a precisão de qualquer informação fornecida após a data desta apresentação. A MICROSOFT NÃO DÁ QUALQUER GARANTIA, SEJA ELA EXPRESSA, IMPLÍCITA OU ESTATUTÁRIA, REFERENTE ÀS INFORMAÇÕES DESTA APRESENTAÇÃO.
Por favor preencha a avaliação
45
Query Plan
46
Monitorando Deadlock
Habilitar o Trace Flag 1222 no Startup
Utilize o Profiler para obter uma versão gráfica
47
Evite Table Scan
Top Related