Há uma tabela existente no SQL 2012 Enterprise DB, que tem aproximadamente 120 MB de tamanho com aproximadamente 2.000 registros. Seu maior campo nvarchar(max)
contém XML esponjoso (variando de 20 a 300 kB) que por si só compacta aproximadamente 50-75% em 7Zip ou RAR.
Eu tentei os seguintes comandos que retornam instantaneamente, mesmo que simplesmente consultar * da tabela leve alguns segundos:
alter table sch.table1 REBUILD PARTITION=ALL WITH (DATA_COMPRESSION=ROW)
alter table sch.table1 REBUILD PARTITION=ALL WITH (DATA_COMPRESSION=PAGE)
alter table sch.table1 REBUILD PARTITION=ALL WITH (DATA_COMPRESSION=NONE)
Mas o tamanho não muda após nenhum deles, mesmo que as propriedades da tabela mostrem corretamente o tipo de compactação.
O servidor está realmente aplicando e removendo a compactação das linhas/páginas? Aparentemente, não tem tempo para fazer isso na fração de segundo que cada comando leva para ser executado.
A compactação de linha e a compactação de página têm várias limitações e nem sempre reduzem o espaço usado por sua tabela. Vamos percorrer um exemplo simples. Suponha que eu insira um monte de strings de comprimento 4030 em uma tabela. A aplicação da compactação de página resulta em uma redução de espaço de 4.000 KB para 24 KB:
No entanto, se eu inserir strings de comprimento 4050, não obtenho economia de espaço com a compactação de página, mesmo que as strings sejam todas do mesmo caractere!
Para sua mesa, você provavelmente está enfrentando uma limitação diferente. Uma tabela no SQL Server pode conter apenas 8060 bytes por linha . Quaisquer dados que não couberem são armazenados separadamente como arquivos
ROW_OVERFLOW_DATA
. O tamanho médio da linha é de cerca de 64 KB e o tamanho mínimo da linha é de 20 KB. Isso significa que todos os seus dados XML não podem ser armazenados em linha. A compactação de dados não funciona em dados armazenados fora da linha :Ambas as soluções alternativas estão disponíveis no SQL Server 2012. No SQL Server 2016, há uma opção adicional com a introdução do GZIP . Isso pode compactar dados que, de outra forma, seriam armazenados fora da linha. Os dados anteriores não podiam ser compactados por página, mas o GZIP reduz o espaço necessário para 64 KB:
Mesmo strings muito longas podem ser bem compactadas: