メインコンテンツまでスキップ

Memory management

メモリ管理

このセクションでは、メモリの分類とStarRocksのメモリ管理方法について簡単に紹介します。

メモリの分類

説明:

メトリック

名前

説明

process

BEが使用する合計メモリ

query_pool

データクエリの使用メモリ

実行層とストレージ層の2つの部分から構成されます。

load

データロードの使用メモリ

一般的にはMemTableです。

table_meta

メタデータメモリ

Sスキーマ、Tabletメタデータ、RowSetメタデータ、Columnメタデータ、ColumnReader、IndexReader

compaction

マルチバージョンメモリコンパクション

データのインポートが完了した後に発生するコンパクションです。

snapshot

スナップショットメモリ

一般的にはクローンのために使用され、メモリ使用量は少ないです。

column_pool

カラムプールメモリ

高速化されたカラムのためのカラムキャッシュの解放を要求します。

page_cache

BE独自のPageCache

デフォルトはオフであり、ユーザーはBEファイルを変更してオンにすることができます。

メモリ関連の設定

  • BEの設定

名前

デフォルト値

説明

vector_chunk_size

4096

チャンクの行数

mem_limit

80%

BEが使用できる合計メモリの割合です。単体でデプロイされる場合は設定する必要はありません。他のメモリを消費するサービスと一緒にデプロイされる場合は、個別に設定する必要があります。

disable_storage_page_cache

false

PageCacheを無効にするかどうかを制御するブール値です。PageCacheは、最近スキャンされたデータをキャッシュするStarRocksです。PageCacheは、しばしば同様のクエリが繰り返される場合にクエリのパフォーマンスを大幅に向上させることができます。trueはPageCacheを無効にすることを示します。この項目はstorage_page_cache_limitと共に使用し、十分なメモリリソースと多くのデータスキャンが存在するシナリオでクエリのパフォーマンスを加速することができます。StarRocks v2.4以降、この項目のデフォルト値はtrueからfalseに変更されました。

write_buffer_size

104857600

単一のMemTableの容量制限であり、これを超える場合はディスクへの書き込みが行われます。

load_process_max_memory_limit_bytes

107374182400

BEノード上のすべてのロードプロセスが占有できるメモリリソースの上限です。この値はmem_limit * load_process_max_memory_limit_percent / 100load_process_max_memory_limit_bytesのうち小さい方です。この閾値を超えると、フラッシュとバックプレッシャーがトリガされます。

load_process_max_memory_limit_percent

30

BEノード上のすべてのロードプロセスが占有できるメモリリソースの最大パーセンテージです。この値はmem_limit * load_process_max_memory_limit_percent / 100load_process_max_memory_limit_bytesのうち小さい方です。この閾値を超えると、フラッシュとバックプレッシャーがトリガされます。

default_load_mem_limit

2147483648

シングルインポートインスタンスの受信側のメモリ制限に達すると、ディスクへの書き込みがトリガされます。 これを有効にするには、セッション変数 load_mem_limit とともに変更する必要があります。

max_compaction_concurrency

-1

コンパクションの最大同時実行数(Base CompactionおよびCumulative Compactionの両方)です。値-1は、並行性に上限がないことを示します。

cumulative_compaction_check_interval_seconds

1

コンパクションのチェック間隔

  • セッション変数

名前

デフォルト値

説明

query_mem_limit

0

各バックエンドノードのクエリのメモリ制限

load_mem_limit

0

単一のインポートタスクのメモリ制限。値が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) アプリケーションで使用中のバイト数
MALLOC: + 8851890176 ( 8441.8 MiB) ページヒープフリーリストでのバイト数
MALLOC: + 143722232 ( 137.1 MiB) セントラルキャッシュフリーリストでのバイト数
MALLOC: + 21869824 ( 20.9 MiB) 転送キャッシュフリーリストでのバイト数
MALLOC: + 832509608 ( 793.9 MiB) スレッドキャッシュのフリーリストでのバイト数
MALLOC: + 58195968 ( 55.5 MiB) mallocメタデータのバイト数
MALLOC: ------------
MALLOC: = 10685464576 (10190.5 MiB) 実際に使用されているメモリ(物理的なメモリ+スワップ)
MALLOC: + 25231564800 (24062.7 MiB) OSにリリースされたバイト数(アンマップされたもの)
MALLOC: ------------
MALLOC: = 35917029376 (34253.1 MiB) 使用されている仮想アドレススペース
MALLOC:
MALLOC: 112388 使用中のスパン
MALLOC: 335 使用中のスレッドヒープ
MALLOC: 8192 Tcmallocのページサイズ
------------------------------------------------
ReleaseFreeMemory()を呼び出して、フリーリストメモリをOSに解放します(madvise()を介して)。OSにリリースされたバイトは仮想アドレススペースを使用しますが、物理メモリは使用しません。

この方法で問い合わせるメモリは正確です。ただし、StarRocksの一部のメモリは予約されているが使用されていない場合があります。TcMallocは、予約されたメモリを数えますが、使用されていないメモリを数えません。

ここで アプリケーションで使用中のバイト数 は現在使用中のメモリを指します。

  • メトリクス
curl -XGET http://be_ip:be_http_port/metrics | grep 'mem'
curl -XGET http://be_ip:be_http_port/metrics | grep 'column_pool'

メトリクスの値は10秒ごとに更新されます。古いバージョンでもいくつかのメモリ統計を監視することが可能です。