Hologres V3.1 以降では、クエリキューの自動速度制限を設定できます。この機能は、計算グループのワークロードに基づいてキュー内の最大同時実行クエリ数を動的に調整し、自動的なトラフィック制御を実現します。
シナリオ
自動速度制限は、システムの負荷に基づいてクエリキューの最大同時実行数を動的に調整します。計算グループで同時に実行されるクエリの数を制御することで、過剰なリソース消費を防ぎます。この機能は、以下のシナリオで使用できます。
-
高同時実行ワークロード:同時実行数が多く、各リクエストが同程度のリソースを消費する場合、自動速度制限は同時実行数の上限を動的に調整します。これにより、CPU 使用率は 100% 未満の高いが安全なレベルで安定します。
説明-
同時実行数が低すぎる場合、動的な調整によって CPU 使用率がのこぎり状に急激に変動し、CPU の利用効率が低下する可能性があります。
-
極端なケース、例えば大規模なクエリが 1 つだけ実行される場合、自動速度制限は効果がありません。
-
-
許容可能なクエリのレイテンシー:この機能はトラフィック制限を適用するため、同時実行数の上限を超えたクエリはキューで待機し、応答時間が増加します。
-
予測不能なトラフィックの急増:クエリ量の急増や十分な計算リソースの事前プロビジョニングを予測できない場合、自動速度制限は安定性リスクの低減に役立ちます。
以下のシナリオでは、代替ソリューションを検討してください。
-
予測可能なトラフィックパターン:毎日のピークトラフィックが特定の時間に発生する場合、計算グループの時間ベースの弾力性を使用してスケーリングをスケジュールできます。
-
低同時実行数の大規模クエリ:自動速度制限は、低同時実行数の大規模クエリには限定的な影響しかありません。これらのクエリは Serverless Computing リソースを使用して実行できます。詳細については、「Serverless Computing ユーザーガイド」をご参照ください。
-
ゼロレイテンシー要件:高い同時実行性と低いレイテンシーの両方をサポートするには、計算リソースを増やす必要があります。計算リソースをスケールアウトするか、large クエリコントロール機能を使用して遅いクエリを Serverless Computing に転送できます。詳細については、「large クエリコントロール」をご参照ください。
前提条件
クエリキューを作成済み であること。
注意事項
-
自動速度制限は、Hologres V3.1 以降を実行する計算グループインスタンスでのみサポートされます。汎用インスタンスではこの機能はサポートされません。
説明この機能を使用する前に、汎用インスタンスを計算グループインスタンスに変換できます。詳細については、「汎用インスタンスから計算グループインスタンスへの変換」をご参照ください。
-
クエリキューを介してルーティングされるクエリのみが自動速度制限の対象となります。これには、エンジンタイプが
HQE、PQE、SQE、またはHiveQEのクエリが含まれます。影響を受けるクエリタイプには、SELECT、INSERT、UPDATE、DELETE、および COPY や CTAS などのコマンドによって生成される INSERT 文が含まれます。 -
固定プランを使用するクエリはクエリキューをバイパスするため、自動速度制限による同時実行数の制限を受けません。詳細については、「固定プランによる SQL 実行の高速化」をご参照ください。リソースを効果的に管理するために、固定プランを使用するクエリを別の計算グループを使用して他のワークロードから分離できます。詳細については、「計算グループインスタンスのクイックスタート」をご参照ください。
自動速度制限の使用
自動速度制限は、計算グループレベルまたはクエリキューレベルで設定できます。
構文
-
計算グループの自動速度制限を有効化または無効化します。
重要-
この機能が有効な場合、計算グループ内のすべてのクエリキューはデフォルトで自動速度制限を使用します。必要に応じて、特定のキューに対してこの機能を無効化できます。
-
この機能が無効 (デフォルト) の場合、システムはすべてのキューレベルの自動速度制限設定を無視します。
-- 計算グループレベルで自動速度制限を有効化 CALL hg_set_warehouse_adaptive_concurrency_limiting ('<warehouse_name>', true); -- 計算グループレベルで自動速度制限を無効化 CALL hg_set_warehouse_adaptive_concurrency_limiting ('<warehouse_name>', false); -
-
クエリキューの自動速度制限を有効化または無効化します。
-- クエリキューの自動速度制限を有効化 (デフォルトで有効) CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'enable_adaptive_concurrency_limiting', 'true'); -- クエリキューの自動速度制限を無効化 (キューをホワイトリストに追加するのと同じ) CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'enable_adaptive_concurrency_limiting', 'false'); -
クエリキューの自動速度制限の最小同時実行数を設定します。
説明このパラメーターを設定すると、ワークロードが高いままであっても、システムは指定された値を下回るように同時実行数を減らすことはありません。
-- 自動速度制限の最小同時実行数を設定 (デフォルト:1、最小値:1) CALL hg_set_query_queue_property ('<warehouse_name>', '<query_queue_name>', 'adaptive_concurrency_limiting_min_concurrency', '<min_concurrency>');
パラメーターの説明
|
パラメーター名 |
説明 |
warehouse_name |
計算グループの名前。詳細については、「計算グループインスタンスのクイックスタート」をご参照ください。 |
query_queue_name |
クエリキューの名前。詳細については、「クエリキュー」をご参照ください。 |
min_concurrency |
クエリキューの自動速度制限の最小同時実行数。デフォルト:1。有効値:[1, クエリキュー作成時に設定した max_concurrency]。 |
監視と運用保守
Hologres 管理コンソールで、対象のインスタンス ID をクリックし、Monitoring Information ページに移動して、計算グループの CPU 使用率 (%) メトリックを表示し、自動速度制限の動作をモニターします。
例
このセクションでは、PostgreSQL のネイティブベンチマークツールである pgbench を使用して、自動速度制限の仕組みとその効果を実証する例を示します。
-
テストテーブルを作成し、Hologres にデータをロードします。
CREATE TABLE tbl_1 (col1 INT, col2 INT, col3 TEXT); CREATE TABLE tbl_2 (col1 INT, col2 INT, col3 TEXT); INSERT INTO tbl_1 SELECT i, i+1, md5(RANDOM()::TEXT) FROM GENERATE_SERIES (0, 500000) AS i; INSERT INTO tbl_2 SELECT i, i+1, md5(RANDOM()::TEXT) FROM GENERATE_SERIES (0, 500000) AS i; -
クエリキューの最大同時実行数を 100 に設定します。この例では、init_warehouse 計算グループと default_queue クエリキューを使用します。
CALL hg_set_query_queue_property ('init_warehouse', 'default_queue', 'max_concurrency', '100'); -
pgbench クライアントの
binディレクトリに、select.sqlという名前のベンチマーク SQL ファイルを作成し、次の SQL 文をファイルに追加します。EXPLAIN ANALYZE SELECT * FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.col3 = tbl_2.col3 ORDER BY 1; -
ご利用のサーバーの構成ファイルに、パスワードを環境変数として設定するために次のコマンドを追加して保存します。
export PGPASSWORD='<AccessKey_Secret>' -
pgbench クライアントの
binディレクトリに移動し、次のベンチマークコマンドを実行します。./pgbench -c 30 \ -j 30 \ -f select.sql \ -d <Database> \ -U <AccessKey_ID> \ -h <Endpoint> \ -p <Port> \ -T 1800パラメーターの詳細については、「Hologres への接続と開発」をご参照ください。
-
ベンチマークテスト中に、Hologres で自動速度制限を有効化してから無効化し、テストが完了するまで計算グループの CPU 使用率をモニターします。
-- 自動速度制限を有効化 CALL hg_set_warehouse_adaptive_concurrency_limiting ('init_warehouse', true); -- 自動速度制限を無効化 CALL hg_set_warehouse_adaptive_concurrency_limiting ('init_warehouse', false);
結果の分析:
ベンチマークテスト後、計算グループの CPU 使用率は次の動作を示します。
-
初期段階:自動速度制限は無効です。キューの長さは 0 です。CPU 使用率は 100% のままであり、安定性リスクがあります。
-
中間段階:自動速度制限は有効です。キューの長さと CPU 使用率はわずかに変動した後、安定します。キューの長さは約 17、CPU 使用率は約 80% です。安定性リスクは大幅に低減されます。
-
後期段階:自動速度制限が再び無効になります。動作は初期段階と同じです。