Lock Convoy

Você sabe o que é Lock Convoy? (Dica: não tem nada a ver com os locks e bloqueios do SQL Server). Já havia presenciado esse problema na faculdade. Fomos fazer um trabalho em grupo com 20 pessoas. A matemática era que, se uma pessoa conseguiria fazer o trabalho em 8 horas, então terminaríamos em questão…

0

Logs Circulares 2

Encontrei um exemplo nos meus arquivos. Não sei exatamente quem me passou ou se encontrei no documento de performance, mas vou deixar registrado no blog. Frequentemente utilizo o script para lembrar da sintaxe do XQuery e da conversão de timestamp. SELECT CONVERT (varchar(30), GETDATE(), 121) as runtime, DATEADD (ms, -1 * (sys.ms_ticks – a.[Record Time]),…

0

Logs Circulares

Semana passada alguém me perguntou sobre esse “Ring Buffer”. É incrível a coincidência de que sempre que falo sobre memória, alguém comenta sobre esse recurso. Esse assunto sempre volta a tona, eu mesmo já escrevi um post sobre Ring Buffer e agora estou escrevendo novamente. O que é um Ring Buffer? A tradução literal é…

6

Misterioso Comando KILL

Estou gastando o terceiro post para falar sobre o comando KILL. Se você não leu os outros, dê uma olhada: 1. Desafio: Comando KILL demorado (infinito) 2. Qual o significado de PREEMPTIVE_OS_PIPEOPS? Dessa vez, vou mostrar como que o comando KILL realmente funciona e como que ele consegue “matar” os processos. DBCC STACKDUMP Sim, esse…

4

Qual o significado de PREEMPTIVE_OS_PIPEOPS?

Publiquei um post de um cenário na qual o comando KILL que não consegue matar o processo. Desafio: Comando KILL demorado (infinito) Esse foi um desafio (fácil, pelo jeito). A resposta é usar uma ferramenta para matar o processo do NOTEPAD.EXE, seja através de script Powershell, usando o Task Manager ou o comando TASKKILL. Alguns…

8

Desafio: Comando KILL demorado (infinito)

A ideia desse post surgiu há 3 semanas durante um treinamento interno com a equipe de suporte. Desde então tivemos comemorações de Natal e Ano Novo. Espero que todos tenham aproveitado essa época. Aproveito para desejar a todos um ótimo ano de 2014!!! O tópico de hoje é entender um conceito relacionado a threads e…

12

Novamente Spinlock

O que seria um spinlock? Essa é uma pergunta recorrente e que mal consigo explicar… parte porque é uma estrutura pouco detalhada nos artigos da Microsoft. Para aqueles que nunca viram o “spinlock” documentado, segue algumas pistas de que ele realmente existe: Artigo de Suporte KB835864: http://support.microsoft.com/kb/835864 On multiprocessor computers, access to these counter values…

0

Travamento do SQL Scheduler (Scheduler Hang)

Introdução: SQL Scheduler (Cooperative Mode) SQL Thread Yield: SQL Scheduler Yield Apesar do SQL Scheduler ser o componente responsável pelo gerenciamento de threads do SQL Server, as threads são as principais responsáveis pelo funcionamento balanceado no modo cooperativo. Cada thread determina o tempo necessário para rodar parte da sua tarefa e, em seguida, passa o…

3

SOS Scheduler Yield

No post anterior, comentamos sobre o funcionamento do Scheduler, que funciona como um multitasking em modo cooperativo. Para que isso funcione adequadamente, todo o código SQL Server (escrito em C++) é cuidadosamente escrito para realizar periodicamente uma operação denominada “YIELD”. A tradução de Yield é “dar passagem”, assim como aquela placa de trânsito:   Como…

2

SQL Scheduler: Cooperative Mode

Muitas pessoas ficam curiosas para saber o que significa o SQL Scheduler e qual o papel que ele desempenha. Por um tempo pensava que não valeria a pena ficar falando sobre esse componente, uma vez que ele é bastante interno. Por outro lado, esse é um conhecimento indispensável para àqueles que pretendem ler um Dump…

6

Análise: sysprocesses – Identificando Alto Consumo de CPU

O blocker script (versão modificada) é utilizado para coletar informações que auxiliam no diagnóstico de performance SQL Server 2000. Nesse breve artigo, será destacado o trecho que auxilia no diagnóstico de problema de CPU. Links Relacionados Blocker Script original: sp_blocker_pss80 Versão SQL2000: Blocker Modificado Coleta de dados no SQL 2008–Script 1  Coleta de dados no…

0

Monitorando Alta CPU através da RING BUFFER

Alto consumo de CPU, como monitorar? Recentemente, li um comentário interessante postado pelo Fernando Garcia no post Como Monitorar com Ring Buffer. Ele mencionou o uso do RING BUFFER para diagnosticar alto consumo de CPU. Isso é algo fantástico para um DBA que não tem acesso remoto ao servidor, ou seja, não pode abrir o…

2

Como Monitorar com Ring Buffer?

Começo esse post realizando uma consulta às informações disponíveis do RING BUFFER relacionado com erros do Windows Security API. SELECT record FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = ‘RING_BUFFER_SECURITY_ERROR’ORDER BY timestamp DESC   Resultado e Interpretação: Colunas do tipo de dados XML Não existe nenhum formato fixo, mas todas as Ring Buffers apresentam uma estrutura de TIMESTAMP…

2

SQL Server Waitstats (Wait Types Repository)

  Durante a palestra no TechEd, comentei sobre uma planilha “mágica” que continha uma série de wait types e as respectivas descrições. Essa planilha foi criada pelo pessoal de Escalação do Suporte e pode auxiliar muito no diagnóstico de problema. Segue aqui alguns exemplos: Alto consumo de CPU: SOS_SCHEDULER_YIELD, CXPACKET (paralelismo) Alto consumo de memória:…

0

Spinlock e Hyper-Thread

  Algo curioso que estive vendo hoje.. Encontrei um disassembly do SQL Server rodando na minha máquina com o código do Spinlock (em vermelho): sqlservr!Spinlock<60,7,0>::SpinToAcquireOptimistic+0x3d: 00000000`01aca459 33c9 xor ecx,ecx 00000000`01aca45b 85db test ebx,ebx 00000000`01aca45d 7412 je 00000000`01aca471 00000000`01aca45f 8b07 mov eax,dword ptr [rdi] 00000000`01aca461 85c0 test eax,eax 00000000`01aca463 7407 je 00000000`01aca46c 00000000`01aca465 90 nop 00000000`01aca466…

9

Spinlock (Parte III)

Após comentar sobre os spinlock nos posts Spinlock Parte I e Parte II, agora vamos para o lado prático.   Monitorando os Spinlocks O comando DBCC SQLPERF(SPINLOCKSTATS) não é documentado, mas auxilia na monitoração dos spinlocks. Enquanto escrevia esse post, descobri que existe uma DMV também. SELECT * FROM sys.dm_os_spinlock_stats O resultado será apresentado:  …

3

Spinlock (Parte II)

No post anterior, fiquei um pouco receoso sobre meu comentário falando de spinlock usando T-SQL. A razão disso é que SPINLOCK não tem nada a ver com linguagens de alto nível, porém, está diretamente relacionado com a arquitetura de processador e códigos em assembly. Por isso, a melhor referência são os fabricantes de processadores, como…

6

Spinlock (Parte I)

Tenho recebido uma série de emails perguntando sobre SPINLOCK e infelizmente não tive tempo para escrever muito sobre o assunto. Há um post antigo: Spinlock Contention, mas vejo que falta mais coisa. Vou escrever esse artigo para dar uma idéia sobre o spinlock e, em seguida, mostrarei seu funcionamento. Primeiro, devemos traduzir literalmente a palavra…

6

Processos e Threads

Quem se recorda dos “Blue Screen” nos tempos do WIndows 95/98? O próprio chefe já demonstrou ao vivo!!!   Faz tempo que isso não acontece. A última vez que vi um Blue Screen foi quando meu notebook estava com problemas de memória, ou seja, era um problema de hardware e não software. No tempo do…

2

Assembly Itanium

No post anterior, mostrei os registradores da plataforma x64 e um exemplo de uma listagem em assembly. Como curiosidade, resolvi compilar um programa para a plataforma Itanium. Rotina comando(): __int64 comando(__int64 a, __int64 b, __int64 c, __int64 d, __int64 e){return a+b+c+d+e;} Disassembly: A plataforma Itanium são processadores RISC de 64-bits e utilizam instruções Explicitly Parallel…

0