Arquitetura do SQL Server

Finalmente publicado o primeiro vídeo da série Fundamentos de Banco de Dados. https://channel9.msdn.com/Series/SQL-Fundamentos/Arquitetura-do-SQL-Server Nesse episódio vamos falar sobre as grandes famílias de componentes. Para quem já viu minhas palestras, deve ter notado que sempre comento sobre a separação entre Relational Engine (Linguagem, compilação e execução) e Storage Engine. Além disso, temos a família de Protocols…

9

Vídeos de Fundamentos Banco de Dados

Decidi começar um experimento diferente, que vai além do blog, que é uma série de vídeos explicativos sobre o funcionamento do SQL Server. Há muito tempo tenho pensado nessa ideia e finalmente se tornou realidade. A série estréia no Channel 9.   https://channel9.msdn.com/Series/SQL-Fundamentos Ainda não planejei o número exato de vídeos. Gostaria de fechar em…

5

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

TechEd Brasil 2011

Estes dias estava retomando os projetos antigos e um deles era o Blog ninja. Resolvi aliviar um pouco o trabalho e voltar a investir o tempo em escrever mais sobre SQL Server e seu funcionamento interno. Acabei lembrando do TechEd 2011, na qual apresentei em conjunto com o Luiz Felipe Pimenta a palestra “Raio-X do…

3

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

A significant part of sql server process memory has been paged out

Ouch! Você sabe o que essa mensagem significa? 2010-10-31 12:00:00.00 spid1s      A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 4620, committed (KB): 1652332, memory utilization: 0%. Pensando na data, dia 31/Out, eu seriamente pensaria em Helloween! Porque essa…

4

Coleta de dados no SQL 2008–Script 3

A terceira parte do script de coleta de dados para diagnóstico de performance está apresentado nesse artigo. A segunda parte era o coração do script e roda em intervalos periódicos de 5 a 15 segundos. Por outro lado, a terceira parte corresponde a parte massiva e que coleta a maior parte das informações. O objetivo…

4

Coleta de dados no SQL 2008–Script 2

A segunda parte do script de coleta de dados para diagnóstico de performance está apresentado nesse artigo. Aqui, os dados serão coletados em intervalos de 5 a 15 segundos. Esse é o coração do blocker script e corresponde a um ponto muito delicado, porque a coleta é realizada frequentemente sem impacto de performance. Links Relacionados…

2

Coleta de dados no SQL 2008–Script 1

A primeira parte do script de coleta de dados para diagnóstico de performance está apresentado nesse artigo. 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 SQL 2008–Script 2 Coleta de dados no SQL 2008–Script 3 Versão final: Monitor SQL (Versão atualizada do Blocker…

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

Spinlock Contention

Problemas de contenção por spinlock são difíceis de serem identificados. As estatísticas relacionadas com Spinlocks são disponibilizadas através do comando não-documentado: DBCC SQLPERF(SPINLOCKSTATS) Um trecho do resultado no SQL Server 2000: Spinlock Name Collisions Spins Spins/Collision ——————– ———– ————- ————— MUTEX 11693 5823169 498,0047 CONNECTS 0 0 0 SRVPROC 1 0 0 DBT_HASH 0 0…

7