Перейти к основному содержимому
Версия: 2.0.x

Управление памятью

В этом разделе кратко описаны классификация памяти и методы управления памятью в Selena.

Классификация памяти

Описание:

МетрикаНазваниеОписание
processОбщая используемая память BE
query_poolПамять, используемая для выполнения запросовСостоит из двух частей: память, используемая на уровне выполнения, и память, используемая на уровне хранения.
loadПамять, используемая для загрузки данныхОбычно MemTable
table_metaПамять метаданныхSchema, метаданные Tablet, метаданные RowSet, метаданные Column, ColumnReader, IndexReader
compactionCompaction многоверсионной памятиcompaction, которая происходит после завершения импорта данных
snapshotПамять снимковОбычно используется для clone, малое потребление памяти
column_poolПамять пула столбцовЗапрос на освобождение кэша столбцов для ускорения работы со столбцами
page_cacheСобственный PageCache BEПо умолчанию отключён, пользователь может включить его, изменив файл BE

Конфигурация, связанная с памятью

  • Конфигурация BE
НазваниеПо умолчаниюОписание
vector_chunk_size4096Количество строк в chunk
mem_limit90%Верхний предел памяти процесса BE. Вы можете установить его как процент ("80%") или физический лимит ("100G"). Жёсткий лимит по умолчанию составляет 90% от размера памяти сервера, а мягкий лимит — 80%. Вам необходимо настроить этот параметр, если вы хотите развернуть Selena вместе с другими сервисами, интенсивно использующими память, на одном сервере.
disable_storage_page_cachefalseЛогическое значение для управления отключением PageCache. Когда PageCache включён, Selena кэширует недавно просканированные данные. PageCache может значительно улучшить производительность запросов при частом повторении похожих запросов. true указывает на отключение PageCache. Используйте этот элемент вместе с storage_page_cache_limit для ускорения производительности запросов в сценариях с достаточными ресурсами памяти и большим объёмом сканирования данных. Значение по умолчанию этого элемента было изменено с true на false начиная с Selena v1.5.2.
write_buffer_size104857600Лимит ёмкости одного MemTable, при превышении которого выполняется сброс на диск.
load_process_max_memory_limit_bytes107374182400Верхний предел ресурсов памяти, которые могут быть заняты всеми процессами загрузки на узле BE. Его значение — меньшее из mem_limit * load_process_max_memory_limit_percent / 100 и load_process_max_memory_limit_bytes. Если этот порог превышен, запускается flush и обратное давление.
load_process_max_memory_limit_percent30Максимальный процент ресурсов памяти, которые могут быть заняты всеми процессами загрузки на узле BE. Его значение — меньшее из mem_limit * load_process_max_memory_limit_percent / 100 и load_process_max_memory_limit_bytes. Если этот порог превышен, запускается flush и обратное давление.
default_load_mem_limit2147483648Если лимит памяти на принимающей стороне достигнут для одного экземпляра импорта, запускается сброс на диск. Это необходимо изменить с помощью переменной сессии load_mem_limit для вступления в силу. Этот параметр является изменяемым, когда включена Event-based Compaction Framework.
max_compaction_concurrency-1Максимальный параллелизм compaction (как Base Compaction, так и Cumulative Compaction). Значение -1 указывает, что ограничение на параллелизм не накладывается.
cumulative_compaction_check_interval_seconds1Интервал проверки compaction
  • Переменные сессии
НазваниеПо умолчаниюОписание
query_mem_limit0Лимит памяти запроса на каждом узле BE
load_mem_limit0Лимит памяти одной задачи импорта. Если значение равно 0, берётся exec_mem_limit

Просмотр использования памяти

  • mem_tracker
//Просмотр общей статистики памяти
<http://be_ip:be_http_port/mem_tracker>

// Просмотр детальной статистики памяти
<http://be_ip:be_http_port/mem_tracker?type=query_pool&upper_level=3>
  • tcmalloc
<http://be_ip:be_http_port/memz>
------------------------------------------------
MALLOC: 777276768 ( 741.3 MiB) Bytes in use by application
MALLOC: + 8851890176 ( 8441.8 MiB) Bytes in page heap freelist
MALLOC: + 143722232 ( 137.1 MiB) Bytes in central cache freelist
MALLOC: + 21869824 ( 20.9 MiB) Bytes in transfer cache freelist
MALLOC: + 832509608 ( 793.9 MiB) Bytes in thread cache freelists
MALLOC: + 58195968 ( 55.5 MiB) Bytes in malloc metadata
MALLOC: ------------
MALLOC: = 10685464576 (10190.5 MiB) Actual memory used (physical + swap)
MALLOC: + 25231564800 (24062.7 MiB) Bytes released to OS (aka unmapped)
MALLOC: ------------
MALLOC: = 35917029376 (34253.1 MiB) Virtual address space used
MALLOC:
MALLOC: 112388 Spans in use
MALLOC: 335 Thread heaps in use
MALLOC: 8192 Tcmalloc page size
------------------------------------------------
Call ReleaseFreeMemory() to release freelist memory to the OS (via madvise()).
Bytes released to the OS take up virtual address space but no physical memory.

Память, запрашиваемая этим методом, является точной. Однако некоторая память в Selena зарезервирована, но не используется. TcMalloc подсчитывает зарезервированную память, а не используемую.

Здесь Bytes in use by application относится к памяти, которая в данный момент используется.

  • metrics
curl -XGET http://be_ip:be_http_port/metrics | grep 'mem'
curl -XGET http://be_ip:be_http_port/metrics | grep 'column_pool'

Значение metrics обновляется каждые 10 секунд. Возможно отслеживать некоторые статистики памяти со старыми версиями.