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


sp_estimate_data_compression_savings (Transact-SQL)

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

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

Сжатие и процедура sp_estimate_data_compression_savings доступны только в выпусках SQL Server 2008 Enterprise Edition и Developer Edition.

Чтобы оценить размер объекта после сжатия с запрошенными параметрами, эта хранимая процедура создает образец исходного объекта и загружает эти данные в эквивалентную таблицу и индекс, созданные в базе данных 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 (КБ)

bigint

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

size_with_requested_compression_setting (КБ)

bigint

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

sample_size_with_current_compression_setting (КБ)

bigint

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

sample_size_with_requested_compression_setting (КБ)

bigint

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

Замечания

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

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

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

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

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

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

Разрешения

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

Пример

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

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