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

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

Esperas CMEMTHREAD e MemObj

Nos últimos posts, falamos sobre o Memory Clerk e o MemObj. Monitorando Memória com os Clerks http://blogs.msdn.com/b/fcatae/archive/2014/02/25/monitorando-memoria.aspx Usando os Memory Objects http://blogs.msdn.com/b/fcatae/archive/2014/03/05/memoria-memory-object.aspx Nesse artigo vou utilizar um post do Bob Dorr sobre o CMemThread How It Works: CMemThread and Debugging Them http://blogs.msdn.com/b/psssql/archive/2012/12/20/how-it-works-cmemthread-and-debugging-them.aspx Operador new O SQL Server, assim como grande parte dos programas escrito em…

5

Usando os Memory Objects

Tudo começou com a discussão de XML. Memory Leak usando OPENXML http://blogs.msdn.com/b/fcatae/archive/2014/02/18/sp-xml-preparedocument-leak.aspx Existem duas procedures: sp_xml_preparedocument sp_xml_removedocument A primeira serve para reservar a memória para o documento, enquanto que a segunda libera o recurso. Existe uma forma de causar um Memory Leak chamando várias vezes a procedure de “prepare” e esquecendo de liberar a memória…

0

Foto da Alocação de Memória

Existe uma forma “hardcore” para acompanhar todas as alocações de memória no SQL Server. Podemos criar um pacote XEvent e acompanhar o evento “XeSosPkg::page_allocated” e gerar um stack trace (stack dump). Por exemplo, nas alocações de memória na procedure sp_xml_preparedocument, observamos as alocações de memória realizadas pelo componente MSXMLSQL. 14d9dc3c 781181f8 sqllang!CIMallocYieldWrapper::Alloc 14d9dc58 7811eb23 MSXMLSQL!_MemAlloc+0x27…

0

Monitorando Memória com os Clerks

No último post, comentei sobre um erro relacionado à falta de memória no servidor SQL Server. Essa era a mensagem de erro: Msg 6624, Level 16, State 7, Procedure sp_xml_preparedocument, Line 1 XML document could not be created because server memory is low. Use sp_xml_removedocument to release XML documents. Como próximo passo, minha sugestão foi…

0

Memory Leak usando OPENXML

Existem duas formas de acessar dados XML de dentro do SQL Server. Função OPENXML Tipo nativo XML Nesse post, falaremos sobre o uso do OPENXML – disponível desde o SQL Server 2000. SQL Books Online apresenta um exemplo bastante simples: Examples: Using OPENXML http://technet.microsoft.com/en-us/library/ms187897.aspx DECLARE @DocHandle int DECLARE @XmlDocument nvarchar(1000) SET @XmlDocument = N'<ROOT> <…

0

SQL Server Memory Manager

Amanhã recomeçamos mais um novo SQL BOOTCAMP de Ramp-up com os novos engenheiros do time. Começaremos pontualmente às 9h com um dos assuntos mais obscuros do mundo SQL Server: gerenciamento de memória. O blog do Slava ainda é considerado a documentação mais precisa sobre o assunto. SQLOS’s memory manager and SQL Server’s Buffer Pool http://blogs.msdn.com/b/slavao/archive/2005/02/11/371063.aspx…

8

Desafio: Qual a distribuição de memória?

Desde o SQL Server 2000, existem 3 grandes famílias de memória. São elas: Database Cache: Memória dedicada ao cache de páginas de dados (tabelas e índices) Stolen Memory: Memória roubada (!?!?) Free Memory: Memória livre na instância SQL server Qual das figuras abaixo representa uma situação típica de um servidor saudável e atendendo uma alta…

7

Falta de Memória na Máquina

No post anterior falei sobre a memória livre no sistema operacional, no qual apresentava um gráfico com grande variação na quantidade de memória livre. Afinal, como descobrir se falta memória RAM no meu servidor? Existe uma forma bastante simples usando a ferramenta do Performance Monitor. Basta acompanhar o contador “Memory: Available MBytes”. Esse contador apresenta…

8

Available Memory: Memória Livre no Sistema Operacional

Estou revisando um servidor em relação à quantidade de memória RAM disponível e notei um gráfico bem interessante: quantidade de memória livre em MB ao longo do tempo. Mudando a escala, o gráfico apresenta os vales mais acentuados: Desafio rápido: Seria isso um problema? Resposta: <ainda vou publicar>

6

Configurando o Maximize Throughput for Network Applications

Comecei a reler os artigos que escrevi no passado e encontrei um falando sobre Working Set. Quando escrevi o post, pensava no mistério do porque o Task Manager reporta a quantidade incorreta de memória usada pelo SQL Server. A explicação está em um documento do MSDN que comenta sobre a composição do Working Set. Toda…

1

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

DBCC MEMORYSTATUS (Parte II)

Continuando o artigo sobre o DBCC MEMORYSTATUS, comentaremos sobre o trecho que fala sobre os contadores globais de memória da máquina e do processo do SQL Server. Process/System Counts: Process/System Counts Value —————————————- ——————– Available Physical Memory 3808894976 Available Virtual Memory 8726174752768 Available Paging File 72376823808 Working Set 569122816 Percent of Committed Memory in WS…

4

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

Data Buffer

O que é um BUFFER? Dentro do SQL Server, Buffer é uma estrutura de tamanho fixo de 8KB utilizada para servir primariamente como cache de dados. Tanto a memória como os arquivos em disco são segmentados em páginas de 8Kb. Ao contrário dos demais Bancos de dados (Oracle, DB2, etc), esse tamanho é fixo e…

5