Compartir a través de


sp_estimate_data_compression_savings (Transact-SQL)

Devuelve el tamaño actual de las tablas y calcula el tamaño de la tabla para el estado de compresión solicitado. La compresión se puede evaluar para tablas enteras o partes de tablas. Esto incluye montones, índices clúster, índices no clúster, vistas indizadas y particiones de tablas y de índices. Las estructuras de tabla se pueden comprimir utilizando la compresión de fila o de página. Si la tabla, índice o partición ya están comprimidos, puede utilizar este procedimiento para calcular el tamaño de la tabla, del índice o de la partición en caso de que se descomprimiera.

[!NOTA]

La compresión y sp_estimate_data_compression_savings sólo están disponibles en las ediciones Enterprise y Developer de SQL Server 2008.

Para calcular el tamaño del objeto, en caso de que se use el valor de compresión solicitado, el procedimiento almacenado prueba el objeto de origen y carga los datos en una tabla e índice equivalentes creados en tempdb. La tabla o índice creados en tempdb se comprimen al valor solicitado y se calcula el ahorro estimado de la compresión.

Para cambiar el estado de compresión de una tabla, índice o partición, utilice las instrucciones ALTER TABLE o ALTER INDEX. Para obtener información general sobre la compresión, vea Crear tablas e índices comprimidos.

[!NOTA]

Si se fragmentan los datos existentes, es posible que pueda reducir su tamaño regenerando el índice y sin necesidad de utilizar la compresión. Para los índices, el factor de relleno se aplicará cuando se vuelva a generar el índice. Esto podría aumentar el tamaño del índice.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

sp_estimate_data_compression_savings 
      [ @schema_name = ] 'schema_name'  
     , [ @object_name = ] 'object_name' 
    , [@index_id = ] index_id 
     , [@partition_number = ] partition_number 
    , [@data_compression = ] 'data_compression' 
[;]

Argumentos

  • [ @schema\_name = ] 'schema_name'
    Es el nombre del esquema de la base de datos que contiene la tabla o vista indizada. schema_name es sysname. Si schema_name es NULL, se utiliza el esquema predeterminado del usuario actual.

  • [ @object\_name = ] 'object_name'
    Es el nombre de la tabla o vista indizada en la que está el índice. object_name es sysname.

  • [ @index\_id = ] 'index_id'
    Es el identificador del índice. index_id es int y puede ser uno de los valores siguientes: el número del identificador de un índice, NULL o 0 si object_id es un montón. Para obtener información de todos los índices de una tabla base o vista, especifique NULL. Si especifica NULL, también debe especificar NULL para partition_number.

  • [ @partition\_number = ] 'partition_number'
    Es el número de partición en el objeto. partition_number es inty puede ser uno de los valores siguientes: el número de partición de un índice o montón, el valor NULL o 1 para un índice o montón sin particiones.

    Para especificar la partición, también puede especificar la función $partition. Para obtener información sobre todas las particiones del objeto propietario, especifique NULL.

  • [ @data\_compression = ] 'data_compression'
    Es el tipo de compresión que se va a evaluar. data_compression pueden ser uno de los valores siguientes: NONE, ROW o PAGE.

Valores de código de retorno

0 (correcto) o 1 (error)

Conjuntos de resultados

El siguiente conjunto de resultados se devuelve para proporcionar el tamaño actual y estimado de la tabla, índice o partición.

Nombre de columna

Tipo de datos

Descripción

object_name

sysname

Nombre de la tabla o vista indizada.

schema_name

sysname

Esquema de la tabla o vista indizada.

index_id

int

Identificador de índice de un índice:

0 = Montón

1 = Índice clúster

> 1 = Índice no clúster

partition_number

int

Número de partición. Devuelve 1 para una tabla o índice sin particiones.

size_with_current_compression_setting (KB)

bigint

Tamaño actual de la tabla, índice o partición solicitados.

size_with_requested_compression_setting (KB)

bigint

Tamaño estimado de la tabla, índice o partición que utiliza el valor de compresión solicitado y, si es aplicable, factor de relleno existente, suponiendo que no hay fragmentación.

sample_size_with_current_compression_setting (KB)

bigint

Tamaño del ejemplo que se crea utilizando el valor de compresión existente y, si es aplicable, factor de relleno existente, sin fragmentación. Dado que este conjunto de filas se crea desde cero, no hay fragmentación.

sample_size_with_requested_compression_setting (KB)

bigint

Tamaño del ejemplo que se crea utilizando el valor de compresión solicitado y, si es aplicable, factor de relleno existente, sin fragmentación.

Notas

Utilice sp_estimate_data_compression_savings para estimar el ahorro que se puede obtener al habilitar una tabla o partición para la compresión de fila o de página. Por ejemplo, si el tamaño medio de una fila se puede reducir un 40 por ciento, potencialmente también se puede reducir el tamaño del objeto en un 40 por ciento. Es posible que no consiga ahorrar espacio, ya que depende del factor de relleno y del tamaño de la fila. Por ejemplo, si una fila tiene 8.000 bytes de longitud y reduce su tamaño en un 40 por ciento, sólo podrá seguir incluyendo una fila en una página de datos. No se obtiene ningún ahorro.

Si los resultados de ejecutar sp_estimated_rowsize_reduction_for_vardecimal indican que la tabla crecerá, eso quiere decir que muchas filas de la tabla utilizan prácticamente toda la precisión en los tipos de datos, y la adición de la mínima sobrecarga necesaria para el formato comprimido es mayor que el ahorro obtenido por la compresión. En este caso excepcional, no habilite la compresión.

Si una tabla está habilitada para compresión, utilice sp_estimate_data_compression_savings para estimar el tamaño medio de la fila si se descomprime la tabla.

Durante esta operación, se adquiere un bloqueo con intención compartida (IS) en la tabla. Si no se puede obtener un bloqueo (IS), se bloqueará el procedimiento. La tabla se examina bajo el nivel de aislamiento READ COMMITTED.

Si el valor de compresión solicitado es mismo que el de la compresión actual, el procedimiento almacenado devolverá el tamaño estimado sin la fragmentación de los datos y utilizando el factor de relleno existente.

Si no existe el identificador de índice o la partición, no se devolverá ningún resultado.

Permisos

Es necesario contar con un permiso de tipo SELECT en la tabla.

Ejemplos

En el ejemplo siguiente se calcula el tamaño de la tabla Production.WorkOrderRouting de la base de datos AdventureWorks si se comprime mediante la compresión ROW.

USE AdventureWorks
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO