Введение в DB2 9: Часть 2. Секционирование таблиц в DB2 9

В этой статье приводятся основные сведения о секционировании таблиц, позволяющие оценить преимущества данной функции.

Рав Ахуджа, менеджер по разработке и сопровождению DB2, IBM

Рав Ахуджа (Rav Ahuja) работает в лаборатории IBM Toronto Lab в должности менеджера по разработке и сопровождению DB2 в различных странах мира. Он занимается DB2 для Linux, UNIX и Windows с первой версии, в течение этого времени Рав занимал различные должности, связанные с разработкой, технической поддержкой, маркетингом и товарной стратегией DB2. Работает с клиентами и партнерами по всему миру, помогая им создавать и использовать решения на основе DB2 и сервисов. Рав часто принимает участие в написании технических обзоров, статей и книг по DB2. Имеет ученую степень в области информационных технологий от университета Мак-Гилла и звание магистра в области управления бизнесом от университета Западного Онтарио.



27.05.2007

Введение

Управление крупными базами данных и таблицами сопряжено с рядом специфических проблем. По мере увеличения размера таблиц иногда оказывается проще управлять данными в блоках или с использованием ограниченных диапазонов значений, чем манипулировать всей совокупностью данных в крупных таблицах. Кроме того, такая методика управления данными особенно полезна при добавлении новых блоков или диапазонов данных или частом удалении устаревших данных из таблиц (например, типичных для сред информационных хранилищ операций свертывания и развертывания данных).

В DB2 9 предусмотрены функции секционирования таблиц (диапазонов), позволяющие облегчить управление, повысить производительность и добиться увеличения масштабируемости крупных баз данных.

Что такое секционирование таблиц?

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

DB2 9 поддерживает формирование разделов или диапазонов данных по различным атрибутам. Часто используется схема секционирования таблиц по срокам, которая позволяет объединить в разделы данные за год или за месяц. Для секционирования можно также использовать атрибуты с числовыми значениями, например, записи с идентификаторами от 1 до 1000000 хранятся в одном разделе данных, а записи с идентификаторами от 1000000 до 2000000 - в другом разделе данных и т. д. Или, например, можно хранить записи о пользователях с фамилиями, начинающимися с букв от A до Ж в одном разделе данных, от З до Н во втором разделе данных, от О до У в третьем разделе данных, а от Ф до Я - в четвертом, и последнем, разделе данных.

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

Функции секционирования таблиц DB2 для Linux®, UNIX®и Windows® аналогичны эквивалентным функциям DB2 для z/OS®, Informix® Dynamic Server и Informix Extended Parallel Server. Программные пакеты DB2 для z/OS, DB2 для iSeries™и DB2 для Linux, UNIX и Windows используют общий базовый синтаксис, реализуя различные подмножества этого синтаксиса. DB2 для Linux, UNIX и Windows использует сокращенный синтаксис, в котором предусмотрено гораздо меньше конструкций по сравнению с двумя другими упомянутыми программными продуктами.

Преимущества секционирования таблиц

Преимущества секционирования таблиц в DB2 9:

Повышенная управляемость: В DB2 9 возможно независимое администрирование разных разделов данных. Например, можно выполнить резервное копирование и восстановление отдельных разделов данных, а не всей таблицы. Это позволяет разбить операции администрирования, требующие больших затрат времени, на серию менее продолжительных операций.

Повышенная производительность запросов: Оптимизатор запросов DB2 умеет работать с разделами данных. Следовательно, в процессе выполнения запроса сканируются только релевантные разделы данных. Удаление из плана запроса нерелевантных разделов данных может повысить производительность.

Рисунок 1. Сканирование только релевантных разделов
Сканирование только релевантных разделов

Быстрое свертывание/развертывание данных: DB2 9 позволяет легко добавить в таблицу или удалить из таблицы данные без перевода базы данных в автономный режим. Эта возможность может быть особенно полезна в среде информационного хранилища со свойственной ей необходимостью частых загрузок или удалений данных для выполнения запросов подсистемы поддержки принятия диспетчерских решений. Например, в типичном информационном хранилище страховой компании информация о страховых исках может храниться в течение трех лет. Как только в информационное хранилище загружается и свертывается информация текущего месяца, информация за прошлый месяц может быть архивирована и удалена (развернута) из активной таблицы. Кроме того, этот метод развертывания разделов данных отличается большей эффективностью, ведь он не требует записи в журнал операций удаления данных, в отличие от удаления определенных диапазонов данных.

Улучшенный механизм оптимизации стоимости хранения: Секционирование таблиц в DB2 9 обеспечивает улучшенную интеграцию с иерархическими моделями хранения данных. Только за счет использования самых быстрых и самых дорогостоящих аппаратных устройств для размещения исключительно самых активных разделов данных DB2 позволяет оптимизировать общую стоимость хранения и повысить производительность. Если большинство ваших запросов выполняется к данным за последние три месяца, то у вас есть возможность разместить устаревшие данные на более медленных и дешевых аппаратных устройствах.

Увеличенная емкость таблиц: В отсутствие секционирования существуют ограничения на предельный объем данных, которые может вместить объект хранения, а, следовательно, и таблица. Но если разделить содержимое таблицы на несколько объектов хранения, или разделов данных, то каждый из них сможет вместить столько же данных, сколько несекционированная таблица; это позволяет создавать базы данных практически неограниченных размеров.

Большая гибкость в размещении индексов: В DB2 9 индексы секционированных таблиц можно хранить в отдельных объектах хранения (табличных пространствах) в отличие от индексов несекционированных таблиц, которые можно хранить только в самих объектах хранения. Такая гибкость в размещении индексов особенно полезна для ускорения выполнения операций с индексами (таких как удаление индекса, создание индекса в рабочем режиме и перестройка индекса), управления ростом таблиц и уменьшения конфликтов ввода/вывода, что обеспечивает большую эффективность параллельного обращения к данным индекса конкретной таблицы.

"Нам очень понравились некоторые протестированные нами новые функции DB2 9 …Модернизированная операция ALTER TABLE прекрасно выполняет свою задачу, повышает производительность и экономит время. Возможность размещения индексов секционированных таблиц в любой области дискового пространства очень полезна при превышении выделенного табличного пространства."
- Эллен Рейс Клебанер (Ellen Reys-Klebaner), Главный архитектор баз данных, Виза

Создание и использование разделов таблиц

DB2 обеспечивает большую гибкость при создании секционированных таблиц. Допустим, у нас есть годовой объем данных, причем мы хотим секционировать его по срокам, чтобы данные за каждый квартал размещались в отдельном разделе данных. Приведенная ниже синтаксическая конструкция create table демонстрирует простой способ решения этой задачи. Создание разделов данных и управление ими можно осуществлять также через графический интерфейс DB2 Control Center.

CREATE TABLE orders(id INT, shipdate DATE, …)
  PARTITION BY RANGE(shipdate)
    (
    STARTING '01.01.06' ENDING '31.12.06' 
      EVERY 3 MONTHS
    )

Результатом этой команды будет создание таблицы, содержащей четыре раздела, в каждом из которых будут размещены данные за три месяца.

Рисунок 2. Таблица с 4 разделами данных
Таблица с 4 разделами данных

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

CREATE TABLE orders(id INT, shipdate DATE, …)
  PARTITION BY RANGE(shipdate)
    (
  PARTITION 4q05 STARTING MINVALUE,
    PARTITION 1q06 STARTING '01.01.06',
    PARTITION 2q06 STARTING '01.04.06',
    PARTITION 3q06 STARTING '01.07.06',
    PARTITION 4q06 STARTING '01.10.06' 
                  ENDING ‘31.12.06'
    )

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

Предположим, что в созданной в предыдущем примере таблице orders нужно сохранить данные только за один (2006) год. В DB2 9 можно с помощью параметра DETACH выделить в отдельную таблицу раздел, содержащий устаревшие (до 2006 г.) данные.

ALTER TABLE orders 
	DETACH PARTITION qold INTO oldorders

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

// CREATE TABLE neworders
// load / insert desired data into neworders
// transform or cleanse new data if neeeded
  ALTER TABLE orders
  	ATTACH PARTITION 1q07
  	STARTING '01.01.07'
  	ENDING   '31.03.07'
  	FROM TABLE neworders 
// COMMIT 
// SET INTEGRITY …
// COMMIT

Прежде чем свернутые данные станут доступными для приложений, необходимо выполнить инструкцию SET INTEGRITY (чтобы проверить корректность новых данных и обновить глобальные индексы) и зафиксировать задание.

Рисунок 3 демонстрирует свернутые и развернутые разделы данных в таблице orders из предыдущего примера.

Рисунок 3. Свернутые и развернутые разделы данных
Свернутые и развернутые разделы данных

Секционирование таблиц и другие схемы организации данных

В DB2 9 секционирование таблиц может использоваться изолированно или в сочетании с другими схемами организации данных. В каждом выражении инструкции CREATE TABLE предусмотрен специальный алгоритм, позволяющий указать способ организации данных. Следующие три выражения демонстрируют уровни организации данных, которые могут быть использованы в любых сочетаниях:

  • DISTRIBUTE BY -- данные равномерно распределяются по разделам базы данных. Это выражение следует использовать для того, чтобы разрешить параллелизм в пределах запроса и распределить нагрузку между всеми разделами базы данных. Данный принцип известен как секционирование базы данных; в DB2 он реализуется с помощью функции DPF (Database Partitioning Feature, Функция секционирования базы данных);
  • PARTITION BY -- строки с одинаковыми значениями в одном измерении группируются в одном разделе данных. Этот принцип известен как секционирование таблиц;
  • ORGANIZE BY -- строки с одинаковыми значениями в нескольких измерениях группируются в одном табличном экстенте. Этот принцип известен как многомерная кластеризация (MDC).

Описанный выше синтаксис обеспечивает согласование упомянутых выражений и возможность добавления новых алгоритмов организации данных в будущем. Сочетание выражений DISTRIBUTE BY и PARTITION BY в инструкции CREATE TABLE позволяет распределить данные по разделам базы данных с объединением нескольких табличных пространств.

DB2 9 - это первый сервер баз данных, поддерживающий одновременно все три способа группирования данных. Это крупная инновация в сфере управления информацией и доступности информации.

На рисунке 4 показаны различные взаимные сочетания всех трех описанных выше схем организации данных в DB2:

Рисунок 4. Три схемы организации данных в DB2
Три схемы организации данных в DB2

Заключение

Функция секционирования таблиц в DB2 9 представляет собой мощное средство эффективного и быстрого управления крупными объемами данных. Советуем загрузить DB2 9 и оценить преимущества, предлагаемые этой и другими улучшенными функциями новой версии программного пакета, в процессе самостоятельной работы с ними.

Ресурсы

Научиться

Получить продукты и технологии

  • Загрузите DB2 9 и опробуйте ее уже сегодня;
  • Теперь у вас есть возможность использовать DB2 бесплатно. Загрузите DB2 Express-C, бесплатную версию DB2 Express Edition для сообщества разработчиков, которая предлагает все основные возможности работы с данными платной версии DB2 Express Edtion, что обеспечивает солидную основу для создания и размещения приложений;
  • Используйте в следующем проекте по разработке ознакомительные версии ПО IBM , которые можно загрузить непосредственно с портала developerWorks.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=226713
ArticleTitle=Введение в DB2 9: Часть 2. Секционирование таблиц в DB2 9
publish-date=05272007