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. Общие сведения о сжатии см. в разделе Создание сжатых таблиц и индексов.
Примечание |
---|
Если существующие данные фрагментированы, можно уменьшить их размер без использования сжатия, перестроив индекс. Для индексов коэффициент заполнения будет применен во время перестроения индекса. Это может увеличить размер индекса. |
Синтаксис
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