Высокое потребление памяти при разбиении таблиц hana - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть большая таблица с записями около 4 миллиардов, таблица разбита, но мне нужно снова выполнить разбиение. при этом потребление памяти для системы хана достигло предела 4 ТБ и стало влиять на другие системы.

Как мы можем оптимизировать разбиение, чтобы завершить его, не занимая столько памяти

1 Ответ

1 голос
/ 07 ноября 2019

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

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

Руководство по администрированию предоставляет подсказку для уменьшения количества параллельных потоков:

Параллелизм и потребление памяти
Операции разбиения занимают большой объем памяти,Чтобы уменьшить потребление памяти, можно настроить количество используемых потоков.
Вы можете изменить значение по умолчанию параметра split_threads в разделе partitioning файла конфигурации indexserver.ini.

По умолчанию используется 16 потоков. В случае параллельного раздела / слияния отдельные операции используют общее количество настроенных потоков для каждого хоста. Каждая операция занимает по крайней мере один поток.

Итак, это онлайн-опция для переразметки, если в вашей системе недостаточно памяти для параллельных потоков.

В качестве альтернативы вы можете рассмотретьавтономное повторное разбиение, которое будет включать в себя экспорт таблицы (как CSV!), усечение (!) таблицы, изменение разбиения на теперь пустой таблице и повторный импорт данных.

Обратите внимание, что я написал«усекать», так как это сохранит все привилегии и ссылки на таблицу (представления, синонимы, роли и т. д.), которые будут потеряны, если вы удалите и заново создадите таблицу.

...