База знаний

Вы можете подписаться на эту колонки этого автора, если авторизируетесь или зарегистрируетесь

Дельта-слияние (Delta Merge) в HANA (ч.1)

14 января 2019, 00:00

Введение

Внедрение SAP HANA требует понимания процедуры обработки изменения данных в колончатых таблицах HANA, что позволяет гибко оперировать настройками и достигать требуемой производительности системы.

Колончатое хранение данных

Колончатые таблицы включают индексы двух типов: для всех столбцов существует основной индекс (Main index) и дельта индекс (Delta index). В памяти HANA для каждой колончатой таблицы одновременно "живут" два объекта: дельта хранилище (Delta storage), оптимизированное для операций записи и основное хранилище (Main storage), оптимизированное для операций чтения. Использование дельта-таблиц решает проблемы производительности при загрузке непосредственно в сжатые столбцы.

Операции чтения выполняются для обеих частей, тогда как операции записи выполняются только в дельта-часть. Для оптимизации производительности и сжатия данных, необходимо перенести данные из дельта-части в основную часть. Этот процесс называется дельта-слиянием.

Дельта-слияние (Delta Merge)

Модель дельта-сляния данных:

Шаг 1: Слияние

Состояние перед операцией слияния (Before Delta Merge):

  • Все операции записи выполняются в хранилище Delta1
  • Все операции чтения читаются из хранилищ Main1 и Delta1.

Во время операции слияния (During Merge):

  • Во время выполнения операции слияния все изменения попадают во второе дельта-хранилище, Delta2.
  • Операции чтения считываются из исходного основного хранилища Main1 и из обоих хранилищ delta, Delta1 и Delta2.
  • Незавершенные изменения в Delta1 копируются в Delta2.
  • Содержимое Main1 и подтвержденные записи в Delta1 объединяются в новое основное хранилище Main2.

После операции слияния (After Merge):

  • После объединения хранилища Main1 и Delta1 удаляются.

Шаг 2: Оптимизация

После успешного завершения слияния ядро вычисляет оптимизированные параметры сжатия. Движок HANA немедленно перезагружает любой столбец в память, если в ходе слияния для него что-то изменилось.

Важным моментом, на который необходимо обратить внимание, является слияние данных для партицированных таблиц. Перед перепартицированием таблиц обязательно выполняется дельта-слияние. Нужно это учитывать чтобы не допустить исчерпания памяти во время объединения больших таблиц.

Типы дельта-слияний

Автоматическое слияние (Auto Merge) (по умолчанию) - используется системный процесс с именем «Mergedog», который периодически проверяет колончатые таблицы, для каждой отдельной таблицы (или отдельного раздела разделенного хранилища) определяется, должно ли слияние выполняться на основе настроенных критериев. Рекомендуется отключать автоматическое объединение при загрузке больших таблиц и включить его снова после загрузки больших объемов данных в таблицы.

Гибкое слияние (Smart merge) - позволяет управлять слиянием с помощью команды SQL. При получении команды, HANA определяет, должно ли быть выполнено дельта-слияние, оценивая достижение параметров заданных в функции принятия решения по дельта-слияния из indexserver.ini (описание ниже).

Например, если приложение загружает относительно большие объемы данных, дельта-слияние во время загрузки может оказать негативное влияние на производительность, нагрузку и работу пользователей системы. Можно отключить автоматическое слияние для загружаемых таблиц и по завершению процесса загрузки отправить сообщение для начала слияния.
Синтаксис SQL:
MERGE DELTA OF <table_name> WITH PARAMETERS ('SMART_MERGE'='ON' | ‘OFF’)
При получении сообщения о завершении загрузки, в HANA происходит:

  •  Оценивается достижение системных параметров, настроенных для процесса «гибкого слияния»
  •  Если параметры достигнуты, слияние выполняется
  •  Если параметры не достигнуты, никаких дальнейших действий не предпринимается, и только следующее сообщение от приложения вызовет новую итерацию оценки достижения параметров.

Для таблиц, применительно к которым будет производится гибкое слияние необходимо отключать автоматическое слияние.

Слияние в памяти (Memory merge) - выполняется с помощью оператора SQL с необязательным параметром, который предписывает системе выполнять слияние только в памяти. Как следствие, изменения не записываются на уровень "Main", а уровень "Delta" не очищается.
Синтаксис SQL:
MERGE DELTA OF 'tableName' WITH PARAMETERS ('MEMORY_MERGE' = 'ON' | ‘OFF’)

Жесткое слияние (Hard merge) - жесткое слияние выполняется с помощью оператора SQL и указывает серверу выполнить дельта-слияние без анализа параметров конфигурации слияния. При жестком объединении учитывает концепцию токена (см ниже).
Синтаксис SQL:
MERGE DELTA OF 'tableName'

Принудительное слияние (Forsed merge) - похоже на жесткое слияние. Команда собщает системе, что дельта-хранилище должно быть объединено без учета любых других факторов, таких как доступность системных ресурсов, размер дельта-хранилища и т.д. Принудительное объединение может быть полезно в ситуации, когда существует большая нагрузка на систему, но требуется небольшая таблица, отсутствие объединения данных которой, или если объединение было пропущенно, отрицательно влияют на производительность системы.
Синтаксис SQL:
MERGE DELTA OF '<table_name>' WITH PARAMETERS ('FORCED_MERGE' = 'ON'|’OFF’)

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

Концепция токенов, а также правила управления параметрами настроек и функций определения достижения критериев слияния будут рассмотрены в дальнейших материалах.

Архитектор решений SAP BI
Муковоз И.С.

Ролевое назначение : SAP Консультант / Consultant

Функциональная область : Бизнес аналитика / BI, SAP HANA / SAP HANA

Ключевые слова : Дельта обновление в SAP HANA / Delta Merge in SAP HANA