StarRocks Backend (BE) ノードは、詳細なメモリメトリックを公開し、各ワークロードカテゴリが消費できるメモリ量を制御する構成パラメーターを受け付けます。本トピックでは、メモリ使用量のカテゴリ、BE およびセッションの構成パラメーターについて説明し、ランタイムにおけるメモリ使用量の確認方法を示します。
メモリ使用量のカテゴリ
各 BE は、以下のカテゴリごとにメモリ消費量を追跡します。これらのメトリックは /metrics エンドポイントで公開されており、mem_tracker インターフェイスでも確認できます。
| ラベル | メトリック名 | 説明 | BE 構成パラメーター |
|---|---|---|---|
process | starrocks_be_process_mem_bytes | 予約済みの空きメモリを除いた、BE プロセスが実際に使用しているメモリ量 | mem_limit |
query_pool | starrocks_be_query_mem_bytes | BE のクエリレイヤーが使用する合計メモリ量 | 該当なし |
load | starrocks_be_load_mem_bytes | インポートタスクが使用する合計メモリ量 | load_process_max_memory_limit_bytes、load_process_max_memory_limit_percent |
table_meta | starrocks_be_tablet_meta_mem_bytes | メタデータが使用する合計メモリ量 | 該当なし |
compaction | starrocks_be_compaction_mem_bytes | マルチバージョンメモリコンパクションが使用する合計メモリ量 | compaction_max_memory_limit、compaction_max_memory_limit_percent |
column_pool | starrocks_be_column_pool_mem_bytes | ストレージレイヤーにおけるデータ読み取りを高速化するために使用されるカラムプールのメモリ量 | 該当なし |
page_cache | starrocks_be_storage_page_cache_mem_bytes | BE のストレージレイヤーにおけるページキャッシュ | disable_storage_page_cache、storage_page_cache_limit |
chunk_allocator | starrocks_be_chunk_allocator_mem_bytes | CPU コアごとのキャッシュで、小規模メモリチャンクの割り当てを高速化 | chunk_reserved_bytes_limit |
consistency | starrocks_be_consistency_mem_bytes | 定期的な整合性チェックタスクが使用するメモリ量 | consistency_max_memory_limit、consistency_max_memory_limit_percent |
schema_change | starrocks_be_schema_change_mem_bytes | スキーマ変更タスクが使用する合計メモリ量 | memory_limitation_per_thread_for_schema_change |
clone | starrocks_be_clone_mem_bytes | タブレットクローンタスクが使用する合計メモリ量 | 該当なし |
update | starrocks_be_update_mem_bytes | プライマリキー モデルが使用する合計メモリ量 | 該当なし |
BE のメモリ構成パラメーターの変更
EMR コンソールで BE のメモリ構成パラメーターを追加または変更するには、次の手順を実行します。
ECS 上の EMR ページで、StarRocks クラスターを見つけ、[操作] 列の サービス をクリックします。
サービス タブで、StarRocks セクションの 構成 をクリックします。
構成 タブで、be.conf タブをクリックします。
既存のパラメーターを変更するか、設定項目を追加 をクリックして新しいパラメーターを追加します。
詳細については、「設定項目の管理」をご参照ください。
メモリ構成パラメーター
BE 構成パラメーター
以下のパラメーターは be.conf で設定します。
| パラメーター | デフォルト値 | 説明 |
|---|---|---|
mem_limit | 90 % | BE が使用できるサーバー全体のメモリの最大割合。ハードリミットは 90 %、ソフトリミットは 80 % です。BE が他のメモリ集約型サービスとサーバーを共有する場合は、この値を下げてメモリ競合を回避してください。 |
load_process_max_memory_limit_bytes | 107,374,182,400 | インポートタスクが合計で使用できる最大メモリ量(バイト単位)。有効なリミットは min(mem_limit × load_process_max_memory_limit_percent / 100, load_process_max_memory_limit_bytes) です。このリミットに達すると、StarRocks はディスクへのフラッシュをトリガーし、バックプレッシャーを適用してデータ取り込み速度を低下させます。 |
load_process_max_memory_limit_percent | 30 | mem_limit のうち、インポートタスクが合計で使用できる最大割合。 load_process_max_memory_limit_bytes と併用され、計算された小さい方の値が有効になります。 |
compaction_max_memory_limit | -1 | コンパクションタスクが使用できる最大メモリ量(バイト単位)。有効なリミットは min(mem_limit × compaction_max_memory_limit_percent / 100, compaction_max_memory_limit) です。デフォルト値 -1 は制限なしを意味します。コンパクションによるメモリ消費が過剰でない限り、デフォルト値を維持してください。リミットを超えると、コンパクションタスクは失敗します。 |
compaction_max_memory_limit_percent | 100 | mem_limit のうち、コンパクションタスクが使用できる最大割合。 compaction_max_memory_limit と併用され、計算された小さい方の値が有効になります。 |
disable_storage_page_cache | true | ストレージレイヤーのページキャッシュを無効化するかどうか。メモリが十分に確保でき、クエリが大量のデータを繰り返しスキャンする場合に、false に設定することでページキャッシュを有効化できます。これにより、クエリパフォーマンスが大幅に向上する可能性があります。storage_page_cache_limit と併用して、キャッシュサイズの上限を設定してください。 |
storage_page_cache_limit | 0 | ストレージレイヤーのページキャッシュに割り当てる最大メモリ量。 disable_storage_page_cache が false の場合にのみ有効です。 |
chunk_reserved_bytes_limit | 2,147,483,648 | 小規模メモリチャンクの割り当てを高速化するために使用される CPU コアごとのキャッシュの最大メモリ量。デフォルト値は 2,147,483,648 バイト(2 GB)です。メモリが十分に確保でき、割り当てオーバーヘッドを削減したい場合は、この値を増加させてください。 |
consistency_max_memory_limit | 10 G | 整合性チェックタスクが使用できる最大メモリ量。有効なリミットは min(mem_limit × consistency_max_memory_limit_percent / 100, consistency_max_memory_limit) です。リミットを超えると、整合性チェックタスクは失敗します。 |
consistency_max_memory_limit_percent | 20 | mem_limit のうち、整合性チェックタスクが使用できる最大割合。 consistency_max_memory_limit と併用され、計算された小さい方の値が有効になります。 |
memory_limitation_per_thread_for_schema_change | 2 | スキーマ変更タスクのスレッドあたりのメモリ制限。この制限を超えると、スキーマ変更タスクは失敗します。 |
tc_use_memory_min | 10,737,418,240 | TCMalloc に予約する最小メモリ量。TCMalloc の予約メモリがこのしきい値を下回ると、StarRocks はオペレーティングシステムに空きメモリを返却しなくなります。 |
セッション変数
以下の変数はセッション単位で適用され、SET 文で設定できます。
| 変数 | デフォルト値 | 説明 |
|---|---|---|
exec_mem_limit | 2,147,483,648 | 単一クエリインスタンスに対するメモリ制限(バイト単位)。 |
load_mem_limit | 0 | 単一インポートタスクに対するメモリ制限(バイト単位)。デフォルト値 0 は、exec_mem_limit の値が使用されることを意味します。 |
メモリ使用量の確認
メトリックインターフェイスの使用
メトリックエンドポイントは 10 秒ごとに更新されます。以下のコマンドを実行して、すべての BE メモリメトリックを取得します。
# BE のデフォルト Web サーバーポートは 8040 です。
curl -XGET -s http://<BE_IP>:8040/metrics | grep "^starrocks_be_.*_mem_bytes\|^starrocks_be_tcmalloc_bytes_in_use"各メトリックの説明については、「メモリ使用量のカテゴリ」をご参照ください。
mem_tracker インターフェイスの使用
mem_tracker インターフェイスは、メモリ使用量の階層ビューを提供します。ブラウザまたは cURL でアクセスできます。
http://<be_ip>:8040/mem_trackerこのインターフェイスには、以下のフィールドが表示されます。
| フィールド | 説明 |
|---|---|
level | MemTracker はツリー構造を使用します。レベル 1 は BE 全体のメモリ使用量を示します。レベル 2 は個別のメモリ使用量カテゴリを示します。 |
Label | メモリ使用量カテゴリを識別します。「メモリ使用量のカテゴリ」で完全なリストをご確認ください。 |
Parent | ツリー内の親ノードのラベルです。 |
Limit | このノードのメモリ使用量制限です。none は制限が設定されていないことを意味します。 |
Current Consumption | 現在のメモリ使用量です。 |
Peak Consumption | ピーク時のメモリ使用量です。 |