[personal profile] zinal
Для потенциальных и начинающих пользователей Informix Warehouse Accelerator (IWA) - краткая инструкция по применению.

Сперва немного теории...

IWA представляет собой горизонтально масштабируемую систему для ускорения сложных "аналитических" запросов к данным, организованным в соответствии со звездообразной (star) либо snowflake схемой данных.

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

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

Горизонтальное масштабирование IWA обеспечивается автоматическим распределением данных между серверами. Все обрабатываемые данные размещаются в оперативной памяти серверов, отдельная копия хранится на дисках (используется при перезапуске IWA - при старте все данные читаются в оперативную память).

Основная единица управления и хранения данных в IWA - Data Mart, или, для краткости, просто Mart. Каждый Mart представляет собой набор связанных таблиц, одна из которых рассматривается как таблица "фактов", а остальные - таблицы "размерностей". Связи между таблицей "фактов" и таблицами "размерностей" могут не быть созданы как ограничения (constraints) Informix, но должны быть определены при создании Mart. Также в Mart могут быть включены не все колонки исходных таблиц Informix.

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

Средствами IWA обеспечивается ускорение запросов и подзапросов (SELECT, sub-SELECT), которые могут быть выполнены над данными одного Mart (т.е. с использованием таблиц, колонок и связей, входящих в состав одного из существующих Mart).

Ускорение IWA по умолчанию выключено, и может быть явно активировано на уровне пользовательской сессии путём выполнения специальной команды. Есть также команда для выключения ускорения IWA.
Пользовательские запросы поступают на сервер Informix, который проверяет возможность и целесообразность использования IWA, и, при положительном результате проверки, перенаправляет запрос IWA на выполнение.

Теперь практическая часть...

Инсталляция IWA осуществляется в соответствии с документацией. Подключение IWA к серверу Informix осуществляется с использованием OAT (Informix Open Admin Tool), либо с помощью встроенной функции ifx_setupDWA. Параметры вызова определяются путём запуска команды ondwa getpin на стороне сервера IWA.

Краткое описание тестовой таблицы в Informix: 42 колонки, 28 млн. строк, суммарный объем данных 14 Гбайт.

Для таблиц (в нашем случае - одной таблицы), входящей в состав Mart, необходимо подготовить XML-документ с описанием включаемых в состав Mart данных (перечень таблиц, перечень колонок, описание связей). Пример XML-документа приведён в документации, дублирую этот пример здесь:

<?xml version="1.0" encoding="UTF-8" ?>
<dwa:martModel xmlns:dwa="http://www.ibm.com/xmlns/prod/dwa" version="1.0">
<mart name="orders_customer_mart">
<table name="customer" schema="informix" isFactTable="false" >
  <column name="customer_num"/>
  <column name="fname"/>
  <column name="lname"/>
  <column name="state"/>
</table>
<table name="orders" schema="informix" isFactTable="true" >
  <column name="customer_num"/>
  <column name="ship_date"/>
  <column name="ship_weight"/>
</table>
<reference
  referenceType="LEFTOUTER"
  isRuntimeJoin="true"
  parentCardinality="1"
  dependentCardinality="n"
  dependentTableSchema="informix"
  dependentTableName="orders"
  parentTableSchema="informix"
  parentTableName="customer">
   <parentColumn name="customer_num"/>
   <dependentColumn name="customer_num"/>
</reference>
</mart>
</dwa:martModel>

В нашем примере с одной таблицей достаточно указать схему и имя таблицы, установить признак isFactTable=true и перечислить необходимые (все) колонки.

Далее создание Mart, первоначальная загрузка в него данных и настройка автоматической фоновой загрузки новых данных в созданный Mart осуществляется следующими командами:

dbaccess demo -
EXECUTE FUNCTION ifx_createMart('iwa', filetoclob('nl_mart.xml', 'NL_MART'));
EXECUTE FUNCTION ifx_loadMart('iwa', 'nl_mart', 'NONE');
EXECUTE FUNCTION ifx_setupTrickleFeed('iwa', 'nl_mart', 60);

В примере выше:

  • demo - имя базы данных,

  • iwa - имя ускорителя IWA,

  • nl_mart.xml - имя файла с XML-конфигурацией для Mart, размещённого на стороне сервера Informix,

  • nl_mart - имя Mart, прописанное в файле XML-конфигурации в атрибуте name тега mart,

  • ifx_createMart - функция создания нового Mart,

  • ifx_loadMart - функция первичной загрузки данных в Mart,

  • ifx_setupTrickleFeed - функция настройки автоматической фоновой загрузки новых данных в Mart.


Принудительное обновление данных Mart может быть осуществлено следующими командами:

dbaccess demo -
EXECUTE FUNCTION ifx_removeTrickleFeed('iwa', 'nl_mart');
EXECUTE FUNCTION ifx_refreshMart('iwa', 'nl_mart', 'MART', NULL);

В этом примере:

  • ifx_removeTrickleFeed - функция отключения автоматической фоновой загрузки новых данных в Mart (несовместимой с ручным обновлением),

  • ifx_refreshMart - функция обновления данных в Mart.


Ускорение пользовательских запросов с помощью IWA включается с помощью переменной сессии use_dwa:

dbaccess demo -
set environment use_dwa 'accelerate on';
SELECT org1, org2, SUM(pay_all), COUNT(DISTINCT dept) FROM demotab WHERE pay_rev <= 8421
GROUP BY org1, org2 HAVING SUM(pay_all) > 8028151025
ORDER BY SUM(pay_all) DESC;

Время выполнения приведённого выше запроса на системе с 16 процессорными ядрами для нашей таблицы в 28 млн. записей - в пределах 1 секунды.
Без использования IWA даже при использовании специальных мер физической оптимизации схемы данных (набор индексов, партиционирование данных, использование параллелизма выполнения запроса) время выполнения такого запроса будет весьма значительным из-за необходимости сканирования большого объема данных.

Profile

zinal: (Default)
Maksim Zinal

April 2017

M T W T F S S
     12
3456 789
10111213141516
17181920212223
24252627282930

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 22nd, 2017 04:33 am
Powered by Dreamwidth Studios