Buffer Pool Extension

Olá Pessoal,

Muito se fala de In-Memory Database e é verdade que o SQL Server a partir da versão 2012 evolui consideravelmente neste sentido. Meu artigo hoje, visa falar sobre uma funcionalidade que ao meu ver é “desconhecida” dos DBAs no dia-a-dia e que pode ser uma excelente carta na manga, esta funcionalidade é o Buffer Pool Extension.

Primeiramente uma definição sobre Buffer Pool: é um lugar na memória do sistema operacional utilizado para armazenar as páginas de dados de tabelas e índices e que são modificadas ou lidas do disco.

Até o SQL Server 2012 nossa gestão da Buffer Pool posso dizer que era mínima, o que tínhamos de possibilidade era definir um tamanho máximo a ser utilizado pelo SQL Server de memória (RAM), através do parâmetro:

[sourcecode language=”sql”]
sp_configure ‘show advanced options’, 1;
GO
RECONFIGURE;
GO
sp_configure ‘max server memory’, 4096;
GO
RECONFIGURE;
GO
[/sourcecode]

Na prática o que acontecia era que tínhamos uma grande área de memória onde ali tínhamos páginas de dados que o próprio SQL Server gerenciava, muitas vezes, pela insuficiência de memória RAM, era necessário remover as páginas consideradas limpas (Clean Pages) para dar espaço a outras operações que ocorriam no banco de dados. Acontece que as Clean Pages, são de fundamental importância nas operações de leitura, já que elas retém os dados dos objetos em memória prontos para serem lidos. Você já deve ter escutado alguém dizer: “Ah o SQL Server está lendo os dados já do cache”, então, ele estava lendo eram essas páginas consideradas “limpas”, porém até o SQL Server 2012 você não tinha controle para possibilitar o quanto que o SQL Server poderia armazenar de páginas de dados limpas.

Com o lançamento do SQL Server 2014 o funcionamento da Buffer Pool mudou um pouco, agora o diagrama é este:

Diagrama: Buffer Pool Extension

O que podemos entender deste diagrama é que, agora a Buffer Pool possui uma extensão e que nela será armazenada somente as páginas de dados consideradas limpas – Clean Pages.

 

Em relação à tuning isto é sensacional, desta forma a Microsoft define que:

  • ganhos de desempenho em aplicações OLTP com uma elevada quantidade de operações de leitura pode ser melhorado significativamente;
  • pode ser habilitado com facilidade, e não requer alterações nos aplicativos existentes;

Em quais cenários você pode utilizar:

  • Quando o I/O tem um alto volume de operações de leitura;
  • Quando seu servidor tiver até 32 GB de memória RAM;
  • Sua Buffer Pool Extension terá de 4 à 10 vezes o tamanho de sua memória RAM, ou seja, 32 GB de RAM então sua BPE será de até 320 GB;
  • Buffer Pool Extension é extremamente recomendado utilizando discos SSDs;

[sourcecode language=”sql”]
— Como habilitar?
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION ON
(FILENAME = ‘F:\SSDCACHE\Example.BPE’, SIZE = 50 GB);

— Como desabilitar?
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION OFF;

— Como modificar?
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION OFF;
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION ON
(FILENAME = ‘F:\SSDCACHE\Example.BPE’, SIZE = 60 GB);

[/sourcecode]

Seja feliz com esta dica, pois ela vai ajudar muito aquela empresa ou cliente que não tem dinheiro para investir realizando um upgrade de memória RAM no servidor, mas que tem dinheiro para espetar um disco SSD vindo da storage ou algo semelhante, é muito mais barato fazer um upgrade de 300 GB de SSD do que comprar esse mesmo volume em memória RAM.

Lembre-se que utilizar melhor os recursos é fundamental para a experiência de um DBA, não combina fazer tuning e apresentar uma fatura de peças para o cliente comprar (rsrs).

Estou preparando uma demonstração da efetividade da gestão e utilização da Buffer Pool Extension e em breve estarei postando.

Se gostou ou ficou alguma dúvida comente!

Obrigado pessoal!

Até a próxima pessoal!
Vithor da Silva e Silva | DBA SQL Server


Fontes:

https://msdn.microsoft.com/en-us/library/dn133176.aspx

https://blogs.msdn.microsoft.com/psssql/2009/03/17/sql-server-what-is-a-cold-dirty-or-clean-buffer/

Deixe uma resposta