Как использовать сжатие данных SQL Server для экономии места

3 июля 2017 г.

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

А пока вы знаете, что будет разумно сделать все вы можете минимизировать объем хранилища вашей базы данных. Сжатие данных SQL Server, доступное в версиях Enterprise, является одним из таких подходов. Идея проста: найдите повторяющиеся разделы данных в таблице и сохраните уникальную информацию только для каждой строки, страницы или индекса хранилища столбцов. Современные алгоритмы сжатия могут уменьшить занимаемое на диске место на 40-60% или даже больше, в зависимости от типа данных.

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

Прежде чем мы начнем, позвольте мне ответить на вопрос, который вы, возможно, задаете о производительности. Сжатые таблицы используют дополнительные циклы ЦП для сжатия/распаковки их содержимого. Однако вам потребуется меньше операций ввода-вывода для чтения и записи этих таблиц, поскольку теперь они занимают (намного) меньше места на диске. Если вы не сильно ограничены процессором — в этом случае у вас большие проблемы — сжатие вполне может повысить пропускную способность вашей системы за счет сокращения операций ввода-вывода.

Какие таблицы и индексы не сжимаются?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT DISTINCT
s.name,
t.name,
i.name,
i.type,
i.index_id,
p.partition_number,
p.rows
FROM sys.tables t
LEFT JOIN sys.indexes i
ON t.object_id = i.object_id
ПРИСОЕДИНЯЙТЕСЬ к sys.schemas s
ON t.schema_id = s.schema_id
LEFT JOIN sys.partitions p
ON i.index_id = p.index_id
И t.object_id = p.object_id
ГДЕ t.type = ‘U’
И p.da ta_compression_desc = ‘NONE’
ЗАКАЗАТЬ ПО p. rows desc

Запуск этого против базы данных AdventureWorks , вы можете получить следующий результат:

Без даже учитывая содержимое этих таблиц, можно увидеть, что таблица SalesOrderDetail самая большая. Это может быть хорошим кандидатом для сжатия. Между прочим, столбец типа указывает тип индекса. 1 — для кластерных индексов. 2 означает некластеризованный индекс. 0 (не показан в этом примере) — это куча. Напомним, что таблица представляет собой либо кучу, либо кластерный индекс.

Сколько места я сэкономлю?

SQL Server предоставляет простую в использовании хранимую процедуру для оценить экономию, которую может дать сжатие. Поскольку существует два типа сжатия, ROW и PAGE, давайте попробуем оба:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
EXEC sp_estimate_data_compression_savings
@schema_name = ‘Продажи’,
@ object_name = ‘SalesOrderDetail’,
@index_id = NULL,
@partition_number = NULL,
@data_compression = ‘ROW’
EXEC sp_estimate_data_compression_savings
@schema_name = ‘Sales’,
@object_name = ‘SalesOrderDetail’ ,
@index_id = NULL,
@partition_number = NULL,
@data_compression = ‘PAGE’

Эти вызовы дали результаты:

Я выделил столбцы, показывающие текущий уровень сжатия (нет) и запрошенное сжатие (сначала СТРОКА, затем СТРАНИЦА). Ясно, что сжатие PAGE — лучший вариант для индексов с идентификаторами 1 и 3. Показатели с идентификатором 2 не так сильно выигрывают. Ссылаясь на более ранние результаты, вы можете видеть, что индексы 1 и 3 являются первичным ключом и некластеризованным индексом. Индекс два, как следует из названия, представляет собой «Альтернативный ключ» для GUID строки. GUID не очень сжимаются (да и не должно быть! Если бы это было так, это означало бы много повторяющихся символов, что было бы действительно очень плохими идентификаторами GUID!), Поэтому не стоит пытаться.

ОК! Давайте сжимаем все!

Если вы знаете, , что сжимать, все будет просто:

1
2
3
4
5
6
7
8
9
10
ALTER INDEX PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID
ПО продажам. SalesOrderDetail
ВОССТАНОВИТЬ РАЗДЕЛ = ВСЕ
WITH (DATA_COMPRESSION = PAGE);
ALTER INDEX IX_SalesOrderDetail_ProductID
ON Sales.SalesOrderDetail
ВОССТАНОВИТЬ РАЗДЕЛ = ВСЕ
WITH (DATA_COMPRESSION = PAGE);

Мы сожмем двух найденных кандидатов. Фактическое время выполнения операции сжатия, конечно, зависит от размера таблиц и индексов. Для большого стола ожидайте немного подождать! Также обратите внимание, что я указал «РАЗДЕЛ = ВСЕ». Для AdventureWorks все таблицы находятся в одном разделе, так что это нормально, хотя я мог бы написать «PARTITION = 1» с тем же результатом. Однако представьте, что у вас есть очень большие таблицы, которые разбиты на разделы. В таком случае может быть разумным сжимать один раздел за раз, а не перегружать систему при одновременном сжатии всех разделов.

Мои таблицы сжаты, так что насчет файловой системы пробел?

Допустим, вы выполнили упражнение по сжатию всего, что кажется стоящим усилий. Это может означать, что ваши разделы (или ПЕРВИЧНЫЙ раздел, если ваши таблицы не секционированы) теперь заполнены только наполовину. Возвращаясь к предыдущей статье, вы можете задаться вопросом, сможете ли вы теперь вернуть место в файловой системе. Ответ, как всегда, — «Это зависит от обстоятельств».

Если ваши таблицы просто росли в конце их кластеризованных индексов (или если они были кучей), я бы поднял « Это зависит от «вполне возможно». Если в ваших таблицах было много вставок в середине, обновлений или удалений, то, возможно, нет. Когда вы сжимаете несколько таблиц в разделе, SQL не будет дефрагментировать раздел. Это может означать, что на разделах некуда отдавать место. Если это произойдет, единственное средство — скопировать раздел в другую файловую группу, таблица за таблицей, а затем удалить исходный файл.

Вы можете увидеть, есть ли место для возврата, с помощью довольно простой запрос:

1
2
3
4
5
6
7
8
9
SELECT имя,
s.used/128.0 AS SpaceUsedInMB,
size/128.0 — s.used/128.0 AS AvailableSpaceInMB
ИЗ sys.database_files
CROSS APPLY
(SELECT CAST (FILEPROPERTY (name, ‘SpaceUsed’) AS INT))
s (используется)
ГДЕ СВОЙСТВО ФАЙЛА (name, ‘SpaceUsed’) IS NOT NULL;

После сжатия двух указанных выше индексов я получаю результат:

Итак, есть место для роста. Если бы я хотел вернуть что-то из этого, я могу использовать команду:

1
2
DBCC SHRINKFILE (N’AdventureWorks2014_Data ‘, 202)

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

  1. Достаточно велики, чтобы беспокоиться о
  2. Имеют больше, чем задано количество свободного места
  3. На определенном диске (для баз данных, распределенных по нескольким дискам)

Сначала создается таблица файлов-кандидатов, затем выполняется обработка файлы, выполнив команду DBCC для сжатия тех, которые прошли тесты. Считайте этот процесс незавершенным. Используйте его, заимствуйте у него, улучшайте или игнорируйте! Я включил его в конец этой статьи

Резюме

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

ту же работу с меньшим количеством операций ввода-вывода!

Предыдущие статьи этой серии:

  • Как отслеживать использование пространства базы данных SQL Server с помощью встроенных функций и DMV
  • Обнаружение информации о базе данных с помощью встроенных функций и динамических управленческих представлений (DMV)
  • Обнаружение информации об экземпляре SQL-сервера с помощью системных представлений
  • Обнаружение дополнительной информации о SQL-сервере с помощью встроенных динамических административных представлений (DMV)

Узнать больше

Рассмотрите эти бесплатные инструменты для SQL Server, которые повышают производительность труда разработчиков баз данных.

Ссылки

  • Сжатие данных
  • sp_estimate_data_compression_savings
  • FILEPROPERTY
  • DBCC SHRINKFILE

Сжать сохраненные файлы Процедура

1
2
3
4
5
6
7
8 v>
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
IF object_id (N’tempdb.. #shrink ‘, N’P’) IS NOT NULL
DROP PROC #shrink
go
CREATE PROC #shrink
@freepct float = 10.0,
@drive char (1) = ‘I’,
@minsize int = 10,
@debug bit = 1
КАК НАЧАТЬ
УСТАНОВИТЬ NOCOUNT ON;
DECLARE @files TABLE (первичный ключ fn sysname, используется float, free float);
INSERT INTO @files (fn, used, free)
SELECT имя,
s.used/128.0 AS SpaceUsedInMB,
(size/128.0) — (s.used/128.0 ) AS AvailableSpaceInMB
FROM sys.database_files
CROSS APPLY
(SELECT CAST (FILEPROPERTY (name, ‘SpaceUsed’) AS INT ))
s (использовано)
ГДЕ ВЛЕВО (физическое_имя, 1) = @drive
И СВОЙСТВО ФАЙЛА (name, ‘SpaceUsed ‘) IS NOT NULL;
DECLARE cur CURSOR LOCAL READ_ONLY FAST_FORWARD FORWARD_ONLY FOR
SELECT fn, used, free
ИЗ @file s
ГДЕ бесплатно + использовалось & gt; @minsize
И бесплатно/используется & gt; = @ freepct/100
DECLARE @fn sysname, @used float, @ free float;
OPEN cur
WHILE 1 = 1 BEGIN
FETCH NEXT FROM cur INTO @fn, @used, @free
IF @@ FETCH_STATUS & lt; & gt; 0 BREAK
DECLARE @newsize int = @used + @ used * @ freepct/100
DECLARE @stmt nvarchar (255 ) = N ‘
DBCC SHRINKFILE (N’ »
+ @fn + » ‘,’
+ cast ( @newsize AS varchar (10))
+ ‘)
RAISERROR (@stmt, 0, 0) С NOWAIT ;;
IF @debug = 0 EXEC sp_executesql @stmt = @stmt
END
ЗАКРЫТЬ cur
DEALLOCATE cur
END
  • Автор
  • Последние сообщения
Последние сообщения Джеральда Бриттона (посмотреть все)
  • Изоляция моментальных снимков в SQL Server — 5 августа 2019 г.
  • Уменьшение размера базы данных с помощью DBCC SHRINKFILE — 16 августа 2018 г.
  • Частичные хранимые процедуры в SQL Server — 8 июня 2018 г.

Связанные сообщения:

  1. Сжатие данных SQL Server с помощью мастера сжатия данных SSMS
  2. Columnstore Index Улучшения — сжатие данных, оценки и экономия
  3. Как вернуть данные использование, сжатие индекса и сведения о строках с помощью PowerShell
  4. Функции сжатия и распаковки в SQL Server 2016
  5. Мониторинг дискового пространства в Linux — полезные команды для администраторов баз данных SQL Server


Обзор сжатия данных в SQL Server

Всего: 10 Среднее: 4,5

База данных является важной и важной частью любого бизнеса или организации. Тенденции роста предсказывают, что 82% предприятий ожидают увеличения количества баз данных в течение следующих 12 месяцев. Основная задача каждого администратора базы данных — узнать, как справиться с огромным ростом объема данных, и это будет самой важной целью. Как можно повысить производительность базы данных, снизить затраты и устранить простои, чтобы предоставить пользователям наилучшие возможности? Возможно ли сжатие данных? Давайте начнем и посмотрим, как некоторые из существующих функций могут быть полезны в таких ситуациях.

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

  • Обзор сжатия
  • Преимущества сжатия
  • Краткое описание данных — это методы сжатия.
  • Обсуждение различных типов сжатия данных
  • Факты о сжатии данных
  • Рекомендации по реализации
  • и другие…

Сжатие

Сжатие — это метод и, следовательно, операция с учетом ресурсов, но с аппаратными компромиссами.. Следует подумать о развертывании сжатия данных для получения следующих преимуществ:

  • Эффективное управление пространством
  • Эффективный метод снижения затрат
  • Простота управления резервным копированием базы данных.
  • Эффективное использование полосы пропускания N/W
  • Безопасное и быстрое восстановление или восстановление
  • Лучшая производительность — снижает объем памяти системы

Примечание. Если SQL Server ограничен ЦП или памятью, сжатие может не подходить для вашей среды.

Сжатие данных применяется к:

  • Кучам
  • Кластеризованным индексам
  • Некластеризованным индексам
  • Разделы
  • Индексированные представления

Примечание. Большие объекты не сжимаются (для Например, LOB и BLOB)

Лучше всего подходит для следующих приложений:

  • Таблицы журналов
  • Таблицы аудита
  • Таблицы фактов
  • Отчетность

Введение

Сжатие данных — это технология это существует с SQL Server 2008. Идея сжатия данных заключается в том, что вы можете выборочно выбирать таблицы, индексы или разделы в базе данных. Ввод-вывод продолжает оставаться узким местом при перемещении информации между входом и выходом из базы данных. Сжатие данных использует преимущества этого типа и помогает повысить эффективность базы данных. Поскольку мы знаем, что скорость сети намного ниже скорости обработки, можно добиться повышения эффективности, используя вычислительную мощность для сжатия данных в базе данных, чтобы они передавались быстрее. А затем снова используйте вычислительную мощность, чтобы распаковать данные на другом конце. Как правило, сжатие данных уменьшает пространство, занимаемое данными. Техника сжатия данных доступна для каждой базы данных и поддерживается всеми выпусками SQL Server 2016 SP1. До этого она была доступна только в выпусках SQL Server Enterprise или Developer, но не в версиях Standard или Express.

Поддержка функций

Типы сжатия данных

В SQL Server доступно два типа сжатия данных: на уровне строки и на уровне страницы.

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

Концепция сжатия распространяется на все типы данных фиксированной длины, включая char, int и float.. SQL Server позволяет экономить место за счет хранения данных, как если бы это был тип переменного размера; данные будут отображаться и вести себя как фиксированная длина.

Например, если вы сохранили значение 100 в столбце int , серверу SQL не нужно используйте все 32 бита, вместо этого он просто использует 8 бит (1 байт).

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

Сжатие строк

Row сжатие — это внутренний уровень сжатия, при котором фиксированные строки символов сохраняются с использованием формата переменной длины, не сохраняя пустые символы. При сжатии на уровне строк выполняются следующие шаги.

  • Все числовые типы данных, такие как int , float , decimal, и money преобразуются в типы данных переменной длины. Например, 125 хранится в столбце, а тип данных столбца является целым числом. Тогда мы знаем, что 4 байта используются для хранения целочисленного значения. Но 125 можно сохранить в 1 байте, потому что 1 байт может хранить значения от 0 до 255. Таким образом, 125 можно сохранить как крошечный int , так что можно сохранить 3 байта.
  • Типы данных

  • Char и Nchar хранятся как типы данных переменной длины. Например, «SQL» хранится в столбце типа char (20). Но после сжатия будет использовано всего 3 байта. После сжатия данных в этом типе данных не сохраняется никаких пробелов.
  • Метаданные записи уменьшаются.
  • Значения NULL и 0 оптимизируются, а занимает место.

Сжатие страницы

Сжатие страницы — это расширенный уровень сжатия данных. По умолчанию сжатие страницы также реализует сжатие на уровне строк. Сжатие страниц подразделяется на два типа

  • сжатие префиксов и
  • сжатие словаря.

Сжатие префиксов

При сжатии префиксов для каждой страницы для каждого столбца на странице общее значение извлекается из всех строк и сохраняется под заголовком в каждом столбце. Теперь в каждой строке хранится ссылка на это значение вместо общего значения.

Сжатие словаря

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

Мы можем выполнять сжатие на уровне строк и страниц для следующих объектов базы данных.

  • Таблица, хранящаяся в куче.
  • Вся таблица, хранящаяся как кластерный индекс.
  • Индексированное представление.
  • Не -кластерный индекс.
  • Секционированные индексы и таблицы.

Примечание. Мы можем выполнять сжатие данных либо во время создания, например CREATE TABLE, CREATE INDEX, либо после создания, используя команду ALTER с REBUILD. вариант типа ALTER TABLE…. ВОССТАНОВИТЬ С.

Демо

База данных WideWorldImporters используется на протяжении всей демонстрации. Кроме того, для операции сжатия учитывается база данных DW в реальном времени.

Давайте подробно рассмотрим шаги:

1. Чтобы просмотреть настройки сжатия для объектов в базе данных, запустите следующий T-SQL:

 USE WideWorldImporters; GOSELECT S.name AS SchemaName, O.name AS ObjectName, I.name AS IndexName, I.  type_desc AS IndexType, P.data_compression_desc AS Сжатие FROM sys.schemas AS S JOIN sys.objects AS O ON S.schema_id = O.schema_id JOIN sys.indexes AS I ON O.object_id = I.object_id JOIN sys.partitions AS P ON  I.object_id = P.object_id И I.index_id = P.index_id ГДЕ O.TYPE = 'U' ЗАКАЗАТЬ ПО S.name, O.name, I.index_id; GO 

Следующий вывод показывает тип сжатия как PAGE, ROW, а для нескольких таблиц — NONE. Это означает, что он не настроен для сжатия.

2. Чтобы оценить сжатие, запустите следующую системную хранимую процедуру sp_estimate_data_compression_savings . В этом случае хранимая процедура выполняется в таблицах PurchaseOrderLines.

3. Давайте выясним параметр сжатия PurchaseOrderLines, запустив следующий T-SQL:

 USE WideWorldImporters; GOSELECT S.name AS SchemaName, O.name AS ObjectName, I.name AS IndexName, I.type_desc  AS IndexType, P.data_compression_desc AS Сжатие FROM sys.schemas AS S JOIN sys.objects AS O ON S.schema_id = O.schema_id JOIN sys.indexes AS I ON O.object_id = I.object_id JOIN sys.partitions AS P ON I  .object_id = P.object_id И I.index_id = P.index_id ГДЕ O.TYPE = 'U' и o.name = 'PurchaseOrderLines' ЗАКАЗАТЬ ПО S.name, O.name, I.index_id; 

 EXEC sp_estimate_data_compression_savings @schema_name = 'Purchasing', @object_name = 'PurchaseOrderLines'  , @index_id = NULL, @partition_number = NULL, @data_compression = 'Page'; GO 

4. Включите сжатие, выполнив команду ALTER table:

 ALTER TABLE Purchasing.PurchaseOrderLines REBUILD with (DATA_COMPRESSION = Page); GO 

5. Чтобы создать новую таблицу с включенной функцией сжатия, добавьте предложение WITH в конце оператора CREATE TABLE. Вы можете увидеть приведенный ниже оператор CREATE TABLE, используемый для создания NewCompressedTable .

 СОЗДАТЬ ТАБЛИЦУ NewCompressedTable (FirstColumn int, SecondColumn varchar (50)) WITH (DATA_COMPRESSION = Page); GO 

Давайте рассмотрим некоторые из фактических информация о сжатии

  1. Сжатие нельзя применить к системным таблицам
  2. Таблицу нельзя включить для сжатия, если размер строки превышает 8060 байт.
  3. Сжатые данные кэшируются в буферном пуле; это означает более быстрое время отклика.
  4. Включение сжатия может привести к изменению планов запросов, поскольку данные хранятся с использованием другого количества страниц и количества строк на странице.
  5. Не -кластерные индексы не наследуют свойство сжатия
  6. Когда кластеризованный индекс создается в куче, кластерный индекс наследует состояние сжатия кучи, если не указано альтернативное состояние сжатия.
  7. Сжатие на уровне ROW и PAGE может быть включено и отключено в автономном или оперативном режиме.
  8. Если настройка кучи изменена, все некластеризованные индексы должны быть перестроены.
  9. Требования к дисковому пространству для включения или отключения сжатия строк или страниц такие же, как для создания или перестроения индекса.
  10. Когда разделы разделяются с помощью оператора ALTER PARTITION, оба раздела наследуют атрибут сжатия данных исходного раздела.
  11. Когда два раздела объединяются, результирующий раздел наследует com атрибут pression целевого раздела.
  12. Чтобы переключить раздел, свойство сжатия данных раздела должно соответствовать свойству сжатия таблицы.
  13. Таблицы и индексы Columnstore всегда сохраняются со сжатием Columnstore.
  14. Сжатие данных несовместимо с разреженными столбцами, поэтому таблица не может быть сжата.

Сценарий в реальном времени

Давайте рассмотрим методику сжатия данных и поймем ключевые параметры сжатия данных.

Чтобы проверить используемое пространство для каждой таблицы запустите следующий T-SQL. Результат запроса дает нам подробную информацию об использовании каждой таблицы. Это было бы решающим фактором для реализации сжатия данных.

 ВЫБРАТЬ t.NAME как TableName, i.name как indexName, sum (p.rows) как RowCounts, sum (a.total_pages  ) как TotalPages, sum (a.used_pages) как UsedPages, sum (a.data_pages) как DataPages, (sum (a.total_pages) * 8)/1024 как TotalSpaceMB, (sum (a.used_pages) * 8)/1024 как  UsedSpaceMB, (sum (a.data_pages) * 8)/1024 как DataSpaceMBFROM sys.tables tINNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_idINNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index  = p.index_idINNER JOIN sys.allocation_units a ON p.partition_id = a.container_idWHERE t.NAME NOT LIKE 'dt%' AND i.OBJECT_ID> 255 AND i.index_id  

Давайте рассмотрим ftb_material_Issue таблица фактов. Таблица фактов имеет числовые типы данных BIGINT.

Теперь запустите хранимую процедуру sp_spaceused, чтобы понять детали таблицы. Подробнее о команде sp_spaceused можно узнать здесь.

Включите сжатие на уровне таблицы, запустив следующий T-SQL. Следующий T-SQL был выполнен на сервере, и для сжатия страницы на уровне таблицы потребовалось 34 минуты 14 секунд.

 ALTER TABLE dbo.ftb_material_Issue REBUILD with (DATA_COMPRESSION = Page); 

Вы можете видеть колебания ЦП и ввода-вывода во время выполнения команды ALTER table.

Теперь давайте проведем сравнение до и после сжатия данных. Размер таблицы с ~ 45 ГБ уменьшен до ~ 15 ГБ.

Этот процесс реализован на большинстве объектов с использованием автоматизированного сценария, и вот окончательный результат сравнения.

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

Резюме

Сжатие данных - очень эффективный метод уменьшения размера данных; уменьшение объема данных требует меньше операций ввода-вывода. Добавление сжатия к базе данных увеличивает нагрузку на процессор. Вам нужно будет убедиться, что у вас есть доступная вычислительная мощность, чтобы эффективно учитывать эти изменения. Так что лучше сначала провести небольшое исследование и посмотреть, какие выгоды можно ожидать, прежде чем применять модификации для сжатия данных. Это очень полезно при настройке облачной базы данных, когда это связано с затратами.

Стадия сжатия (не выполняйте все сразу) и сжатие в периоды низкой активности. Сжатие данных и сжатие резервных копий прекрасно сосуществуют и могут привести к дополнительной экономии места для хранения, так что не бойтесь.

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

Решить внедрение сжатия будет проще, если мы знаем базовую инфраструктуру и бизнес-требования. Мы определенно можем использовать доступную системную процедуру, чтобы понять и оценить экономию на сжатии. Эта хранимая процедура не предоставляет никаких подробностей, которые рассказывали бы вам, как сжатие положительно или отрицательно повлияет на вашу систему. Очевидно, что есть компромиссы для любого вида сжатия. Если у вас одинаковые шаблоны огромных данных, то сжатие - ключ к экономии места. С ростом мощности ЦП и привязкой каждой системы к многоядерным структурам сжатие может подходить для многих систем. Я бы рекомендовал протестировать ваши системы. Проверьте, не повлияет ли это на производительность. Если в индексе много обновлений и удалений, затраты ЦП на сжатие и распаковку данных могут перевесить экономию ввода-вывода и оперативной памяти от сжатия данных. Не каждая база данных или таблица будет автоматически подходящим кандидатом для применения сжатия, поэтому лучше сначала провести небольшое исследование, чтобы увидеть, какие выгоды можно ожидать, прежде чем применять модификации, позволяющие сжатие данных в ваших базах данных. Вам необходимо протестировать сжатие, чтобы увидеть, хорошо ли оно работает в вашей среде, поскольку оно может не работать в базах данных с большим количеством вставок.

Ссылки

Выпуски и поддерживаемые функции SQL Server 2016

Сжатие данных

Реализация сжатия строк

Реализация сжатия страниц

  • Автор
  • Недавние сообщения
Последние сообщения Прашанта Джаярама (посмотреть все)
  • Автоматический сбор конфигурации SQL Server с помощью PowerShell - 26 апреля 2019 г.
  • Обзор сжатия данных в SQL Server - 6 декабря 2018 г.
  • Важность журнала транзакций в SQL Server - 13 ноября 2018 г.
Оцените статью
logicle.ru
Добавить комментарий