SQL Server. Диета для баз данных: применение сжатия типа ROW
Содержание:
1. Сжатие в операционной системе;
2. Сжатие строк и реализация сжатия типа ROW;
3. Применение сжатия типа ROW (Вы читаете данный раздел).
Применяемый тип сжатия — свойство каждой системы. В действительности это свойство каждого раздела в каждой таблице и индексе. Его можно применить при создании таблицы, но по нашему опыту оно чаше применяется к уже заполненной таблице.

Таблица Sales.OrderDetails из тестовой базы данных AdventureWorks
Важно понять, когда происходит сжатие. Например, рассмотрим таблицу Sales.OrderDetails из тестовой базы данных AdventureWorks (см. скриншот выше).
Основываясь на типах данных, можно сказать, что эта таблица — подходящий кандидат для уменьшения размера с использованием сжатия типа ROW. Вместо внесения изменений в таблицу AdventureWorks создадим другую таблицу в tempdb и будем работать с ней (см. код выше).
Эта процедура не проверяет всю таблицу, а переносит часть строк таблицы в tempdb, а затем сжимает их с помощью запрошенной схемы и выдает отчет о результатах. Результаты экстраполируются на всю таблицу на основе выборки, и «реальные» результаты могут отличаться. Но, как мы обнаружили, это полезный первый шаг (см. скриншот выше).
В данном случае тестовый размер был, в сущности, всей базой данных. Сообщается о сокращении размера с 6,9 Мбайт до 3,7 Мбайт, или на 46%. Предполагается, что, если применяется сжатие ROW, размер таблицы составит 54% первоначального размера. Проверим текущий размер таблицы:
Результат показан на скриншоте выше.
А теперь внесем изменения:
Результат — на скриншоте выше.
Размер равен 3,9 Мбайт; теперь размер таблицы составляет 56% первоначального размера 6,9 Мбайт.
Для нашего клиента, чью базу данных нужно было «посадить на диету», применив сжатие типа ROW ко всем таблицам, было достигнуто уменьшение размера всей базы данных с 3,8 Тбайт до 2,6 Тбайт. Система клиента полностью ориентирована на ввод-вывод, поэтому неудивительно, что производительность заметно повысилась.
Выгодно ли применять сжатие типа ROW ко всем таблицам? Мне пока не приходилось встречать таблицу, для которой сжатие типа ROW приносило что-либо, кроме пользы. Для пользователей редакции Enterprise Edition оптимальным будет выбираемый по умолчанию режим для таблиц на диске.

Однако можно еще больше сократить размер базы данных и повысить общую производительность. Как и в случае с любой диетой, главное правило — придерживаться четкой схемы. В следующей статье я покажу, как добиться еще большего результата с помощью второго этапа диеты для базы данных.
1. Сжатие в операционной системе;
2. Сжатие строк и реализация сжатия типа ROW;
3.
Применяемый тип сжатия — свойство каждой системы. В действительности это свойство каждого раздела в каждой таблице и индексе. Его можно применить при создании таблицы, но по нашему опыту оно чаше применяется к уже заполненной таблице.

Таблица Sales.OrderDetails из тестовой базы данных AdventureWorks
Важно понять, когда происходит сжатие. Например, рассмотрим таблицу Sales.OrderDetails из тестовой базы данных AdventureWorks (см. скриншот выше).
Основываясь на типах данных, можно сказать, что эта таблица — подходящий кандидат для уменьшения размера с использованием сжатия типа ROW. Вместо внесения изменений в таблицу AdventureWorks создадим другую таблицу в tempdb и будем работать с ней (см. код выше).
Эта процедура не проверяет всю таблицу, а переносит часть строк таблицы в tempdb, а затем сжимает их с помощью запрошенной схемы и выдает отчет о результатах. Результаты экстраполируются на всю таблицу на основе выборки, и «реальные» результаты могут отличаться. Но, как мы обнаружили, это полезный первый шаг (см. скриншот выше).
В данном случае тестовый размер был, в сущности, всей базой данных. Сообщается о сокращении размера с 6,9 Мбайт до 3,7 Мбайт, или на 46%. Предполагается, что, если применяется сжатие ROW, размер таблицы составит 54% первоначального размера. Проверим текущий размер таблицы:
EXEC sp_spaceused N'dbo.SalesOrderDetail';
GOРезультат показан на скриншоте выше.
А теперь внесем изменения:
ALTER TABLE dbo.SalesOrderDetail
REBUILD WITH (DATA_COMPRESSION = ROW);
GO
EXEC sp_spaceused N'dbo.SalesOrderDetail';
GOРезультат — на скриншоте выше.
Размер равен 3,9 Мбайт; теперь размер таблицы составляет 56% первоначального размера 6,9 Мбайт.
Результаты первого этапа диеты для баз данных
Для нашего клиента, чью базу данных нужно было «посадить на диету», применив сжатие типа ROW ко всем таблицам, было достигнуто уменьшение размера всей базы данных с 3,8 Тбайт до 2,6 Тбайт. Система клиента полностью ориентирована на ввод-вывод, поэтому неудивительно, что производительность заметно повысилась.
Выгодно ли применять сжатие типа ROW ко всем таблицам? Мне пока не приходилось встречать таблицу, для которой сжатие типа ROW приносило что-либо, кроме пользы. Для пользователей редакции Enterprise Edition оптимальным будет выбираемый по умолчанию режим для таблиц на диске.

Однако можно еще больше сократить размер базы данных и повысить общую производительность. Как и в случае с любой диетой, главное правило — придерживаться четкой схемы. В следующей статье я покажу, как добиться еще большего результата с помощью второго этапа диеты для базы данных.