Перейти к основному содержимому

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

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

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

Объяснение:

МетрикаНазваниеОписание
processОбщая используемая память BE
query_poolПамять, используемая для запросов данныхСостоит из двух частей: память, используемая уровнем выполнения, и память, используемая уровнем хранения.
loadПамять, используемая для загрузки данныхОбычно MemTable
table_metaПамять метаданныхСхема, метаданные Tablet, метаданные RowSet, метаданные Column, ColumnReader, IndexReader
compactionМноговерсионное сжатие памятиcompaction, которое происходит после завершения импорта данных
snapshotПамять снимковОбычно используется для клонирования, небольшое использование памяти
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 v2.4.
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. При превышении этого порога будет запущена очистка и обратное давление.
load_process_max_memory_limit_percent30Максимальный процент ресурсов памяти, которые могут занимать все процессы загрузки на узле BE. Его значение является меньшим из mem_limit * load_process_max_memory_limit_percent / 100 и load_process_max_memory_limit_bytes. При превышении этого порога будет запущена очистка и обратное давление.
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 секунд. Возможно отслеживать некоторую статистику памяти в старых версиях.