Árvore de páginas

Para mais informações sobre esta feature, consulte também a documentação do fabricante.

Atenção

Este procedimento pode levar uma quantidade considerável de tempo. Faça a análise de seu cenário antes de iniciá-lo e determine um horário para esta manutenção.


O que é a compactação de dados?

A compactação de base de dados é um recurso que pode ser utilizado com o Protheus para melhorar a performance e otimizar o consumo de espaço em disco do banco de dados. Com isto, você pode reduzir o tamanho do banco de dados em até 70%, ganhando agilidade na leitura, escrita e no tempo de restore.

Esta feature está disponível nas seguintes versões:

Versão SQL ServerEdição SQL Server
SQL Server 2008 Enterprise
SQL Server 2008 R2Enterprise
SQL Server 2012Enterprise
SQL Server 2014Enterprise
SQL Server 2016Enterprise, Standard
SQL Server 2017Enterprise, Standard
SQL Server 2019Enterprise, Standard

Reforçamos que edições limitadas e tipicamente classificadas como Express não são homologadas ou suportadas para uso com o Protheus.

Compactação por linha ou por página?

Para o Protheus, o tipo de compactação mais eficiente é o de página, pois desta maneira os registros redundantes serão armazenados em um local da página e referenciados nas outras ocorrências.

A compactação de linha não é muito eficiente para o produto, já que o Protheus preenche automaticamente alguns campos com espaços vazios.

Posso fazer a compactação dos índices e tabelas?

Sim. Coloque o nível de compactação para páginas.

Você pode executar a compactação do banco de dados inteiro ou de tabelas específicas, conforme sua necessidade.

Quais são os benefícios da compactação de dados?

Você pode ter ganhos em espaço e no tempo de leitura no banco de dados pois, ao economizar espaço, o desempenho de cargas de trabalho intensivas de I/O pode ser melhorado, já que os dados serão armazenados em menos páginas e, consequentemente, as consultas precisarão ler menos páginas do disco. 

Atenção

Pode haver um overhead de CPU para a compactação e descompactação de dados. 

Quais os impactos da compactação de dados?

Além do espaço em disco e velocidade, você pode ter um aumento no consumo de CPU. 

Outras manutenções no banco de dados, como atualização de estatísticas e rebuild, são importantes para otimizar ainda mais o seu ambiente. 

Atenção

É imprescindível o apoio de um DBA em manutenções como rebuild, coleta de estatísticas, e compressão de dados e index

Cuidados a serem tomados

Cuidado

O modo de recuperação do banco de dados deve estar em simple para a compactação de dados. Com o modo full, o datafile do banco de dados pode ter um crescimento muito grande, comprometendo o espaço em disco.

Após a finalização da manutenção, é possível configurar o modo de recuperação de volta ao que for recomendado para sua arquitetura.   

Atenção

Pode haver um overhead de CPU para a compactação e descompactação de dados, conforme a documentação do fabricante

Faça a análise do seu cenário antes de executar a compressão. É possível que seja necessário mais de uma janela de manutenção para a aplicação da compressão.


Retorno da consulta

Ao executar os scripts, o resultado trará o comando de alteração de índices e tabelas preparado. Copie o resultado e, em uma nova consulta, execute o script.

É possível que em alguns resultados o banco de dados retorne NULL. Nestes casos, remova as linhas NULL antes de executar o script.

SELECT
'ALTER INDEX ' + QUOTENAME(name)
+ ' ON '
+ QUOTENAME(OBJECT_SCHEMA_NAME(object_id))
+ '.'
+ QUOTENAME(OBJECT_NAME(object_id))
+ ' REBUILD PARTITION = ALL WITH (FILLFACTOR = 90, DATA_COMPRESSION = PAGE)'
FROM sys.indexes
WHERE OBJECTPROPERTY(object_id, 'IsMSShipped') = 0
AND OBJECTPROPERTY(object_id, 'IsTable') = 1
ORDER BY CASE type_desc
WHEN 'CLUSTERED' THEN 1
ELSE 2
END
SELECT
'ALTER TABLE ' + name
+ ' REBUILD WITH (DATA_COMPRESSION = PAGE);'
FROM sysobjects
WHERE xtype = 'U'
SELECT
    st.name,
sp.data_compression,
sp.data_compression_desc
FROM sys.partitions sp
INNER JOIN sys.tables st
ON st.object_id = sp.object_id
WHERE data_compression = 0