Deseamos enseñarte la mejor información que hallamos por todo internet. Nosotros esperamos que te resulte útil y si quieres comentarnos alguna mejora hazlo con total libertad.
Solución:
Para ver si las páginas de datos están actualmente comprimidas como “PÁGINA”, puede usar el DMF no documentado sys.dm_db_database_page_allocations()
. El is_page_compressed
El campo contiene la información que está buscando. Tendrás que usar el DETAILED
modo (es decir, 5to parámetro) o de lo contrario los valores en ese campo serán todos NULL
.
Para ser claros (según la redacción de la pregunta, “¿qué puedo hacer para averiguar si el datos en esa tabla está comprimida la página?”), esto no es un problema de todo o nada: se aplica la compresión de la página por cada página de datos, por lo tanto, puede tener ninguno comprimido, todos comprimidos o cualquier combinación intermedia. Por lo tanto, debe mirar todas las páginas. Y no, no puede asumir necesariamente que una sola página comprimida sin página indica que necesita REBUILD
porque una página sin llenar no se comprimirá.
Por ejemplo:
SELECT [is_page_compressed]
FROM sys.dm_db_database_page_allocations(DB_ID(), OBJECT_ID(N'dbo.CompressedHeap'),
0, 1, 'DETAILED');
A continuación se muestra que las páginas de datos no están comprimidas inicialmente, pero lo están después de la REBUILD
operación:
USE [tempdb];
-- DROP TABLE dbo.CompressedHeap;
CREATE TABLE dbo.CompressedHeap
(
ID INT IDENTITY(1, 1) NOT NULL,
String sysname,
[MaxLength] SMALLINT,
[Type] VARCHAR(5)
) WITH (DATA_COMPRESSION = PAGE);
INSERT INTO dbo.CompressedHeap ([String], [MaxLength], [Type])
SELECT col.[name], col.[max_length], obj.[type]
FROM master.sys.columns col
CROSS JOIN master.sys.objects obj;
SELECT [is_page_compressed], *
FROM sys.dm_db_database_page_allocations(DB_ID(), OBJECT_ID(N'dbo.CompressedHeap'),
0, 1, 'DETAILED')
WHERE [is_iam_page] = 0
AND [is_allocated] = 1;
-- 394 pages
ALTER TABLE dbo.CompressedHeap REBUILD;
SELECT [is_page_compressed], *
FROM sys.dm_db_database_page_allocations(DB_ID(), OBJECT_ID(N'dbo.CompressedHeap'),
0, 1, 'DETAILED')
WHERE [is_iam_page] = 0
AND [is_allocated] = 1;
-- 179 pages
valoraciones y comentarios
Si te gustó nuestro trabajo, tienes la libertad de dejar un ensayo acerca de qué te ha impresionado de esta división.