Vídeos: SQL Server 2012 AlwaysOn

Olá,
Para todos vocês que estão por dentro das novidades do SQL Server 2012 e não querem perder nenhuma referência do assunto, eu recomendo fortemente que todos vocês salvem o link que vou colocar abaixo.

O meu amigo e parceiro de empresa, Nilton Pinheiro (site | twitter) criou um canal no Youtube onde colocou sua série de vídeos sobre AlwaysOn. Nem precisa dizer que é visualização obrigatória para quem quer aprender ou se aperfeiçoar em AlwaysOn!

Segue o link do canal: http://www.youtube.com/user/MrNiltonPinheiro

Parabéns Mr. Nilton Pinheiro! Mais uma ótima iniciativa sua!

Abraços e Bons Estudos!
Erickson Ricci – @EricksonRicci

Max Server Memory: Alterações no SQL Server 2012

Introdução

Uma das configurações mais mal-interpretadas, na minha opinião, é a configuração “MAX SERVER MEMORY” no SQL Server. Isso se deve ao fato da Microsoft ter colocado no nome da configuração a palavra “SERVER”.

Até o SQL Server 2008 R2, a configuração “MAX SERVER MEMORY” definia o quanto de memória seria utlizado, essencialmente, para o Buffer Pool, ou Cache de Dados. O que não fizer parte do Buffer Pool vai ser utilizado “além” desta configuração, ou seja, “MAX SERVER MEMORY” não define o total de memória alocado para o servidor, mas somente para o Buffer Pool.

No SQL Server 2012 isso mudou. E não foi somente esta configuração que mudou. A intenção deste artigo é explicar um pouco mais em detalhes como se deu esta alteração de configuração e a partir de agora como iremos configurar o consumo de memória do SQL Server.

 

SQLOS e o Memory Manager

Para ser breve, SQLOS é o sistema operacional do SQL Server. Ele é composto por diversos componentes (veja imagem abaixo) e um deste componentes é o Memory Manager.

SQLOS

O Memory Manager é responsável por cuidar de todas as alocações de memória no SQL Server. Ele é formado por alguns componentes como os memory nodes, memory clerks, memory caches e memory objects. O Memory Manager é formado por estes componentes pois o acesso à memória do servidor não é feita de maneira direta. É através deste componentes que o Memory Manager faz acesso à memória e a entrega por assim dizer a quem a solicitou.

Memory Nodes são estruturas internas do SQLOS. Seu papel é fornecer a localização de uma alocação de memória. Há três tipos principais de alocação que podem ser realizadas (obs: para não tentar “aportuguesar” as coisas por aqui, irei manter os termos em inglês mesmo =D) :

  • Page Allocator
  • Virtual Allocator
  • Shared Memory Allocator

O que mais nos interesse neste momento é o tipo Page Allocator. Este tipo de alocação é chamada de alocação de páginas pelo que você deve estar imaginando mesmo (!), a alocação é feita em estruturas de 8K, o mesmo tamanho das páginas de dados do SQL Server.

Há quatro tipos de Page Allocators:

  • Single Page Allocator
  • Multi Page Allocator
  • Large Page Allocator
  • Reserved Page Allocator

Vamos dar maior atenção para Single e Multi Page Allocator. Como era de se imaginar, as alocações de memória são feitas, respectivamente, em páginas individuais e em multiplas páginas. Estas duas estruturas são a base fundamental das alterações ocorridas no Memory Manager no SQL Server 2012. Logo voltaremos a falar destas estruturas.

Outro componente importante do Memory Manager são os Memory Clerks. Os Memory Nodes não ficam disponíveis para acesso direto. Para que seja feita uma alocação de memória, o solicitante antes cria um Memory Clerk para ter acesso a um Memory Node. Quatro são os tipos de Clerks gerados:

  • Generic
  • Cache Store
  • User Store
  • Object Store

A esta altura do campeonato, você, leitor, deve estar se perguntando: e a configuração MAX SERVER MEMORY, o que tem a ver com tudo isso?! Vamos ver qual a relação das estruturas citadas acima com esta configuração.

 

Novo Memory Manager

O Memory Manager foi reescrito no SQL Server 2012 e a principal alteração se deu através da junção das estruturas de alocação Single Page Allocator (SPA) e Multi Page Allocator (MPA). Uma imagem vale mais que mil palavras, vejam abaixo as mudanças estruturais que o Memory Manager sofreu.

Memory Manager2008-2012

No diagrama do lado esquerdo temos o Memory Manager até o SQL Server 2008 R2. Veja que nele tínhamos ambas as estruturas, SPA e MPA. O Buffer Pool estava ali na parte de baixo e ele representava boa parte da memória consumida pelo SQL Server, sendo alocada através da SPA. Alocações da MPA e outras alocações eram consumidas em outra parte da memória.

Já no novo formato, o Memory Manager consolidou a SPA e a MPA e o Buffer Pool subiu. O que significa isso? O Buffer Pool e outras estruturas fazem uso de um único allocator, tanto single quanto multi e toda esta memória alocada ocupa uma mesma área de memória.

A partir de agora o Buffer Pool vai representar “praticamente” toda a memória do servidor (SQL Server), justificando o nome MAX SERVER MEMORY. Mas atenção, perceba o destaque para “praticamente” pois ainda não irá representar 100% do consumo de memória. Veja que no diagrama, CLR ainda fica de fora desta contagem. Mas temos de concordar que é uma mudança estrutural bem significativa.

Outra imagem que descreve bem as alterações é a que segue abaixo:

Memory differences in SQL2008 and SQL2012

As mudanças não param por aqui. A MAX SERVER MEMORY também tem um valor mínimo que pode ser configurado. Não seria possível, apesar de totalmente non-sense, configurar MAX SERVER MEMORY com valor 0 (zero). Até o SQL Server 2008 R2 o valor mínimo de MAX SERVER MEMORY era de 16MB. A partir do SQL Server 2012 os valores mínimos são:

  • Ambientes 32bits – 64MB
  • Ambientes 64bits – 128MB

Ainda como consequência das alterações estruturais do Memory Manager, as DMVs sys.dm_os_memory_* sofreram alterações, bem como o DBCC memorystatus. Mas isso é assunto para outro post… =D

 

Referências

Memory configuration and sizing considerations in SQL Server 2012
http://support.microsoft.com/default.aspx?scid=kb;EN-US;2663912

SQL Server Memory Manager Changes in Denali
http://blogs.msdn.com/b/sqlosteam/archive/2011/01/04/sql-server-memory-manager-changes-in-denali.aspx

Memory Manager surface area changes in SQL Server 2012
http://blogs.msdn.com/b/sqlosteam/archive/2012/07/11/memory-manager-surface-area-changes-in-sql-server-2012.aspx

SQLOS’s memory manager and SQL Server’s Buffer Pool
http://blogs.msdn.com/b/slavao/archive/2005/02/11/371063.aspx

Memory Manager Configuration changes in SQL Server 2012
http://blogs.msdn.com/b/sqlosteam/archive/2012/07/12/memory-manager-configuration-changes-in-sql-server-2012.aspx

SQLOS Resources
http://blogs.msdn.com/b/sqlosteam/archive/2010/06/23/sqlos-resources.aspx

SQLOS and Memory Management
http://blogs.technet.com/b/pfelatam/archive/2011/11/03/sqlos-and-memory-management.aspx

 

Leituras Recomendadas

SQL Server Memory Management Explained
http://www.sqlservercentral.com/articles/Memory/74867/

DBCC MEMORYSTATUS (Parte I)
http://blogs.msdn.com/b/fcatae/archive/2010/07/26/dbcc-memorystatus-parte-1.aspx

DBCC MEMORYSTATUS (Parte II)
http://blogs.msdn.com/b/fcatae/archive/2010/11/08/dbcc-memorystatus-parte-ii.aspx

Cache de Dados
http://blogs.msdn.com/b/fcatae/archive/2010/06/25/cache-de-dados.aspx

Monitorando a Memória do SQL Server
http://blogs.msdn.com/b/fcatae/archive/2010/06/16/monitorando-a-mem-243-ria-do-sql-server.aspx

Memory: Working Set
http://blogs.msdn.com/b/fcatae/archive/2010/03/31/memory-working-set.aspx

 

Espero que tenham gostado da leitura. Bons estudos e até breve.

Erickson Ricci (@EricksonRicci)

SQL Server 2012 Developer Training Kit

Desenvolvedores, administradores de bancos de dados, instrutores, consultores, influenciadores. Se você se enquadra em uma destas opções ou em qualquer outro bordão profissional de quem trabalha com SQL Server e já quer ficar atualizado com o SQL Server 2012 você deve fazer o download e estudar o SQL Server 2012 Developer Training Kit.

O que você irá encontrar nele:

  • Apresentações
  • Demonstrações
  • Hands-On Labs
  • Vídeos
  • Transcripts

Para quem quiser preparar algum workshop sobre o SQL Server 2012 este é um ótimo material. Pensando nisso, o pessoal da comunidade técnica no Technet Wiki preparou este conteúdo de referência para realizar este tipo de workshop. Veja os tópicos sugeridos:

  • Day 1: Introduction and Database Engine Topics
    • Module 1: Introduction to SQL Server 2012
    • Module 2: Introduction to SQL Server 2012 AlwaysOn
    • Module 3: Exploring and Managing SQL Server 2012 Database Engine Improvements
    • Module 4: SQL Server 2012 Database Server Programmability
  • Day 2: Visual Studio, .NET and Business Intelligence Topics
    • Module 5: SQL Server 2012 Application Development
    • Module 6: SQL Server 2012 Enterprise Information Management
    • Module 7: SQL Server 2012 Business Intelligence
  • Hands-On Labs
    • Topic: SQL Server 2012 Database Engine
    • Topic: Visual Studio 2010 and .NET 4.0
    • Topic: SQL Server 2012 Enterprise Information Management
    • Topic: SQL Server 2012 Business Intelligence
    • Topic: Windows Azure and SQL Azure

Referências:

SQL Server 2012 Developer Training Kit Content (en-US)
http://social.technet.microsoft.com/wiki/contents/articles/6976.sql-server-2012-developer-training-kit-content-en-us.aspx

SQL Server 2012 Developer Training Kit BOM (en-US)
http://social.technet.microsoft.com/wiki/contents/articles/6982.sql-server-2012-developer-training-kit-bom-en-us.aspx

Bons estudos e até breve!

Erickson Ricci (@EricksonRicci)