Saltar al contenido

¿Cómo puedo ver si los datos en una tabla de SQL Server están comprimidos en la página?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *