Системы дисковых хранилищ часто могут оказаться самыми дорогостоящими компонентами в решении базы данных. Для крупных хранилищ или баз данных с огромными объемами данных стоимость подсистемы хранения может легко превысить общую стоимость аппаратного сервера и программного обеспечения сервера данных. Поэтому даже небольшая экономия на подсистеме хранения может привести к существенному снижению затрат на решение базы данных в целом.
В этой статье рассказывается о технологии DB2 9 (ранее - "DB2 Viper") "Venom", которая позволяет сжать строки данных для снижения потребности в дисковом пространстве, повысить эффективность ввода/вывода и обеспечить более быстрый доступ к данным на диске.
Сжатие строк данных - как это работает
В технологии “Venom” в DB2 9 для сжатия строк данных реализован алгоритм, основанный на использовании словаря. За счет этого в DB2 9 можно сжать строки в таблицах баз данных посредством их сканирования, поиска повторяющихся данных и построения словарей, которые присваивают таким повторяющимся объектам короткие числовые ключи. Текстовые данные обычно хорошо сжимаются благодаря наличию повторяющихся строк, а также данных с большим количеством повторяющихся символов или предшествующих или замыкающих пробелов.
DB2 проверяет на наличие повторяющихся записей или шаблонов целые строки, а не просто отдельные поля или части строк. Для примера рассмотрим следующие две строки:
Таблица 1. Пример строк данных
| Имя | Отдел | Оклад | Город | Штат | Почтовый Индекс |
|---|---|---|---|---|---|
| Фред | 500 | 10000 | Плано | TX | 24355 |
| Джон | 500 | 20000 | Плано | TX | 24355 |
В этом примере сжатию подвергаются не только повторяющиеся значения ("500") в столбце "Отдел"; но и повторяющиеся шаблоны ( "Плано, TX, 24355"), объединяющие столбцы Город, Штат и Почтовый индекс, которые сжимаются как одно значение. На рисунке 1 приводится сравнение обычного хранения строк в DB2 и хранения в сжатом формате:
Рисунок 1. Сравнительная диаграмма хранения сжатых и несжатых данных
Словарь для поиска сжатых/восстановленных данных хранится в базе данных в скрытых объектах, занимая небольшое дисковое пространство, и кэшируется в оперативной памяти для ускорения доступа. Даже для очень больших таблиц словарь сжатия обычно имеет размер порядка 100 Кбайт. В практике могут встречаться экземпляры, в которых отдельные наборы данных сжимаются плохо или есть условия на размер данных, в результате чего существенное сжатие таких данных оказывается невозможным. В DB2 для выявления подобных случаев применяются интеллектуальные алгоритмы; сжатие не выполняется, если в результате не предвидится экономии дискового пространства.
Функция сжатия строк данных в DB2 для Linux®, UNIX®и Windows® аналогична функциям сжатия в DB2 для z/OS®; однако, она отличается от технологий сжатия на уровне страниц, которые предлагают другие разработчики баз данных, когда словарь сжатия создается для каждой страницы в базе данных. Если словарь сжатия создается на уровне таблицы, а не страницы, то анализируются шаблоны во всей таблице, что обычно выражается в повышении экономии дискового пространства при работе с DB2.
Сжатие строк данных в DB2 может быть включено в процессе создании таблицы при помощи параметра COMPRESS YES. Для уже существующей таблицы сжатие можно включить при помощи команды ALTER TABLE. Примеры:
CREATE TABLE Sales COMPRESS YES |
Или,
ALTER TABLE Sales COMPRESS YES |
Сжатие дает эффект только после создания словаря таблицы, что обычно происходит в фазе перестройки (REORG) таблицы.
Или,
REORG TABLE Sales |
При сжатии большой таблицы может оказаться полезным сначала заполнить таблицу небольшим "представительным" набором образцов данных. Процесс построения словаря сжатия может происходить довольно быстро, если набор данных невелик. А если при этом используется хорошая представительная выборка, то сжатие будет отлично работать даже после добавления в таблицу новых данных, при этом DB2 не приходится анализировать новые данные. Однако если тип данных, которые хранятся в таблице, со временем изменится, словарь можно обновить при помощи инструкции REORG.
DB2 предоставляет инструмент INSPECT, позволяющий определить предполагаемый коэффициент сжатия для определенной таблицы или набора данных. Этот инструмент собирает образцы данных таблицы и строит на их основе словарь сжатия. Впоследствии этот словарь используется для тестирования сжатия на основе записей, содержащихся в образце. По результатам тестирования оценивается экономия дискового пространства при сжатии.
INSPECT ROWCOMPESTIMATE TABLE NAME Sales … RESULTS KEEP <имя_файла> db2inspf <имя_файла> <выходной_файл> |
Для просмотра результаты вывода инструмента INSPECT необходимо отформатировать с помощью утилиты DB2. Файлы находятся в каталоге db2dump. Пример вывода показан ниже.
DATABASE: TEST
VERSION : SQL09010
2005-12-01-13.12.21.232959
Action: ROWCOMPESTIMATE TABLE
Schema name: RSAHUJA
Table name: Sales
...
Percentage of bytes saved from compression: 66
Compression dictionary size: 2176 bytes.
...
|
Преимущества сжатия строк данных
Технология сжатия "Venom" может сэкономить до 50% (или даже более) стоимости хранения за счет снижения объема дискового пространства и сокращения периферии дисковой подсистемы, необходимых для хранения данных. Размер журналов базы данных также может уменьшиться, поскольку DB2 сжимает пользовательские данные в записях журнала.
В некоторых случаях эта технология может также повысить производительность, несмотря на вызываемую сжатием/восстановлением данных загрузку ЦПУ. Доступ к данным на диске - это самая медленная операция базы данных. Если на диск сохраняются сжатые данные, то для извлечения или сохранения одного и того же объема данных потребуется меньше операций ввода/вывода. Следовательно, для рабочей нагрузки, связанной с операциями ввода/вывода (например, когда система ожидает/простаивает в ожидании доступа к данным на диске), время обработки запроса может быть заметно сокращено.
Более того, DB2 хранит данные в сжатом виде как на диске, так и в оперативной памяти (буферных пулах DB2), тем самым сокращая потребляемый объем памяти и высвобождая память для других операций базы данных или системы. Это может еще больше повысить производительность выполнения запросов и других операций.
Объем сэкономленного с помощью сжатия строк дискового пространства в DB2 может быть различным в зависимости от свойств данных. Клиенты, работавшие с бета-версиями DB2 9, сообщают об экономии от 50 с лишним до 80 процентов для отдельных объемных установок баз данных. Для набора данных одного из клиентов, размер таблицы в 179.9 Гбайт со страницами по 32 Кбайт, был уменьшен до 42.5 Гбайт: экономия составила 76.4%!
На следующей диаграмме показано еще несколько примеров экономии дискового пространства в различных таблицах с помощью функции сжатия строк данных в DB2:
Рисунок 2. Примеры экономии дискового пространства с помощью сжатия строк данных в DB2
Как пишет Шон Мак-Коун (Sean McCown) в журнале InfoWorld:
"Новый метод сжатия делает возможным непосредственную экономию дискового пространства в среднем от 45 до 75 процентов, в зависимости от типа данных. Чтобы проверить это утверждение, я создал таблицу размером 40 Гбайт (примерно 500 миллионов строк) со смешанными (цифровыми и текстовыми) данными, экспортировал ее в текстовый файл, а затем импортировал в формат сжатой таблицы. Размер сжатой таблицы оказался равным примерно 17.75 Гбайт -- экономия составила 56 процентов.”
Ссылку на полный текст статьи можно найти в разделе Ресурсы.
Помимо сжатия строк данных, появившегося в составе технологии "Venom", DB2 предоставляет дополнительные механизмы для еще большего снижения потребности в дисковом пространстве. Среди них:
- Сжатие значений NULL и значений по умолчанию;
- Сжатие резервных копий базы данных;
- Замена тэгов XML;
- Многомерная кластеризация.
Сжатие значений NULL и значений по умолчанию
При таком типе сжатия, доступном в DB2 для Linux, UNIX и Windows с версии 8, значения NULL, строки нулевой длины в столбцах переменной длины и системные значения по умолчанию не занимают места на диске.
Сжатие резервных копий базы данных
Этот тип сжатия, доступный после установки пакета исправления Fixpak 4 в DB2 для Linux, UNIX и Windows V8, обусловливает меньший размер образов базы данных, в результате чего не только снижаются потребности в дисковом пространстве, но и облегчается перемещение резервных копий баз данных между системами.
Вербальный характер XML приводит к тому, что фрагменты и документы XML обычно занимают много места на диске. DB2 9 сохраняет XML-данные в синтаксически разобранном иерархическом формате, заменяя имена тэгов (например, employee) целыми значениями (например, 4). Повторяющимся тэгам присваиваются одинаковые числовые значения. Хранение текстовых тэгов с помощью целых значений не только снижает потребление дискового пространства, но и помогает повысить производительность при запросах к данным. Более того, синтаксический анализ XML (замена целыми значениями), как и сжатие данных, выполняется незаметно для пользователей и приложений и является для них полностью прозрачным.
Форма сжатия индексов стала доступной в DB2 для Linux, UNIX и Windows с версии 8.1. Значительной экономии дискового пространства можно добиться с помощью блочных индексов, в которых используется один ключ (или запись в индексе) на тысячи записей (в отличие от одного ключа на одну запись в традиционных индексах).
Сжатие строк данных в DB2 9 -это замечательная новая функция, которая может обеспечить значительную экономию дискового пространства и уменьшение стоимости хранения. Загрузите DB2 9 и сами попробуйте поработать с этой функцией, чтобы понаблюдать, сколько дискового пространства можно сэкономить.
Научиться
- Оригинал статьи: Введение в DB2 9. Часть 1: Сжатие данных в DB2 9;
-
Посетите раздел Information Management сайта developerWorks, чтобы расширить знания о продуктах для управления информацией компании IBM;
-
Посетите страницу ресурсов сайта developerWorks, посвященную
DB2 для Linux, UNIX и Windows, прочитайте статьи и учебные руководства и найдите ссылки на документацию, поддержку, образовательные ресурсы и т. д.;
-
Следите за
техническими событиями и новыми материалами на Web-сайте
developerWorks.
Получить продукты и технологии
-
Загрузите
DB2 9, чтобы поработать с функциями, описанными в этой статье;
-
Теперь у вас есть возможность использовать DB2 бесплатно. Загрузите DB2 Express-C, бесплатную версию DB2 Express Edition для сообщества разработчиков, которая предлагает все основные возможности работы с данными платной версии DB2 Express Edtion, что обеспечивает солидное основание для создания и размещения приложений;
-
Используйте в своем следующем проекте по разработке
ознакомительные версии ПО, которые можно загрузить непосредственно с сайта developerWorks;
Обсудить
- Примите участие в обсуждении материала на форуме.
- Примите участие в форуме по Information Management;
-
Участвуйте в блогах
developerWorks и присоединяйтесь к сообществу developerWorks;
Рав Ахуджа (Rav Ahuja) работает в лаборатории IBM Toronto Lab в должности менеджера по разработке и сопровождению DB2 в различных странах мира. Он занимается DB2 для Linux, UNIX и Windows с первой версии, в течение этого времени Рав занимал различные должности, связанные с разработкой, технической поддержкой, маркетингом и товарной стратегией DB2. Работает с клиентами и партнерами по всему миру, помогая им создавать и использовать решения на основе DB2 и сервисов. Рав часто принимает участие в написании технических обзоров, статей и книг по DB2. Имеет ученую степень в области информационных технологий от университета Мак-Гилла и звание магистра в области управления бизнесом от университета Западного Онтарио.