[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 даже при использовании специальных мер физической оптимизации схемы данных (набор индексов, партиционирование данных, использование параллелизма выполнения запроса) время выполнения такого запроса будет весьма значительным из-за необходимости сканирования большого объема данных.
From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org


 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.

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. 23rd, 2017 06:45 pm
Powered by Dreamwidth Studios