sp_estimate_data_compression_savings (Transact-SQL)
Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает текущий размер запрошенного объекта и оценивает размер объекта для запрошенного состояния сжатия. Сжатие можно оценить для всех таблиц или только для части. К ним относятся кучи, кластеризованные индексы, некластеризованные индексы, индексы columnstore, индексированные представления и секции таблиц и индексов. Объекты можно сжимать с помощью сжатия строк, страниц, columnstore или columnstore. Если таблица, индекс или секция уже сжимаются, можно использовать эту процедуру для оценки размера таблицы, индекса или секции, если она повторно сжимается или хранится без сжатия.
Начиная с SQL Server 2022 (16.x), вы можете сжимать данные XML вне строки в столбцах с помощью xml
типа данных, уменьшая требования к хранилищу и памяти. Дополнительные сведения см. в разделах CREATE TABLE (Transact-SQL) и CREATE INDEX (Transact-SQL). sp_estimate_data_compression_savings
поддерживает оценки сжатия XML.
Примечание.
Сжатие и sp_estimate_data_compression_savings
недоступно в каждом выпуске SQL Server. Список функций, поддерживаемых выпусками SQL Server, см. в выпусках и поддерживаемых функциях SQL Server 2022.
Хранимая sys.sp_estimate_data_compression_savings
процедура системы доступна в База данных SQL Azure и Управляемый экземпляр SQL Azure.
Чтобы оценить размер объекта, если бы он использовал запрошенный параметр сжатия, эта хранимая процедура примеры исходного объекта и загружает эти данные в эквивалентную таблицу и индекс, созданный в 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'
, [ @xml_compression = ] xml_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, COLUMNSTORE или COLUMNSTORE_ARCHIVE.
Для SQL Server 2022 (16.x) и более поздних версий значение NULL также является возможным. data_compression не может иметь значение NULL, если xml_compression имеет значение NULL.
[ @xml_compression = ] xml_compression
Область применения: SQL Server 2022 (16.x) и более поздних версий, База данных SQL Azure и Управляемый экземпляр SQL Azure.
Указывает, следует ли вычислять экономию для сжатия XML. xml_compression бит и может иметь значение NULL, 0 или 1. По умолчанию имеет значение NULL.
xml_compression не может иметь значение NULL, если data_compression имеет значение NULL.
Значения кода возврата
0
(успешно) или 1
(сбой).
Результирующий набор
Приведенный ниже результирующий набор содержит сведения о текущем и предполагаемом размере таблицы, индекса или секции.
Имя столбца | Тип данных | Description |
---|---|---|
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
для оценки экономии, которая может возникать при включении таблицы или секции для строки, страницы, columnstore, архива columnstore или сжатия XML. Например, если средний размер строки может быть уменьшен на 40 процентов, можно уменьшить размер объекта на 40 процентов. Но выигрыша можно не получить, поскольку экономия места зависит от коэффициента заполнения и размера строки. Например, если у вас есть строка размером 8 000 байтов, а размер ее уменьшается на 40 процентов, вы по-прежнему можете поместить только одну строку на страницу данных. Нет экономии.
Если результаты выполнения sp_estimate_data_compression_savings
в несжатой таблице или индексе указывают на увеличение размера, это означает, что многие строки используют почти всю точность типов данных, а добавление небольших затрат, необходимых для сжатого формата, превышает экономию от сжатия. В этом редких случаях не включите сжатие.
Если таблица уже включена для сжатия, можно оценить sp_estimate_data_compression_savings
средний размер строки, если таблица распаковано.
Блокировка общего намерения (IS) приобретается в таблице во время этой операции. Если блокировка IS не может быть получена, процедура будет заблокирована. Таблица сканируется на уровне изоляции, зафиксированной по умолчанию.
Если запрошенный параметр сжатия совпадает с текущим параметром сжатия, хранимая процедура возвращает предполагаемый размер без фрагментации данных и использует существующий коэффициент заполнения для индексов исходного объекта.
Если индекс или идентификатор секции не существует, результаты не возвращаются.
Разрешения
Требуется SELECT
разрешение на таблицу и VIEW DEFINITION
базу данных, VIEW DATABASE STATE
содержащую таблицу и в tempdb
ней.
Ограничения
До SQL Server 2019 (15.x) эта процедура не применяется к индексам columnstore и поэтому не принимает параметры сжатия данных COLUMNSTORE и COLUMNSTORE_ARCHIVE. Начиная с SQL Server 2019 (15.x), а в База данных SQL Azure и Управляемый экземпляр SQL Azure индексы columnstore можно использовать как в качестве исходного объекта для оценки, так и в качестве запрошенного типа сжатия.
Если метаданные TempDB оптимизированы для памяти, создание индексов columnstore во временных таблицах не поддерживается. Из-за этого ограничения sp_estimate_data_compression_savings
не поддерживается с параметрами сжатия данных COLUMNSTORE и COLUMNSTORE_ARCHIVE при включении метаданных TempDB, оптимизированных для памяти.
Кандидат выпуска SQL Server 2022 (16.x) (RC) 0 не оценивает экономию для XML-индексов.
Рекомендации по индексам columnstore
Начиная с SQL Server 2019 (15.x), а в База данных SQL Azure и Управляемый экземпляр SQL Azure sp_estimate_compression_savings
поддерживается оценка сжатия архива columnstore и columnstore. В отличие от сжатия страниц и строк, применение сжатия columnstore к объекту требует создания нового индекса columnstore. По этой причине при использовании columnSTORE и COLUMNSTORE_ARCHIVE параметров этой процедуры тип исходного объекта, предоставленного процедуре, определяет тип индекса columnstore, используемого для оценки сжатого размера. В следующей таблице показаны эталонные объекты, используемые для оценки экономии сжатия для каждого типа исходного объекта, если @data_compression
параметр имеет значение COLUMNSTORE или COLUMNSTORE_ARCHIVE.
Исходный объект | Ссылочный объект |
---|---|
Куча | Кластеризованный индекс columnstore |
Кластеризованный индекс | Кластеризованный индекс columnstore |
Некластеризованный индекс | Некластеризованный индекс columnstore (включая ключевые столбцы и все включенные столбцы предоставленного некластеризованного индекса, а также столбец секционирования таблицы, если таковой есть) |
некластеризованный индекс columnstore | Некластеризованный индекс columnstore (включая те же столбцы, что и предоставленный некластеризованный индекс columnstore) |
Кластеризованный индекс columnstore | Кластеризованный индекс columnstore |
Примечание.
При оценке сжатия columnstore из исходного объекта rowstore (кластеризованный индекс, некластеризованный индекс или куча), если в исходном объекте есть столбцы, имеющие тип данных, который не поддерживается в индексе columnstore, sp_estimate_compression_savings
завершится ошибкой.
Аналогичным образом, если @data_compression
параметр имеет значение NONE
, ROW
или PAGE
исходный объект является индексом columnstore, в следующей таблице описаны используемые эталонные объекты.
Исходный объект | Ссылочный объект |
---|---|
Кластеризованный индекс columnstore | Куча |
некластеризованный индекс columnstore | Некластеризованный индекс (включая столбцы, содержащиеся в некластеризованном индексе columnstore в качестве ключевых столбцов, и столбец секционирования таблицы, если таковой включен) |
Примечание.
При оценке сжатия rowstore (NONE, ROW или PAGE) из исходного объекта columnstore убедитесь, что исходный индекс не содержит более 32 ключевых столбцов, так как это ограничение, поддерживаемое в индексе rowstore (некластеризованный).
Примеры
А. Оценка экономии с помощью сжатия ROW
В следующем примере оценивается размер Production.WorkOrderRouting
таблицы, если она сжимается с помощью ROW
сжатия.
USE AdventureWorks2022;
GO
EXEC sys.sp_estimate_data_compression_savings
'Production', 'WorkOrderRouting', NULL, NULL, 'ROW';
GO
B. Оценка экономии с помощью сжатия PAGE и XML
Область применения: SQL Server 2022 (16.x)
В следующем примере оценивается размер Production.ProductModel
таблицы, если она сжимается с помощью PAGE
сжатия, а значение xml_compression включено.
USE AdventureWorks2022;
GO
EXEC sys.sp_estimate_data_compression_savings
'Production', 'ProductModel', NULL, NULL, 'PAGE', 1;
GO
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по