sp_estimate_data_compression_savings (Transact-SQL)sp_estimate_data_compression_savings (Transact-SQL)

SE APLICA A: síSQL Server noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Devuelve el tamaño actual del objeto solicitado y calcula el tamaño del objeto para el estado de compresión solicitado.Returns the current size of the requested object and estimates the object size for the requested compression state. La compresión se puede evaluar para tablas enteras o partes de tablas.Compression can be evaluated for whole tables or parts of tables. Esto incluye montones, índices clúster, índices no clúster, índices de almacén de columnas, vistas indizadas y particiones de tablas e índices.This includes heaps, clustered indexes, nonclustered indexes, columnstore indexes, indexed views, and table and index partitions. Los objetos se pueden comprimir mediante la compresión de archivo de fila, página, almacén de columnas o almacén de columnas.The objects can be compressed by using row, page, columnstore or columnstore archive compression. 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 volviera a comprimir.If the table, index, or partition is already compressed, you can use this procedure to estimate the size of the table, index, or partition if it is recompressed.

Nota

La compresión y sp_estimate_data_compression_savings no están disponibles en todas las MicrosoftMicrosoftediciones de. SQL ServerSQL ServerCompression and sp_estimate_data_compression_savings are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL ServerSQL Server, vea Características compatibles con las ediciones de SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Features Supported by the Editions of SQL Server 2016.

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.To estimate the size of the object if it were to use the requested compression setting, this stored procedure samples the source object and loads this data into an equivalent table and index created in tempdb. La tabla o índice creados en tempdb se comprimen al valor solicitado y se calcula el ahorro estimado de la compresión.The table or index create in tempdb is then compressed to the requested setting and the estimated compression savings is computed.

Para cambiar el estado de compresión de una tabla, índice o partición, utilice las instrucciones ALTER TABLE o ALTER index .To change the compression state of a table, index, or partition, use the ALTER TABLE or ALTER INDEX statements. Para obtener información general sobre la compresión, vea compresión de datos.For general information about compression, see Data Compression.

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.If the existing data is fragmented, you might be able to reduce its size without using compression by rebuilding the index. Para los índices, el factor de relleno se aplicará cuando se vuelva a generar el índice.For indexes, the fill factor will be applied during an index rebuild. Esto podría aumentar el tamaño del índice.This could increase the size of the index.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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'   
[;]  

ArgumentosArguments

[ @schema_name=] 'schema_name'[ @schema_name= ] 'schema_name'
Es el nombre del esquema de la base de datos que contiene la tabla o vista indizada.Is the name of the database schema that contains the table or indexed view. schema_name es de tipo sysname.schema_name is sysname. Si schema_name es null, se usa el esquema predeterminado del usuario actual.If schema_name is NULL, the default schema of the current user is used.

[ @object_name=] 'object_name'[ @object_name= ] 'object_name'
Es el nombre de la tabla o vista indizada en la que está el índice.Is the name of the table or indexed view that the index is on. object_name es sysname.object_name is sysname.

[ @index_id=][ @index_id= ] index_id
Es el identificador del índice.Is the ID of the index. el valor de la siguiente es inty puede ser uno de los valores siguientes: el número de identificación de un índice, null o 0 si object_id es un montón.index_id is int, and can be one of the following values: the ID number of an index, NULL, or 0 if object_id is a heap. Para obtener información de todos los índices de una tabla base o vista, especifique NULL.To return information for all indexes for a base table or view, specify NULL. Si especifica NULL, también debe especificar NULL para partition_number.If you specify NULL, you must also specify NULL for partition_number.

[ @partition_number=] partition_number[ @partition_number= ] partition_number
Es el número de partición en el objeto.Is the partition number in the object. partition_number es de tipo inty puede tener uno de los valores siguientes: el número de partición de un índice o montón, null o 1 para un índice o montón sin particiones.partition_number is int, and can be one of the following values: the partition number of an index or heap, NULL or 1 for a nonpartitioned index or heap.

Para especificar la partición, también puede especificar la función $Partition .To specify the partition, you can also specify the $partition function. Para obtener información sobre todas las particiones del objeto propietario, especifique NULL.To return information for all partitions of the owning object, specify NULL.

[ @data_compression=] 'data_compression'[ @data_compression= ] 'data_compression'
Es el tipo de compresión que se va a evaluar.Is the type of compression to be evaluated. data_compression puede ser uno de los siguientes valores: NINGUNO, fila, página, almacén de columnas o COLUMNSTORE_ARCHIVE.data_compression can be one of the following values: NONE, ROW, PAGE, COLUMNSTORE, or COLUMNSTORE_ARCHIVE.

Valores de código de retornoReturn Code Values

0 (correcto) o 1 (error)0 (success) or 1 (failure)

Conjuntos de resultadosResult Sets

El siguiente conjunto de resultados se devuelve para proporcionar el tamaño actual y estimado de la tabla, índice o partición.The following result set is returned to provide current and estimated size for the table, index, or partition.

Nombre de columnaColumn name Tipo de datosData type DescripciónDescription
object_nameobject_name sysnamesysname Nombre de la tabla o vista indizada.Name of the table or the indexed view.
schema_nameschema_name sysnamesysname Esquema de la tabla o vista indizada.Schema of the table or indexed view.
index_idindex_id intint Identificador de índice de un índice:Index ID of an index:

0 = Montón0 = Heap

1 = Índice clúster1 = Clustered index

> 1 = índice no clúster> 1 = Nonclustered index
partition_numberpartition_number intint Número de partición.Partition number. Devuelve 1 para una tabla o índice sin particiones.Returns 1 for a nonpartitioned table or index.
size_with_current_compression_setting (KB)size_with_current_compression_setting (KB) bigintbigint Tamaño actual de la tabla, índice o partición solicitados.Size of the requested table, index, or partition as it currently exists.
size_with_requested_compression_setting (KB)size_with_requested_compression_setting (KB) bigintbigint 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.Estimated size of the table, index, or partition that uses the requested compression setting; and, if applicable, the existing fill factor, and assuming there is no fragmentation.
sample_size_with_current_compression_setting (KB)sample_size_with_current_compression_setting (KB) bigintbigint Tamaño del ejemplo con la opción de compresión actual.Size of the sample with the current compression setting. Esto incluye cualquier fragmentación.This includes any fragmentation.
sample_size_with_requested_compression_setting (KB)sample_size_with_requested_compression_setting (KB) bigintbigint 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.Size of the sample that is created by using the requested compression setting; and, if applicable, the existing fill factor and no fragmentation.

ComentariosRemarks

Use sp_estimate_data_compression_savings para calcular el ahorro que se puede producir al habilitar una tabla o partición para la compresión de archivo de fila, página, almacén de columnas o almacén de columnas.Use sp_estimate_data_compression_savings to estimate the savings that can occur when you enable a table or partition for row, page, columnstore or columnstore archive compression. 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.For instance if the average size of the row can be reduced by 40 percent, you can potentially reduce the size of the object by 40 percent. Es posible que no consiga ahorrar espacio, ya que depende del factor de relleno y del tamaño de la fila.You might not receive a space savings because this depends on the fill factor and the size of the row. Por ejemplo, si tiene una fila de 8.000 bytes de longitud y reduce su tamaño en un 40 por ciento, puede ajustar solo una fila en una página de datos.For example, if you have a row that is 8,000 bytes long and you reduce its size by 40 percent, you can still fit only one row on a data page. No se obtiene ningún ahorro.There is no savings.

Si los resultados de la sp_estimate_data_compression_savings ejecución indican que la tabla va a crecer, esto significa que muchas filas de la tabla usan casi toda la precisión de los tipos de datos, y la adición de la pequeña sobrecarga necesaria para el formato comprimido es mayor que el ahorro de presi.If the results of running sp_estimate_data_compression_savings indicate that the table will grow, this means that many rows in the table use almost the whole precision of the data types, and the addition of the small overhead needed for the compressed format is more than the savings from compression. En este caso excepcional, no habilite la compresión.In this rare case, do not enable compression.

Si una tabla está habilitada para la compresión sp_estimate_data_compression_savings , use para calcular el tamaño medio de la fila si se descomprime la tabla.If a table is enabled for compression, use sp_estimate_data_compression_savings to estimate the average size of the row if the table is uncompressed.

Durante esta operación, se adquiere un bloqueo con intención compartida (IS) en la tabla.An (IS) lock is acquired on the table during this operation. Si no se puede obtener un bloqueo (IS), se bloqueará el procedimiento.If an (IS) lock cannot be obtained, the procedure will be blocked. La tabla se examina bajo el nivel de aislamiento READ COMMITTED.The table is scanned under the read committed isolation level.

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.If the requested compression setting is same as the current compression setting, the stored procedure will return the estimated size with no data fragmentation and using the existing fill factor.

Si no existe el identificador de índice o la partición, no se devolverá ningún resultado.If the index or partition ID does not exist, no results are returned.

PermisosPermissions

Requiere SELECT el permiso en la tabla.Requires SELECT permission on the table.

Limitaciones y restriccionesLimitations and Restrictions

Antes de SQL Server 2019, este procedimiento no se aplicaba a los índices de almacén de columnas y, por lo tanto, no aceptó los parámetros de compresión de datos de almacén de columnas y COLUMNSTORE_ARCHIVE.Prior to SQL Server 2019, this procedure did not apply to columnstore indexes, and therefore did not accept the data compression parameters COLUMNSTORE and COLUMNSTORE_ARCHIVE. A partir de SQL Server 2019, los índices de almacén de columnas se pueden usar como un objeto de origen para la estimación y como un tipo de compresión solicitado.Starting with SQL Server 2019, columnstore indexes can be used both as a source object for estimation, and as a requested compression type.

Consideraciones sobre los índices de almacén de columnasConsiderations for Columnstore Indexes

A partir SQL Server 2019SQL Server 2019de sp_estimate_compression_savings , admite la estimación de la compresión de archivo de almacén de columnas y de almacén de columnas.Starting with SQL Server 2019SQL Server 2019, sp_estimate_compression_savings supports estimating both columnstore and columnstore archive compression. A diferencia de la compresión de página y fila, la aplicación de la compresión de almacén de columnas a un objeto requiere la creación de un nuevo índice de almacén de columnas.Unlike page and row compression, applying columnstore compression to an object requires creating a new columnstore index. Por esta razón, al usar las opciones de almacén de columnas y COLUMNSTORE_ARCHIVE de este procedimiento, el tipo del objeto de origen proporcionado al procedimiento determina el tipo de índice de almacén de columnas usado para la estimación del tamaño comprimido.For this reason, when using the COLUMNSTORE and COLUMNSTORE_ARCHIVE options of this procedure, the type of the source object provided to the procedure determines the type of columnstore index used for the compressed size estimate. En la tabla siguiente se muestran los objetos de referencia que se usan para calcular el ahorro de compresión para @data_compression cada tipo de objeto de origen cuando el parámetro se establece en el almacén de columnas o en COLUMNSTORE_ARCHIVE.The following table illustrates the reference objects used to estimate compression savings for each source object type when the @data_compression parameter is set to either COLUMNSTORE or COLUMNSTORE_ARCHIVE.

Objeto de origenSource Object Objeto de referenciaReference Object
MontónHeap Índice de almacén de columnas agrupadoClustered columnstore index
Índice clústerClustered index Índice de almacén de columnas agrupadoClustered columnstore index
Índice no clústerNonclustered index Índice de almacén de columnas no agrupado (incluidas las columnas de clave y todas las columnas incluidas del índice no clúster proporcionado, así como la columna de partición de la tabla, si existe)Nonclustered columnstore index (including the key columns and any included columns of the provided nonclustered index, as well as the partition column of the table, if any)
índice no clúster de almacén de columnasNonclustered columnstore index Índice de almacén de columnas no agrupado (incluidas las mismas columnas que el índice de almacén de columnas no agrupado proporcionado)Nonclustered columnstore index (including the same columns as the provided nonclustered columnstore index)
Índice de almacén de columnas agrupadoClustered columnstore index Índice de almacén de columnas agrupadoClustered columnstore index

Nota

Al estimar la compresión de almacén de columnas de un objeto de origen de almacén (índice clúster, índice no clúster o montón), si hay alguna columna en el objeto de origen que tenga un tipo de datos no admitido en un índice de almacén de columnas, sp_estimate_compression_savings producirá un error.When estimating columnstore compression from a rowstore source object (clustered index, nonclustered index or heap), if there are any columns in the source object that have a data type that is not supported in a columnstore index, sp_estimate_compression_savings will fail with an error.

Del mismo modo, @data_compression cuando el parámetro se NONEestablece ROWen, PAGE o y el objeto de origen es un índice de almacén de columnas, en la tabla siguiente se describen los objetos de referencia usados.Similarly, when the @data_compression parameter is set to NONE, ROW, or PAGE and the source object is a columnstore index, the following table outlines the reference objects used.

Objeto de origenSource Object Objeto de referenciaReference Object
Índice de almacén de columnas agrupadoClustered columnstore index MontónHeap
índice no clúster de almacén de columnasNonclustered columnstore index Índice no clúster (incluidas las columnas contenidas en el índice no clúster de almacén de columnas como columnas de clave y la columna de partición de la tabla, si existe, como una columna incluida)Nonclustered index (including the columns contained in the nonclustered columnstore index as key columns, and the partition column of the table, if any, as an included column)

Nota

Al estimar la compresión almacén (NONE, ROW o PAGE) de un objeto de origen de almacén de columnas, asegúrese de que el índice de origen no contenga más de 32 columnas, ya que este es el límite admitido en un índice almacén (Nonclustered).When estimating rowstore compression (NONE, ROW or PAGE) from a columnstore source object, be sure that the source index does not contain more than 32 columns as this is the limit supported in a rowstore (nonclustered) index.

EjemplosExamples

En el ejemplo siguiente se calcula el tamaño de la tabla Production.WorkOrderRouting si se comprime mediante la compresión ROW.The following example estimates the size of the Production.WorkOrderRouting table if it is compressed by using ROW compression.

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

Vea tambiénSee Also

CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
sys.partitions (Transact-SQL) sys.partitions (Transact-SQL)
Procedimientos (almacenados de motor de base de datos TRANSACT-SQL) Database Engine Stored Procedures (Transact-SQL)
Implementación de la compresión UnicodeUnicode Compression Implementation