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は、しばしば同様のクエリが繰り返される場合にクエリのパフォーマンスを大幅に向上させることができます。 |
write_buffer_size | 104857600 | 単一のMemTableの容量制限であり、これを超える場合はディスクへの書き込みが行われます。 |
load_process_max_memory_limit_bytes | 107374182400 | BEノード上のすべてのロードプロセスが占有できるメモリリソースの上限です。この値は |
load_process_max_memory_limit_percent | 30 | BEノード上のすべてのロードプロセスが占有できるメモリリソースの最大パーセンテージです。この値は |
default_load_mem_limit | 2147483648 | シングルインポートインスタンスの受信側のメモリ制限に達すると、ディスクへの書き込みがトリガされます。 これを有効にするには、セッション変数 |
max_compaction_concurrency | -1 | コンパクションの最大同時実行数(Base CompactionおよびCumulative Compactionの両方)です。値-1は、並行性に上限がないことを示します。 |
cumulative_compaction_check_interval_seconds | 1 | コンパクションのチェック間隔 |
- セッション変数
名前 | デフォルト値 | 説明 |
---|---|---|
query_mem_limit | 0 | 各バックエンドノードのクエリのメモリ制限 |
load_mem_limit | 0 | 単一のインポートタスクのメモリ制限。値が0の場合、 |
メモリ使用状況の表示
- 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秒ごとに更新されます。古いバージョンでもいくつかのメモリ統計を監視することが可能です。