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

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

Desafio: Resource Monitor e Paginação de Memória

Esse é um desafio bastante difícil e não ficaria surpreso se aparecesse algo assim na certificação do Microsoft Certified Master. Esse problema envolve o diagnóstico da quantidade de memória disponível no servidor, mas sob uma perspectiva mais abrangente. Torna-se necessário compreender o cenário como um todo ao invés de analisar os erros pontualmente. Estava lendo…

15

DBCC MEMORYSTATUS (Parte I)

Esse comando DBCC MEMORYSTATUS sempre foi muito útil para investigar o consumo de memória no SQL Server. No tempo do SQL 2000, era impossível determinar a distribuição de memória sem o auxílio desse comando não-documentado. A partir do SQL 2005, algumas informações podem ser encontradas em DMV’s. Esse post mostra como acompanhar a visão do…

2

O que é um Resource Semaphore?

Semana passada consegui um ótimo exemplo de um problema relacionado com a falta de memória. No caso, a lentidão do sistema estava relacionada com espera por recursos denominados “Resource Semaphore” – um problema comum para muitos sistemas. Afinal, o que é um Resource Semaphore e como resolvê-lo? Resposta Curta: Resource Semaphore é um controle normal…

6

Lock Pages in Memory

Quando um processo aloca memória, as chamadas são convertidas em comandos VirtualAllocEx() para o gerenciador de memória do Windows. Toda essa memória é denominada memória virtual, que pode ser alocada em Page file ou RAM. Além disso, o Sistema Operacional tem a liberdade de paginada a qualquer instante e de forma transparente ao processo. Quando…

2

DMV: Memory Grants

Como monitorar queries que realizam alto consumo de memória? (Comentário: existem várias formas de interpretar “consumo de memória”. Nesse artigo, falamos sobre o espaço de trabalho usado por uma query) Use a view: sys.dm_exec_query_memory_grants Exemplo: — MEMORY GRANTS SELECT mg.session_id, mg.request_id, mg.resource_semaphore_id, mg.query_cost, mg.dop, mg.used_memory_kb, mg.required_memory_kb, mg.requested_memory_kb, mg.granted_memory_kb, mg.max_used_memory_kb, mg.ideal_memory_kb, mg.request_time, mg.grant_time, mg.wait_time_ms, mg.timeout_sec, mg.queue_id,…

0

Monitorando a Memória do SQL Server

Hoje recebi um comentário sobre a utilização de memória no SQL Server e comecei a pensar um pouco mais sobre o assunto. Será que esse é um assunto interessante? Comentei com um amigo sobre o assunto e ele (que não trabalha em TI) disse que vale a pena. Minha motivação do blog será mostrar um…

19

Exatamente 5000 portas!

Essa foi uma situação curiosa. Realizamos um teste de stress para validar a carga de um servidor SQL Server e, para nossa surpresa,  deparamos com erros “SQL Server Does Not Exist Or Access Denied”. Usando o NETSTAT, observamos que havia um limite de número de portas aberta, chegando até a porta 5000, no máximo. A…

0

Shared Memory

Pergunta: Por que não posso apagar um arquivo DLL que está em uso no Windows? Para responder essa pergunta, começarei com uma outra pergunta: Qual a diferença entre Shared e Private Working Set? (veja os números em WS Private e WS Shareable/Shared na figura abaixo). A resposta está na tradução: shared corresponde a memória compartilhada,…

0