Published on

February 18, 2010

Улучшение производительности SQL Server с помощью сжатия данных

Когда речь идет о производительности SQL Server, эффективность ввода-вывода диска играет решающую роль. Чем быстрее ввод-вывод диска, тем лучше производительность. В SQL Server 2008 Microsoft представила функции сжатия данных и резервного копирования для повышения эффективности ввода-вывода диска. В этой статье мы сосредоточимся на сжатии данных и том, как оно может значительно улучшить производительность.

Сжатие данных в SQL Server относится к уменьшению дискового пространства, зарезервированного для данных. Его можно настроить для различных объектов базы данных, таких как таблицы, кластеризованные индексы, не кластеризованные индексы, индексированные представления или разделы таблиц или индексов. SQL Server предлагает два уровня сжатия данных: ROW и PAGE. Сжатие страниц автоматически включает сжатие строк.

Чтобы включить сжатие данных, вы можете использовать операторы CREATE TABLE и CREATE INDEX при создании таблиц и индексов. Кроме того, вы можете изменить состояние сжатия таблицы, индекса или раздела с помощью операторов ALTER TABLE.. REBUILD WITH или ALTER INDEX.. REBUILD WITH.

Итак, что происходит во время сжатия данных? Давайте ближе рассмотрим сжатие строк:

  • Уменьшается накладные расходы метаданных записи.
  • Числовые и числовые типы данных (например, целые числа, десятичные числа, даты и время) преобразуются в значения переменной длины. Это позволяет восстановить неиспользуемое пространство. Например, целочисленное значение от 0 до 255 может быть сохранено в 1 байте, но по умолчанию оно резервирует 4 байта на диске. После сжатия восстановлено 3 байта.
  • Значения типов CHAR и NCHAR хранятся в формате переменной длины. После сжатия с этим типом данных не хранятся пробелы. Например, значение “DBMS”, хранящееся в столбце типа CHAR(10), будет занимать всего 4 байта после сжатия.
  • Значения NULL и 0 для всех типов данных оптимизированы и не занимают байты.

Сжатие страниц, с другой стороны, использует два дополнительных метода: префиксное сжатие и словарное сжатие.

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

Внедрение сжатия данных может значительно влиять на размер ваших таблиц. Рассмотрим пример:

USE tempdb
GO

CREATE TABLE TestCompression (
  col1 INT,
  col2 CHAR(50)
)
GO

INSERT INTO TestCompression VALUES (10, 'сжатие тестирование')
GO 5000

-- Исходный
EXEC sp_spaceused TestCompression
GO

-- Сжатие данных = ROW
ALTER TABLE TestCompression REBUILD WITH (DATA_COMPRESSION = ROW);
GO

EXEC sp_spaceused TestCompression
GO

-- Сжатие данных = PAGE
ALTER TABLE TestCompression REBUILD WITH (DATA_COMPRESSION = PAGE);
GO

EXEC sp_spaceused TestCompression
GO

-- Сжатие данных = NONE
ALTER TABLE TestCompression REBUILD WITH (DATA_COMPRESSION = NONE);
GO

EXEC sp_spaceused TestCompression
GO

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

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

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.