Включение сжатия таблицы или индекса
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)
В этой статье описано, как включить сжатие данных для существующей таблицы или индекса в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Сведения о включении сжатия данных при создании таблицы или индекса см. в разделах Создание сжатого индекса и Создание таблицы, использующей сжатие строк.
Ограничения
В системных таблицах не может быть включено сжатие.
Если таблица является кучей, операция перестроения для
ONLINE
режима является одним потоком. ИспользуйтеOFFLINE
режим для операции перестроения куч с несколькими потоками. Операции перестроения не указаныOFFLINE
, если этот параметр не указанONLINE
. Полные сведения о выполнении перестроения см. в разделе "Выполнение операцийONLINE
с индексами в Сети".Если в таблице есть невыровненные индексы, настройку сжатия для отдельной секции изменить нельзя.
Несколько типов данных не влияют на сжатие данных. Дополнительные сведения см. в статье Влияние сжатия строк на хранение.
Разрешения
Необходимо разрешение ALTER
для таблицы или индекса.
Использование SQL Server Management Studio
В обозревателе объектов разверните базу данных, в которой содержится таблица, подлежащая сжатию, а затем разверните папку Таблицы .
Чтобы сжать индекс, разверните таблицу, содержащую нужный индекс, затем разверните папку Индексы .
Щелкните правой кнопкой мыши таблицу или индекс для сжатия, выберите хранение, а затем Управление сжатием...
В мастере сжатия данных на странице Добро пожаловать в мастер сжатия данных нажмите кнопку Далее.
На странице Выбор типа сжатия выберите тип сжатия, который будет применен к каждой выбранной секции таблицы или индекса. По завершении выберите Далее.
Следующие параметры доступны на странице Выбор типа сжатия :
флажокИспользовать один тип сжатия для всех секций
Выберите этот вариант, чтобы задать одинаковые параметры для всех секций. Он включает флажок выбора и делает недоступным столбец Тип сжатия в сетке. При его выборе в списке рядом появляются параметры: Нет, Строкаи Страница.
Номер секции
Перечисляет каждую секцию в таблице или индексе. Этот столбец доступен только для чтения.
Тип сжатия
Выберите параметры сжатия для каждой секции. Недоступно, если выбран один и тот же тип сжатия для всех секций . Список параметров: Нет, Строкаи Страница.
Граница
Отображает границу секции. Этот столбец доступен только для чтения.
Количество строк
Количество строк в данной секции. Этот столбец доступен только для чтения.
Текущий размер
Текущий размер, занимаемый секцией в мегабайтах (МБ). Этот столбец доступен только для чтения.
Запрошенное сжатое пространство
После нажатия кнопки Вычислитьв этом столбце будет показан приблизительный размер каждой секции после сжатия на основе значения в столбце Тип сжатия. Этот столбец доступен только для чтения.
Вычислить
Нажмите эту кнопку, чтобы получить размер каждой секции после сжатия на основе значения в столбце Тип сжатия.
На странице Выбор выходного параметра укажите способ завершения сжатия. Выберите Создать скрипт для создания скрипта SQL на основе данных на предыдущих страницах мастера. Выберите Запустить немедленно , чтобы создать новую секционированную таблицу после завершения работ со всеми оставшимися страницами мастера. Выберите Расписание , чтобы создать новую секционированную таблицу в заранее заданное время в будущем.
При выборе Создать скриптв Параметры скриптабудут доступны следующие параметры:
Вывести скрипт в файл
Создает скрипт в виде
.sql
файла. Введите имя и местоположение файла в поле Имя файла или нажмите кнопку Обзор, чтобы открыть диалоговое окно Расположение файла скрипта. В разделе Сохранить каквыберите Текст в Юникоде или Текст ANSI.Вывести скрипт в буфер обмена
Сохранение скрипта в буфере обмена.
Вывести скрипт в новое окно запроса
Скрипт создается в новом окне редактора запросов. Это параметр выбирается по умолчанию.
При выборе Расписание щелкните Изменить расписание.
В диалоговом окне Создание расписания задания в поле Имя введите имя расписания задания.
В списке Тип расписания выберите тип расписания:
Запускать автоматически при запуске агента SQL Server
Запускать при бездействии процессоров
Повторяющееся. Выберите этот параметр, если новая секционированная таблица регулярно обновляется с учетом новых данных.
Однократно. Этот параметр выбран по умолчанию.
Установите или снимите флажок Включен , чтобы включить или отключить расписание.
При выборе Повторяющееся:
В разделе Частотав списке Выполняется укажите частоту выполнения:
При выборе Ежедневнов поле Выполняется каждые укажите частоту повторного выполнения расписания задания в днях.
При выборе Еженедельнов поле Выполняется каждые укажите частоту повторного выполнения расписания задания в неделях. Выберите день или дни недели, в которые выполняется расписание задания.
При выборе Ежемесячнощелкните День или Определенный.
При выборе Деньвведите дату месяца, в которую должно выполняться расписание задания, и укажите частоту повторного выполнения расписания задания в месяцах. Например, если требуется, чтобы расписание задания выполнялось 15 числа каждого второго месяца, выберите День и введите в первом поле 15 и 2 — во втором поле. Наибольшее число, допустимое во втором поле, — "99".
При выборе Определенныйвыберите определенный день недели в месяце, в котором должно выполняться расписание задания, и укажите частоту повторного выполнения расписания задания в месяцах. Например, если требуется, чтобы расписание задания выполнялось в последний день недели каждого второго месяца, выберите День, затем последний в первом списке и рабочий день во втором списке, а потом введите "2" во втором поле. Еще можно выбрать первый, второй, третийили четвертый, а также конкретные дни недели (например, воскресенье или среду) в первых двух списках. Наибольшее число, допустимое в последнем поле, — "99".
В поле Сколько раз в деньукажите частоту повторного выполнения расписания задания в день запуска расписания задания:
При выборе Выполнять раз вукажите определенное время дня для запуска расписания задания в поле Выполнять раз в . Укажите время дня: час, минуту и секунду.
При выборе Выполняется каждыеукажите частоту выполнения задания в выбранный день в поле Частота. Например, если требуется, чтобы расписание задания выполнялось каждые 2 часа в день запуска расписания задания, выберите Выполняется кажд., введите "2" в первом поле, а затем выберите в списке часы. В этом списке также можно выбрать минуты и секунды. Наибольшее число, допустимое в первом поле, — "100".
В поле Начинать в введите время для начала запуска расписания задания. В поле Заканчивать в введите время для завершения повторного выполнения расписания задания. Укажите время дня: час, минуту и секунду.
В разделе Длительность, в области Дата началавведите дату начала запуска расписания задания. Выберите Дата окончания или Без даты окончания , чтобы указать дату завершения выполнения расписания задания. При выборе Дата окончаниявведите дату завершения запуска расписания задания.
При выборе значения Однократнов Однократное выполнениев поле Дата введите дату запуска расписания задания. В поле Время введите время запуска расписания задания. Укажите время дня: час, минуту и секунду.
В разделе Сводкав Описаниепроверьте правильность всех параметров расписания задания.
Нажмите ОК.
После завершения работы с этой страницей нажмите кнопку Далее.
На странице Просмотр сводки в разделе Просмотр выбранных параметровразверните все доступные параметры, чтобы проверить правильность всех настроек сжатия. Если все настройки правильные, нажмите кнопку Готово.
Страница Выполнение мастера сжатия используется для мониторинга сведений о состоянии действий мастера создания секций. В зависимости от действий, выбранных в мастере, страница выполнения может содержать одно или несколько действий. В верхнем поле показано общее состояние мастера и число полученных им сообщений о состоянии, предупреждений и сообщений об ошибках.
На странице Выполнение мастера сжатия доступны следующие параметры.
Сведения
Сведения о событии, состоянии и любых сообщениях, которые возвращены в результате действий мастера.
Действие
Задает тип и имя каждого действия.
Состояние
Указывает, вернуло ли действие мастера в целом значение Успешно или Ошибка.
Сообщение
Любые сообщения об ошибках или предупреждения от процесса.
Отчет
Создание отчета, содержащего результаты мастера создания секций. Доступные параметры: Просмотреть отчет, Сохранить отчет в файл, Копировать отчет в буфер обменаи Отправить отчет по электронной почте.
Просмотреть отчет
Открытие диалогового окна Просмотр отчета , которое содержит текстовый отчет о работе мастера создания секций.
Сохранить отчет в файл
Открытие диалогового окна Сохранить отчет как .
Копировать отчет в буфер обмена
Копирование результатов отчета о работе мастера в буфер обмена.
Отправить отчет по электронной почте
Копирование результатов отчета о состоянии мастера в сообщение электронной почты.
По завершении нажмите кнопку Закрыть.
Использование Transact-SQL
В выбранной базе данных запустите sp_estimate_data_compression_savings (Transact-SQL) и включите сжатие таблицы или индекса. См. следующие разделы.
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
Включение сжатия таблицы
В обозревателе объектов подключитесь к экземпляру ядра СУБД.
На стандартной панели выберите пункт Создать запрос.
Убедитесь, что вы находитесь в контексте базы данных.
Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В примере сначала выполняется хранимая процедура
sp_estimate_data_compression_savings
, чтобы вернуть предполагаемый размер объекта, если он использовалROW
параметр сжатия. Затем этот пример включаетROW
сжатие для всех секций в указанной таблице.EXEC sp_estimate_data_compression_savings 'Production', 'TransactionHistory', NULL, NULL, 'ROW'; ALTER TABLE Production.TransactionHistory REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = ROW); GO
Включение сжатия индекса
В обозревателе объектов подключитесь к экземпляру ядра СУБД.
На стандартной панели выберите пункт Создать запрос.
Убедитесь, что вы находитесь в контексте базы данных.
Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В примере сначала формируется запрос к представлению каталога
sys.indexes
для получения имени иindex_id
для каждого индекса таблицыProduction.TransactionHistory
. Затем он выполняет хранимую процедуруsp_estimate_data_compression_savings
, чтобы вернуть предполагаемый размер указанного идентификатора индекса, если бы он использовалPAGE
параметр сжатия. Наконец, в примере выполняется перестроение индекса 2 (IX_TransactionHistory_ProductID
), указывающееPAGE
сжатие.SELECT name, index_id FROM sys.indexes WHERE OBJECT_NAME (object_id) = N'TransactionHistory'; EXEC sp_estimate_data_compression_savings @schema_name = 'Production', @object_name = 'TransactionHistory', @index_id = 2, @partition_number = NULL, @data_compression = 'PAGE'; ALTER INDEX IX_TransactionHistory_ProductID ON Production.TransactionHistory REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE); GO
Дополнительные сведения см. в разделе ALTER TABLE и ALTER INDEX.