監査ログベースのリソースグループ設定
StarRocks では、Resource Groups がユーザーの識別やクエリタイプなどのクラシファイア(分類器)に基づいて CPU、メモリ、同時実行制限を割り当てることで、リソースの分離を効果的に行います。この機能は、マルチテナント環境での効率的なリソース利用を実現するために不可欠です。
従来のリソースグループ設定は経験的な判断に依存することが多いです。しかし、監査ログテーブル starrocks_audit_db__.starrocks_audit_tbl__ からの過去のクエリデータを分析することで、管理者はリソースグループの調整にデータ駆動型アプローチを採用できます。CPU時間、メモリ消費、クエリの同時実行数といった主要な指標は、実際のワークロード特性に関する客観的な洞察を提供します。
このアプローチは以下を助けます:
- リソース競合によるクエリ遅延の防止
- クラスターのリソース枯渇からの保護
- 全体的な安定性と予測可能性の向上
このトピックでは、監査ログから観 察されたワークロードパターンに基づいて適切なリソースグループパラメータを導き出すためのステップバイステップのチュートリアルを提供します。
このチュートリアルは、AuditLoader プラグインを使用した分析に基づいており、クラスター内で直接 SQL ステートメントを使用して監査ログをクエリできます。プラグインのインストールに関する詳細な手順については、AuditLoader を参照してください。
CPU リソースの割り当て
目的
ユーザーごとの CPU 消費を決定し、cpu_weight または exclusive_cpu_cores を使用して CPU リソースを比例配分します。
分析
以下の SQL は、過去 30 日間のユーザーごとの合計 CPU 時間 (cpuCostNs) を集計し、秒に変換して、総 CPU 使用率の割合を計算します。
SELECT
user,
SUM(cpuCostNs) / 1e9 AS total_cpu_seconds, -- クエリの合計 CPU 時間を取得。
(
SUM(cpuCostNs) /
(
SELECT SUM(cpuCostNs)
FROM starrocks_audit_db__.starrocks_audit_tbl__
WHERE state IN ('EOF','OK')
AND timestamp >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
)
) * 100 AS cpu_usage_percentage -- ユーザーごとの総 CPU 使用率の割合を計算。
FROM starrocks_audit_db__.starrocks_audit_tbl__
WHERE state IN ('EOF','OK') -- 完了したクエリのみを含む。
AND timestamp >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) -- 過去 30 日間のデータをクエリ。
GROUP BY user
ORDER BY total_cpu_seconds DESC
LIMIT 20; -- CPU リソース消費が最も多い上位 20 ユーザーをリスト。
ベストプラクティス
BE ごとに固定の CPU コア数(例:64 コア)を仮定します。あるユーザーが総 CPU 時間の 16% (cpu_usage_percentage) を占める場合、約 64 × 16% ≈ 11 コア を割り当てるのが合理的です。
リソースグループの CPU 制限を次のように設定できます:
-
exclusive_cpu_cores:- その値は単一の BE 上の総コア数を超えてはなりません。
- すべてのリソースグループの
exclusive_cpu_coresの合計は、単一の BE 上の総コア数を超えてはなりません。
-
cpu_weight:- ソフトアイソレーションリソースグループにのみ適用されます。
- 残りのコアで競合するクエリ間の相対的な CPU シェアを決定します。
- 固定の CPU コア数に直接マッピングされるわけではありません。
メモリ管理
目的
メモリ集約型のユーザーを特定し、適切なメモリ制限とサーキットブレーカーを定義します。