Page Split – SQL Server

Em suma, no SQL Server o Page Split é uma operação que acontece quando um dado é inserido ou alterado, expandindo seu tamanho em uma página de dados e essa página não possui espaço livre o suficiente para realizar essa operação. Consequentemente, a página acaba sendo dividia em duas para comportar as novas informações, o que causa uma operação custosa de disco (maior gargalo no banco de dados).

Uma página (page) possui 8Kb de tamanho. Quando um dado é inserido na base de dados, este dado é colocado na page, enquanto a mesma estiver espaço livre. Quando um dado “grande” é inserido, ou um dado é alterado com valores maiores, ocorre uma quebra de página. Como funciona? Quando uma página estoura o limite de 8Kb, ele remove alguns dados da página atual e os move para outra página de dados. Isto é feito a fim de liberar espaço para novas linhas (dados) na página enquanto a mesma ter espaço livre.

Quando ocorre muitas pages split (divisão de páginas), pode ocorrer a diminuição do desempenho do SQL Server por causa do grande número de operações de I/O. As pages split podem ser monitoradas usando o Performance Monitor, o “SQL Server->Access Methods->Pages Split/sec counter”, através de uma query simples como irei mostrar neste artigo, ou neste link que mostra como monitorar através de um processo.

Aqui vai algumas dicas para evitar/reduzir as pages splits:

• Reconstruir índices com frequência para esvaziar o espaço do FILL FACTOR para mais dados.
• Aumento do uso de chaves primárias e o uso do Index Cluster nelas.
• Um hardware mais rápido e eficiente também reduz as pages split.
• Definir a opção FILL FACTOR apropriada para reservar espaço livre em cada página do índice. As faixas do FILL FACTOR são de 1-100. Esta paixa especifica a porcentagem da página de índice para ser livre. Se uma tabela está apenas em Read Only, defina o FILL FACTOR para 100%. Quando uma tabela possui bastante modificações, defina o FILL FACTOR para 70% ou 80%.

Como alterar o FILL FACTOR dos índices:

Use ALAN_TESTE;
GO

ALTER INDEX IX_MEU_INDICE ON Tabela.Campo 
     REBUILD WITH (FILLFACTOR = 80);
GO

A query para obter as pages split é essa:

SELECT
     COUNT(1) AS NumberOfSplits
     ,AllocUnitName
     ,Context
FROM
     fn_dblog(NULL,NULL)
WHERE
     Operation = 'LOP_DELETE_SPLIT'
GROUP BY
     AllocUnitName, Context
ORDER BY
     NumberOfSplits DESC

1 thoughts on “Page Split – SQL Server

Deixe um comentário