Не смотря на то, что современные системы управления базами данных (СУБД) совершенствуются с точки зрения быстродействия, время доступа к данным для ряда задач оказывается недостаточным даже при высоком уровне производительности аппаратной платформы. Например, в системах, обрабатывающих большой поток запросов (т.е. с точки зрения базы данных — огромное количество операций «вставка/удаление») быстродействия стандартных решений оказывается недостаточно, а попытки оптимизировать не дают значительного эффекта. К тому же, оптимизация быстродействия средствами самой СУБД, как правило, производится за счет надежности, что может оказаться недопустимым [ 1-2 ].
Решением проблемы может оказаться применение технологии Oracle TimesTen In-Memory Database Cache (IMDB). TimesTen – это СУБД, использующая для хранения и обработки данных оперативную память. TimesTen может применяться как отдельная база данных, так и в связке с СУБД Oracle (мастер-БД), выполняя роль высокопроизводительного интеллектуального кэша.
Основные отличия Times Ten от обычных СУБД [2-3 ]:
— высокая пропускная способность;
— низкая задержка (обновление записи за 15 микросекунд);
— практически мгновенная доступность;
— гарантированная целостность данных.
Используя оптимизированные структуры для работы именно в оперативной памяти, Oracle TimesTen позволяет получить очень маленькое время отклика (микросекунды) и высокую пропускную способность. Известно, что в современных информационных системах наиболее критичными с точки зрения быстродействия являются операции дискового чтения/записи. Так как оперативная память многократно быстрее, чем дисковая, то TimesTen позволяет обрабатывать запросы гораздо быстрее, чем традиционные СУБД. Применяя TimesTen, часть нагрузки переносится в оперативную память, повышая таким образом, общее быстродействие системы. Кроме того, благодаря размещению хранилища данных целиком в оперативной памяти, отпадает ряд операций, присущих стандартным СУБД, как например преобразование логических адресов в физические на диске, управление буферным кэшем. Таким образом, повышение быстродействия достигается не только благодаря физическим свойствам оперативной памяти, но и меньшему использованию процессорного времени для одинаковых операций.
TimesTen IMDB наиболее часто применяется в следующих отраслях:
— биржевая торговля (Nasdaq) [5];
— биллинг, сети и телекоммуникации (Cisco) [5];
— высоконагруженные системы отчетности (Oracle Exalytics In-Memory Machine компании ФОРС, Россия) [4];
— банковская сфера (Deutsche Bank, J.P. Morgan) [5]
Большая часть информации в корпоративных базах данных относится к прошлым периодам и запрашивается нечасто. Однако среди этих масс данных находится информация, мгновенный доступ к которой бывает не только целесообразен, но даже необходим. В качестве примеров можно привести список заказчиков предприятия (или абонентов) и каталог продуктов, которые изменяются сравнительно редко, и данные о его недавних транзакциях, которые изменяются довольно часто. Кроме того, существует история транзакций абонента и исторические данные о его платежном балансе – данные, которые используются сравнительно редко. Таким образом, данные, используемые приложением можно разделить на две части: историческую и оперативную. Оперативные данные используются часто и должны быть доступны в реальном времени. Исторические используются в отчетах и не требует такой высокой доступности.
Суть оптимизации производительности информационной системы с использованием Oracle In-Memory Database Cache заключается в кэшировании оперативной (а также части необходимой исторической) информации и управление ею в базах данных TimesTen, размещенных в оперативной памяти. TimesTen обеспечивает возможность доступа к данным в реальном времени, а также автоматическую синхронизацию данных между кэшем в оперативной памяти и СУБД Oracle.
Рис 1. Архитектура TimesTen IMDB Cache
Рассмотрим архитектуру TimesTen IMDB. Базу данных, расположенную в памяти принято называть хранилищем данных TimesTen. Дисковым представлением хранилища данных является файл контрольной точки (checkpoint file). При запуске TimesTen в память загружается содержимое файла контрольной точки как начальное состояние хранилища. Последующие действия с данными происходят в оперативной памяти. Промежуточные состояния хранилища сохраняются в файле контрольной точки, периодически и асинхронно. Кроме того, действия над данными так же фиксируются в журналах транзакций (transaction logs). В случае, если хранилище аварийно останавливается, то при восстановлении в память будет прочитан файл контрольной точке, а затем применены последующие транзакции, сохраненные в журнале.
Взаимодействие с мастер-базой данных Oracle осуществляется с помощью агентов кэша (Cache daemon) и репликации (Replication daemon) посредством ODBC. Наконец, приложение App взаимодействует с TimesTen через предустановленные на клиентской стороне специальные библиотеки TimesTen IMDB.
TimesTen предоставляет возможность работы с двумя типами структур данных для кэширования:
- Read-only Cache group, кэш только для чтения, данные читаются приложением из TimesTen, изменяются напрямую в Oracle, изменения инкрементально передаются из Oracle в TimesTen). Используется для представления справочников — данных, к которым требуется обеспечить быстрый доступ для чтения и которые изменяются относительно редко;
- Asynchronous Write-Through Cache group, асинхронный изменяемый кэш (изменения делаются в TimesTen и передаются в Oracle).
Кэш-группы представляют собой реляционные структуры, работа с данными в них аналогична работе с таблицами обычной СУБД (см. Листинг 1,2).
Для больших таблиц может быть применена технология эйджинга (agings). Кэшируемые данные могут загружаться по мере необходимости и выталкиваются из кэша по мере устаревание — aging. Синхронизация с Oracle выполняется автоматически и можно настроить различные ее режимы: синхронная и асинхронная.
Приведем возможный алгоритм внедрения TimesTen IMDB. В качестве примера рассмотрим биллинговую информационную систему, работающую по модели Postpaid. Суть биллинга – сбор и обработка информации об указанных за некий период услуг (в частности, телекоммуникационных) абоненту с целью их тарификации, выставления абоненту счета и обработки информации о платежах. Postpaid означает, что услуги абоненту предоставляется заранее, а затем абонент получает счет за предоставленные услуги за некий период. Неотъемлемой частью биллингового бизнес-процесса является так называемый рейтинг, то есть определение стоимости оказанной абоненту услуги согласно его тарифного плана. Физически процесс заключается в обработке большого массива файлов, содержащих информацию о звонках, смс-сообщениях и GPRS-сессиях. Задача рейтинга – соотнести указанные события конкретному абоненту, определить стоимость события в зависимости от местоположения абонента, его тарифного плана и т.д. Современные биллинговые системы позволяют реализовывать довольно востребованную услугу – предоставлении информации о текущем балансе абонента, что означает оперативную обработку огромного количества записей. Очевидно, что процесс рейтинга создает значительную нагрузку на СУБД, что во время пиковых нагрузок угрожает работоспособности информационной системы в целом, поэтому было принято решение использовать TimesTen IMDB для оптимизации.
- В первую очередь, на этапе проектирования информационной системы следует определить, какие данные из мастер-БД будут представлены в высокопроизводительном кэше, реализуемом на платформе TimesTen. Далее, указанные данные следует разделить на исторические (справочные), которые будут представлены как Read-only Cache group, и оперативные, представляемые в виде Write-Through Cache group. В нашем случае следует определить, к каким таблицам мастер-БД процесс рейтинга обращается чаще всего для чтения (например — таблицы, содержащие информацию о тарифных планах, которая меняется относительно редко), а также таблицы, содержимое которых будет изменяться часто (например, данные о балансах абонентов).
2.На этапе установки TimesTen следует определить режим, в котором будет функционировать IMDB. Программа установки предлагает два варианта, следует использовать «Oracle In-Memory Database Cache».
- После установки и настраивается соединение с мастер-БД в конфигурационном файле sys.odbc.ini.
- После установки TimesTen в пока еще пустом хранилище данных создаются заранее определенные группы кэша только для чтения (см. Листинг 1) и асинхронного изменяемого кэша, (см. Листинг 2).
- Для оптимизации доступа к данным кэш-групп TimesTen предоставляет механизм индексации. Следует помнить, что построение индексов следует производить при отключенном агенте кэширования. Агент отключается следующей командой: ttAdmin –cacheStop <instance name>.
- После построения кэш-групп следует активизировать кэш-агента и репликацию: ttAdmin -cacheStart <instance name>, ttAdmin -repStart <instance name>.
Таким образом, в результате внедрения TimesTen IMDB для оптимизации работы процесса рейтинга был получен значительный прирост производительности биллинговой системы. Оценивая производительность предыдущей версии системы и современной, использующей TimesTen на сравнимых объемах данных, сделан вывод о практически десятикратном приросте производительности. Так, за время, ранее требовавшееся для обработки 275000 событий система новой версии обрабатывает 2500000 событий. При незначительном увеличении затрат на лицензирование компания избавилась от рисков, связанных со срывом сроков договора на поставку услуг (обработка данных и выставление счетов абонентам компании-клиента) и сопутствующих штрафных санкций.
Литература
- April Sims. Oracle Database 11g — Underground Advice for Database Administrators // Packt Publishing, 2010, 384 c.
- Sam Alapati, Darl Kuhn, Bill Padfield. Oracle Database 11g Performance Tuning Recipes: A Problem-Solution Approach // Apress, 2011, 585 c.
- Oracle, Inc. Oracle TimesTen In-Memory Database and Oracle In-Memory Database Cache
- Компания ФОРС, https://www.fors.ru/upload/ppt/111212/Oracle%20Exalytics_11Dec2012.pdf
- The Register https://www.theregister.co.uk/
Листинг 1
Пример DDL предложения для создания кэш-группы только для чтения в TimesTen с названием TT_ BALANCE_MAP из таблицы BALANCE_MAP мастер-БД с первичным ключом по полю BAL_MAP_UID, с автоматическим инкрементальным обновлением с периодом 3 секунды:
create readonly cache group TT_ BALANCE_MAP
autorefresh
mode incremental
interval 300000 milliseconds
state on
from
BALANCE_MAP (
BAL_MAP_UID NUMBER(20, 0) NOT NULL,
ACCOUNT_NO NUMBER(11, 0) NOT NULL,
EQUIP_UID NUMBER(11, 0),
BALANCE_UID NUMBER(20, 0) NOT NULL,
INITIAL_BALANCE NUMBER(20, 0) NOT NULL,
START_DT DATE NOT NULL,
END_DT DATE,
LOCKED_YN CHAR(1) NOT NULL
ORDERING_DT DATE NOT NULL,
EQUIP_UID NUMBER(11, 0)
DAEMON_YN CHAR(1) NOT NULL,
PRIMARY KEY (BAL_MAP_UID)
);
Листинг 2
Пример DDL предложения для создания изменяемой кэш-группы сквозной записи в TimesTen с названием TT_GSM_CALL_FILES с асинхронной репликацией для таблицы GSM_CALL_FILES мастер-БД с составным первичным ключом по полям CORRESPONDENT_UID, TRANSFER_TYPE, TRANSFER_NO:
create asynchronous writethrough cache group TT_GSM_CALL_FILES
FROM
GSM_CALL_FILES (
CORRESPONDENT_UID NUMBER(11) NOT NULL,
TRANSFER_TYPE CHAR(2 BYTE) NOT NULL,
TRANSFER_NO NUMBER(11) NOT NULL,
STATUS_CD CHAR(2 BYTE) NOT NULL,
START_DT DATE NOT NULL,
COMPLETE_DT DATE,
HEADER_START_DT DATE,
HEADER_END_DT DATE,
FILENAME CHAR(30 BYTE) NOT NULL,
TAP_CUT_OFF_DT DATE,
PRIMARY KEY (CORRESPONDENT_UID,TRANSFER_TYPE,TRANSFER_NO));[schema type=»book» name=»ОПТИМИЗАЦИЯ БЫСТРОДЕЙСТВИЯ НФОРМАЦИОННОЙ СИСТЕМЫ С ИСПОЛЬЗОВАНИЕМ ORACLE TIMESTEN IN-MEMORY DATABASE CACHE» author=»Шепелин Виктор Аркадьевич, Степанов Константин Григорьевич» publisher=»БАСАРАНОВИЧ ЕКАТЕРИНА» pubdate=»2017-06-19″ edition=»ЕВРАЗИЙСКИЙ СОЮЗ УЧЕНЫХ_ 30.12.2014_12(09)» ebook=»yes» ]