Требования: В базе данных SQL Server есть таблица (например, таблица журналов, таблица журналов запросов), которая занимает очень большое место на диске, возможно, сотни ГБ. Как уменьшить использование места в таблице? Сжатие данных (экономия пространства) может быть включено для очень повторяющегося текста (например, HTML, JSON, логи).
Сжатие строк
Сжатие меняет физическое хранилище данных, но не логическую структуру данных. Процесс сжатия линий:
Определите тип данных каждого столбца и преобразуйте его в переменную длину Наконец, количество запросов на место хранения сокращается до фактического спроса После сжатия количество хранящихся данных на каждой странице увеличивается После сжатия уменьшите количество метаданных Например, если тип данных столбца — smallint, система по умолчанию выделяет 2 байта Но на практике используется только 1 байт места, и если сжатие включено в таблице, его можно выделить по требованию
Сжатие страниц
Сжатие страниц выполняет дополнительные операции для усиления сжатия строк Основные операции: сжатие строк, сжатие префиксов, сжатие словаря
Потребление процессора: сжатие PAGE > сжатие строк
Тест
Создайте новые таблицы Users1 и Users2, обе вставляют по 100 000 элементов данных, и скрипт SQL выглядит следующим образом:
Чтобы увидеть заполненность места в таблице, все из которых составляет 3,27 МБ, команда следующая:
Как показано ниже:
Чтобы просмотреть статус сжатия таблицы Users2, команда выглядит следующим образом:
Как показано ниже:
sp_estimate_data_compression_savingsОцените экономию, которая может произойти, если вы включите таблицы или разделы для строк, страниц, хранилищ столбцов, архивов хранилища столбцов или сжатия XML. Команда следующая:
Результат выглядит следующим образом:
object_name schema_name index_id partition_number size_with_current_compression_setting(KB) size_with_requested_compression_setting(KB) sample_size_with_current_compression_setting(KB) sample_size_with_requested_compression_setting(KB) Users2 dbo 1 1 3368 1296 3448 1328
size_with_current_compression_setting (КБ) 3368 КБ Индекс занимает ≈ 3,29 МБ при текущих настройках сжатия size_with_requested_compression_setting (КБ) 1296 КБ Оценочная площадь ≈ 1,27 МБ, если вы включите новый запрошенный метод сжатия, например PAGE или ROW Для выполнения сжатия страницы следующая команда:
Сравнение эффектов:Таблица Users2 занимает 3,27 МБ до сжатия и 1,23 МБ после сжатия, как показано на рисунке ниже:
Визуализация выглядит следующим образом:
Ссылка:
Вход по гиперссылке виден.
Вход по гиперссылке виден.
Вход по гиперссылке виден. |