Поделиться через


sp_estimate_data_compression_savings (Transact-SQL)

Возвращает текущий размер запрошенного объекта и оценивает размер объекта для запрошенного состояния сжатия. Сжатие можно оценить для всех таблиц или только для части. Это же касается куч, кластеризованных и некластеризованных индексов, индексированных представлений, табличных и индексных секций. Объекты могут быть сжаты с помощью сжатия строк или сжатия страниц. Если таблица, индекс или секция уже сжаты, использование этой процедуры позволяет определить размер таблицы, индекса или секции в распакованном виде.

ПримечаниеПримечание

Сжатие и процедура sp_estimate_data_compression_savings доступны не во всех выпусках Microsoft SQL Server. Список функций, поддерживаемых в разных выпусках SQL Server, см. в разделе Возможности, поддерживаемые различными выпусками SQL Server 2012.

Чтобы оценить размер объекта после сжатия с запрошенными параметрами, эта хранимая процедура создает образец исходного объекта и загружает эти данные в эквивалентную таблицу и индекс, созданные в базе данных tempdb. Созданная в базе данных tempdb таблица или индекс затем сжимается до необходимых настроек, и вычисляется оценка экономии от сжатия.

Чтобы изменить состояние сжатия таблицы, индекса или секции, используются инструкции ALTER TABLE или ALTER INDEX. Общие сведения о сжатии см. в разделе Сжатие данных.

ПримечаниеПримечание

Если существующие данные фрагментированы, можно уменьшить их размер без использования сжатия, перестроив индекс. Для индексов коэффициент заполнения будет применен во время перестроения индекса. Это может увеличить размер индекса.

Значок ссылки на раздел Синтаксические обозначения Transact-SQL

Синтаксис

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

Аргументы

  • [ @schema\_name= ] 'schema_name'
    Имя схемы базы данных, содержащей таблицу или индексированное представление. Аргумент schema_name имеет тип sysname. Если аргумент schema_name имеет значение NULL, используется схема по умолчанию текущего пользователя.

  • [ @object\_name= ] 'object_name'
    Имя таблицы или индексированного представления, к которым относится индекс. Аргумент object_name имеет тип sysname.

  • [ @index\_id= ] 'index_id'
    Идентификатор индекса. Аргумент index_id имеет тип int и может принимать одно из следующих значений: идентификатор индекса, NULL или 0, если объект object_id — куча. Чтобы вернуть данные для всех индексов базовой таблицы или представления, укажите значение NULL. Если будет указано значение NULL, также необходимо будет указать значение NULL для аргумента partition_number.

  • [ @partition\_number= ] 'partition_number'
    Номер секции в объекте. Аргумент partition_number имеет тип int и может принимать одно из следующих значений: номер секции индекса или кучи, NULL или 1 для несекционированного индекса или кучи.

    Чтобы указать секцию, можно также указать функцию $partition. Чтобы получить сведения обо всех секциях объекта, укажите значение NULL.

  • [ @data\_compression= ] 'data_compression'
    Тип сжатия для оценки. Аргумент data_compression может иметь одно из следующих значений. NONE, ROW или PAGE.

Значения кодов возврата

0 (успешное завершение) или 1 (неуспешное завершение).

Результирующие наборы

Приведенный ниже результирующий набор содержит сведения о текущем и предполагаемом размере таблицы, индекса или секции.

Имя столбца

Тип данных

Описание

object_name

sysname

Имя таблицы или индексированного представления.

schema_name

sysname

Схема таблицы или индексированного представления.

index_id

int

Идентификатор индекса:

0 = куча

1 = кластеризованный индекс

> 1 = некластеризованный индекс

partition_number

int

Номер секции. Возвращает 1 для несекционированной таблицы или индекса.

size_with_current_compression_setting (KB)

bigint

Размер запрошенной таблицы, индекса или секции в текущем состоянии.

size_with_requested_compression_setting (KB)

bigint

Предполагаемый размер таблицы, индекса или секции при использовании запрошенных настроек сжатия, и, если применимо, существующего коэффициента заполнения при отсутствии фрагментации.

sample_size_with_current_compression_setting (KB)

bigint

Размер образца с текущими настройками сжатия. К этим настройкам относится любая фрагментация.

sample_size_with_requested_compression_setting (KB)

bigint

Размер образца, созданного с использованием запрошенных настроек сжатия, и, если применимо, существующего коэффициента заполнения при отсутствии фрагментации.

Замечания

Чтобы оценить экономию от сжатия таблицы или секции на уровне строк или страниц, используется процедура sp_estimate_data_compression_savings. Например, если средний размер строки можно уменьшить на 40%, то размер самого объекта также можно потенциально уменьшить на 40%. Но выигрыша можно не получить, поскольку экономия места зависит от коэффициента заполнения и размера строки. Например, если длина строки, составляющая 8 000 байт, уменьшается на 40%, то на странице данных все равно помещается только одна строка. При этом экономия отсутствует.

Если результаты выполнения хранимой процедуры sp_estimate_data_compression_savings показывают, что размер таблицы будет увеличиваться, это означает, что в таблице используется почти полная точность типов данных, а небольшой объем затрат, необходимый для использования сжатого формата, превышает экономию места от самого сжатия. В этом редком случае сжатие включать не следует.

Если для таблицы разрешено сжатие, использование процедуры sp_estimate_data_compression_savings позволяет оценить средний размер строки распакованной таблицы.

Во время этой операции для таблицы необходима блокировка (IS). Если блокировку (IS) получить невозможно, процедура блокируется. Таблица просматривается с уровнем изоляции read committed.

Если запрошенные настройки сжатия совпадают с текущими, хранимая процедура возвращает ожидаемый размер без фрагментации данных с текущим коэффициентом заполнения.

Если индекс или идентификатор секции не существует, результат не возвращается.

Разрешения

Необходимо разрешение SELECT на таблицу.

Примеры

В следующем примере оценивается размер таблицы Production.WorkOrderRouting в случае сжатия ROW.

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

См. также

Справочник

Инструкция CREATE TABLE (Transact-SQL)

CREATE INDEX (Transact-SQL)

sys.partitions (Transact-SQL)

Хранимые процедуры ядра СУБД (Transact-SQL)

Основные понятия

Реализация сжатия Юникода