Включение сжатия таблицы или индекса

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

В этой статье описано, как включить сжатие данных для существующей таблицы или индекса в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Сведения о включении сжатия данных при создании таблицы или индекса см. в разделах Создание сжатого индекса и Создание таблицы, использующей сжатие строк.

ограничения

  • В системных таблицах не может быть включено сжатие.

  • Если таблица является кучей, операция перестроения для ONLINE режима является одним потоком. Используйте OFFLINE режим для операции перестроения куч с несколькими потоками. Операции перестроения не указаны OFFLINE , если этот параметр не указан ONLINE . Полные сведения о выполнении перестроения см. в разделе "Выполнение операций ONLINE с индексами в Сети".

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

  • Несколько типов данных не влияют на сжатие данных. Дополнительные сведения см. в статье Влияние сжатия строк на хранение.

Разрешения

Необходимо разрешение ALTER для таблицы или индекса.

Использование среды SQL Server Management Studio

  1. В обозревателе объектов разверните базу данных, в которой содержится таблица, подлежащая сжатию, а затем разверните папку Таблицы .

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

  3. Щелкните правой кнопкой мыши таблицу или индекс для сжатия, выберите хранение, а затем Управление сжатием...

  4. В мастере сжатия данных на странице Добро пожаловать в мастер сжатия данных нажмите кнопку Далее.

  5. На странице Выбор типа сжатия выберите тип сжатия, который будет применен к каждой выбранной секции таблицы или индекса. По завершении выберите Далее.

    Следующие параметры доступны на странице Выбор типа сжатия :

    • флажокИспользовать один тип сжатия для всех секций

      Выберите этот вариант, чтобы задать одинаковые параметры для всех секций. Он включает флажок выбора и делает недоступным столбец Тип сжатия в сетке. При его выборе в списке рядом появляются параметры: Нет, Строкаи Страница.

    • Номер секции

      Перечисляет каждую секцию в таблице или индексе. Этот столбец доступен только для чтения.

    • Тип сжатия

      Выберите параметры сжатия для каждой секции. Недоступно, если выбран один и тот же тип сжатия для всех секций . Список параметров: Нет, Строкаи Страница.

    • Граница

      Отображает границу секции. Этот столбец доступен только для чтения.

    • Количество строк

      Количество строк в данной секции. Этот столбец доступен только для чтения.

    • Текущий размер

      Текущий размер, занимаемый секцией в мегабайтах (МБ). Этот столбец доступен только для чтения.

    • Запрошенное сжатое пространство

      После нажатия кнопки Вычислитьв этом столбце будет показан приблизительный размер каждой секции после сжатия на основе значения в столбце Тип сжатия. Этот столбец доступен только для чтения.

    • Вычислить

      Нажмите эту кнопку, чтобы получить размер каждой секции после сжатия на основе значения в столбце Тип сжатия.

  6. На странице Выбор выходного параметра укажите способ завершения сжатия. Выберите Создать скрипт для создания скрипта SQL на основе данных на предыдущих страницах мастера. Выберите Запустить немедленно , чтобы создать новую секционированную таблицу после завершения работ со всеми оставшимися страницами мастера. Выберите Расписание , чтобы создать новую секционированную таблицу в заранее заданное время в будущем.

    При выборе Создать скриптв Параметры скриптабудут доступны следующие параметры:

    • Вывести скрипт в файл
      Создает скрипт в виде .sql файла. Введите имя и местоположение файла в поле Имя файла или нажмите кнопку Обзор, чтобы открыть диалоговое окно Расположение файла скрипта. В разделе Сохранить каквыберите Текст в Юникоде или Текст ANSI.

    • Вывести скрипт в буфер обмена
      Сохранение скрипта в буфере обмена.

    • Вывести скрипт в новое окно запроса
      Скрипт создается в новом окне редактора запросов. Это параметр выбирается по умолчанию.

    • При выборе Расписание щелкните Изменить расписание.

    1. В диалоговом окне Создание расписания задания в поле Имя введите имя расписания задания.

    2. В списке Тип расписания выберите тип расписания:

      • Запускать автоматически при запуске агента SQL Server

      • Запускать при бездействии процессоров

      • Повторяющееся. Выберите этот параметр, если новая секционированная таблица регулярно обновляется с учетом новых данных.

      • Однократно. Этот параметр выбран по умолчанию.

    3. Установите или снимите флажок Включен , чтобы включить или отключить расписание.

    4. При выборе Повторяющееся:

      1. В разделе Частотав списке Выполняется укажите частоту выполнения:

        • При выборе Ежедневнов поле Выполняется каждые укажите частоту повторного выполнения расписания задания в днях.

        • При выборе Еженедельнов поле Выполняется каждые укажите частоту повторного выполнения расписания задания в неделях. Выберите день или дни недели, в которые выполняется расписание задания.

        • При выборе Ежемесячнощелкните День или Определенный.

          • При выборе Деньвведите дату месяца, в которую должно выполняться расписание задания, и укажите частоту повторного выполнения расписания задания в месяцах. Например, если требуется, чтобы расписание задания выполнялось 15 числа каждого второго месяца, выберите День и введите в первом поле 15 и 2 — во втором поле. Наибольшее число, допустимое во втором поле, — "99".

          • При выборе Определенныйвыберите определенный день недели в месяце, в котором должно выполняться расписание задания, и укажите частоту повторного выполнения расписания задания в месяцах. Например, если требуется, чтобы расписание задания выполнялось в последний день недели каждого второго месяца, выберите День, затем последний в первом списке и рабочий день во втором списке, а потом введите "2" во втором поле. Еще можно выбрать первый, второй, третийили четвертый, а также конкретные дни недели (например, воскресенье или среду) в первых двух списках. Наибольшее число, допустимое в последнем поле, — "99".

      2. В поле Сколько раз в деньукажите частоту повторного выполнения расписания задания в день запуска расписания задания:

        • При выборе Выполнять раз вукажите определенное время дня для запуска расписания задания в поле Выполнять раз в . Укажите время дня: час, минуту и секунду.

        • При выборе Выполняется каждыеукажите частоту выполнения задания в выбранный день в поле Частота. Например, если требуется, чтобы расписание задания выполнялось каждые 2 часа в день запуска расписания задания, выберите Выполняется кажд., введите "2" в первом поле, а затем выберите в списке часы. В этом списке также можно выбрать минуты и секунды. Наибольшее число, допустимое в первом поле, — "100".

          В поле Начинать в введите время для начала запуска расписания задания. В поле Заканчивать в введите время для завершения повторного выполнения расписания задания. Укажите время дня: час, минуту и секунду.

      3. В разделе Длительность, в области Дата началавведите дату начала запуска расписания задания. Выберите Дата окончания или Без даты окончания , чтобы указать дату завершения выполнения расписания задания. При выборе Дата окончаниявведите дату завершения запуска расписания задания.

    5. При выборе значения Однократнов Однократное выполнениев поле Дата введите дату запуска расписания задания. В поле Время введите время запуска расписания задания. Укажите время дня: час, минуту и секунду.

    6. В разделе Сводкав Описаниепроверьте правильность всех параметров расписания задания.

    7. Нажмите ОК.

    После завершения работы с этой страницей нажмите кнопку Далее.

  7. На странице Просмотр сводки в разделе Просмотр выбранных параметровразверните все доступные параметры, чтобы проверить правильность всех настроек сжатия. Если все настройки правильные, нажмите кнопку Готово.

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

    На странице Выполнение мастера сжатия доступны следующие параметры.

    • Сведения

      Сведения о событии, состоянии и любых сообщениях, которые возвращены в результате действий мастера.

    • Действие

      Задает тип и имя каждого действия.

    • Состояние

      Указывает, вернуло ли действие мастера в целом значение Успешно или Ошибка.

    • Сообщение

      Любые сообщения об ошибках или предупреждения от процесса.

    • Отчет

      Создание отчета, содержащего результаты мастера создания секций. Доступные параметры: Просмотреть отчет, Сохранить отчет в файл, Копировать отчет в буфер обменаи Отправить отчет по электронной почте.

    • Просмотреть отчет

      Открытие диалогового окна Просмотр отчета , которое содержит текстовый отчет о работе мастера создания секций.

    • Сохранить отчет в файл

      Открытие диалогового окна Сохранить отчет как .

    • Копировать отчет в буфер обмена

      Копирование результатов отчета о работе мастера в буфер обмена.

    • Отправить отчет по электронной почте

      Копирование результатов отчета о состоянии мастера в сообщение электронной почты.

    По завершении нажмите кнопку Закрыть.

Использование Transact-SQL

SQL Server

В SQL Server запустите sp_estimate_data_compression_savings, а затем включите сжатие для таблицы или индекса. См. следующие разделы.

Включение сжатия таблицы

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

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

    USE AdventureWorks2022;
    GO
    EXEC sp_estimate_data_compression_savings 'Production', 'TransactionHistory', NULL, NULL, 'ROW';
    
    ALTER TABLE Production.TransactionHistory REBUILD PARTITION = ALL
    WITH (DATA_COMPRESSION = ROW);
    GO
    

Включение сжатия индекса

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В примере сначала формируется запрос к представлению каталога sys.indexes для получения имени и index_id для каждого индекса таблицы Production.TransactionHistory . Затем он выполняет хранимую процедуру sp_estimate_data_compression_savings , чтобы вернуть предполагаемый размер указанного идентификатора индекса, если бы он использовал PAGE параметр сжатия. Наконец, в примере выполняется перестроение индекса 2 (IX_TransactionHistory_ProductID), указывающее PAGE сжатие.

    USE AdventureWorks2022;
    GO
    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
    

В базе данных SQL Azure

База данных SQL Azure не поддерживает хранимую процедуру sp_estimate_data_compression_savings . Следующие скрипты обеспечивают сжатие без оценки объема сжатия.

Включение сжатия таблицы

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. Этот пример включает ROW сжатие для всех секций в указанной таблице.

    USE AdventureWorks2022;
    GO
    
    ALTER TABLE Production.TransactionHistory REBUILD PARTITION = ALL
    WITH (DATA_COMPRESSION = ROW);
    GO
    

Включение сжатия индекса

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В примере сначала формируется запрос к представлению каталога sys.indexes для получения имени и index_id для каждого индекса таблицы Production.TransactionHistory . Наконец, в примере выполняется перестроение индекса 2 (IX_TransactionHistory_ProductID), указывающее PAGE сжатие.

    USE AdventureWorks2022;
    GO
    SELECT name, index_id
    FROM sys.indexes
    WHERE OBJECT_NAME (object_id) = N'TransactionHistory';
    
    ALTER INDEX IX_TransactionHistory_ProductID ON Production.TransactionHistory REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);
    GO
    

Дополнительные сведения см. в разделах ALTER TABLE (Transact-SQL) и ALTER INDEX (Transact-SQL).

См. также