Статьи

Сжатие данных MS SQL Server

Вступление

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

Microsoft SQL Server 2008 Enterprise Edition поддерживает механизм сжатия данных, который мы обсудим в этой статье.
Где мы можем настроить это

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

Сжатие данных может быть реализовано на двух уровнях

1.
  Ряд

2.
  Страница
Сжатие данных на уровне строк

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

1.
  Снижаются накладные расходы на метаданные записей.

2.   Сжатие данных на уровне строк превращает типы данных фиксированной длины в типы данных переменной длины, освобождая пустое пространство.
Давайте рассмотрим пример, чтобы понять суть № 2

Предположим, что 120 хранятся в типе данных INTEGER.
Все мы знаем, что тип данных INTEGER для хранения занимает 4 байта, поэтому для значения 120 также требуется 4 байта.

Мы также знаем, что значение INTEGER от 0 до 255 может храниться в 1 байте.
Таким образом, после сжатия освобождается 3 байта, и наше значение 120 занимает 1 байт для хранения.

3.
  Он также имеет возможность игнорировать нулевые и нулевые значения, экономя дополнительное пространство.
Сжатие данных на уровне страницы

Это начинается со сжатия данных на уровне строк.
С его помощью требуется две дополнительные функции сжатия — префикс и словарь сжатия.
Префиксное сжатие

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

Step – 1 [ Create The Base Table ]

IF OBJECT_ID(N'dbo.tbl_EMPLOYEE', N'U') IS NOT NULL
   BEGIN
     DROP TABLE [dbo].[tbl_EMPLOYEE];
   END
GO
CREATE TABLE [dbo].[tbl_EMPLOYEE]
   (
     EMPID    INT,
     EMPNAME  VARCHAR(50)
   )
GO

Step – 2 [ Insert Some Records ]

INSERT INTO [dbo].[tbl_EMPLOYEE]
     (EMPID, EMPNAME)
VALUES(1, 'Joydeep Das');
GO 5000

Step - 3 [ Check the Space used by Original Table ]

EXEC sp_spaceused tbl_EMPLOYEE


имя

Ряды

Зарезервированный 

Данные   

Index_size

неиспользуемый
tbl_EMPLOYEE

5000

200KB

152KB

8KB

40KB


 Step – 4 [ Now we Used Data Compression ROW ]

ALTER TABLE [dbo].[tbl_EMPLOYEE]
REBUILD WITH (DATA_COMPRESSION = ROW);
GO

Step – 5 [ Now Again Check the Space Used After Data Compression ROW ]

EXEC sp_spaceused tbl_EMPLOYEE


имя

Ряды

Зарезервированный 

Данные   

Index_size

неиспользуемый
tbl_EMPLOYEE

5000

144Kb

120KB

8KB

16KB


 Step – 6 [ Now we Used Data Compression PAGE ]

ALTER TABLE [dbo].[tbl_EMPLOYEE]
REBUILD WITH (DATA_COMPRESSION = PAGE);
GO

Step – 7 [ Now Again Check the Space Used After Data Compression PAGE ]

EXEC sp_spaceused tbl_EMPLOYEE


имя

Ряды

Зарезервированный 

Данные   

Index_size

неиспользуемый
tbl_EMPLOYEE

5000

80KB

64KB

8KB

8KB


Step – 8 [ Now We Comare all Again ]
Оригинал
 без сжатия

имя

Ряды

Зарезервированный 

Данные   

Index_size

неиспользуемый
tbl_EMPLOYEE

5000

200KB

152KB

8KB

40KB
Сжатие ROW


имя

Ряды

Зарезервированный 

Данные   

Index_size

неиспользуемый
tbl_EMPLOYEE

5000

144Kb

120KB

8KB

16KB
Сжатие PAGE


имя

Ряды

Зарезервированный 

Данные   

Index_size

неиспользуемый
tbl_EMPLOYEE

5000

80KB

64KB

8KB

8KB

Тип сжатия
Данные
НЕТ сжатия (оригинал)

152KB
Сжатие ROW

120KB
Сжатие PAGE

64KB