サーバーレスコンピューティングリソースを使用して読み取りおよび書き込みタスクを実行する際、一部のリクエストは予測不可能です。このようなリクエストは瞬時に計算リソースを枯渇させ、他のタスクに影響を与える可能性があります。Hologres ではこの課題に対処するため、継続的にインテリジェント機能を開発しています。V3.1 以降では適応型大規模タスク隔離をサポートし、V4.1 以降では適応型負荷隔離をサポートしています。これらの機能により、大規模タスクが自動的に識別され、サーバーレスリソースを動的に使用して実行されるため、システムの安定性とリソース利用率が向上します。
Hologres では、サーバーレスコンピューティングリソースを使用して読み取りおよび書き込みタスクを実行できます。SQL 文、ユーザー、またはクエリキューに基づいてルーティングルールを事前に定義し、既知のタスクをサーバーレスリソースに送信することが可能です。ただし、本番環境では一部の読み取り・書き込みリクエストが予測不可能であり、過剰な計算リソースを消費するかどうか、どのユーザーが開始するか、または分類に必要な特徴が何かを事前に把握できない場合があります。このようなリクエストは仮想ウェアハウスのすべての計算リソースを瞬時に消費し、他の読み取り・書き込みリクエストに影響を与える可能性があります。
このようなシナリオに対処するため、Hologres は適応型サーバーレスコンピューティングをサポートするよう、インテリジェント機能を継続的に強化しています。
V3.1 以降、Hologres は適応型大規模タスク隔離をサポートしています。システムは「大規模タスク」を自動的に識別し、サーバーレスリソースを使用して実行します。
V4.1 以降、Hologres は適応型負荷隔離をサポートしています。システムは現在の負荷に基づいて「大規模タスク」のしきい値を自動調整し、負荷が高い場合にのみ大規模タスクをサーバーレスリソースで実行します。この機能は負荷が低い場合には効果がありません。
仕組み
「SQL 文が使用するサーバーレスリソース量」で説明されているように、サーバーレスリソースの使用量は、クォータ、最大コア数、および必要コア数の最小値によって決定されます。Hologres は必要コア数を自動的に推定し、SQL の複雑さや関連テーブルのデータ量などの要因に基づき、SQL 文に最適なサーバーレスコンピューティングリソース量を決定します。
Hologres が SQL 文に対して自動的に推定した最適なリソース量に基づき、リソースのしきい値を定義できます。このしきい値を超える SQL 文は「大規模タスク」として定義され、以下の適応型サーバーレスコンピューティングのシナリオが可能になります。
適応型大規模タスク隔離:「大規模タスク」のリソースしきい値を定義すると、すべての「大規模タスク」が自動的にサーバーレスリソースで実行されます。
適応型負荷隔離:システムは負荷に基づいて「大規模タスク」のリソースしきい値を動的に調整し、負荷が高い場合にのみ「大規模タスク」をサーバーレスリソースで実行します。
Hologres では、比率しきい値と絶対しきい値という 2 種類のカスタムリソースしきい値をサポートしています。SQL 文がサーバーレスリソースで自動実行されるのは、システムが推定した必要コア数が両方のしきい値を超えた場合のみです。つまり、必要コア数 > max(比率しきい値、絶対しきい値)を満たす必要があります。適応型大規模タスク隔離機能では、これらの 2 つのしきい値を変更できます。
hg_adaptive_serverless_computing_min_resource_ratio_threshold:比率しきい値係数。デフォルト値は 0.3 です。仮想ウェアハウスインスタンスの場合、比率しきい値は「比率しきい値係数 × 仮想ウェアハウスの計算リソース」です。汎用インスタンスの場合、比率しきい値は「比率しきい値係数 × インスタンスの計算リソース」です。hg_adaptive_serverless_computing_min_cores_threshold:絶対しきい値。デフォルト値は 256 CU です。
-- セッションレベルで変更
SET hg_adaptive_serverless_computing_min_resource_ratio_threshold = 0.3;
SET hg_adaptive_serverless_computing_min_cores_threshold = 256;
-- ユーザーレベルで変更
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_adaptive_serverless_computing_min_resource_ratio_threshold = 0.3;
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_adaptive_serverless_computing_min_cores_threshold = 256;
-- DB レベルで変更
ALTER DATABASE <db_name> SET hg_adaptive_serverless_computing_min_resource_ratio_threshold = 0.3;
ALTER DATABASE <db_name> SET hg_adaptive_serverless_computing_min_cores_threshold = 256;適応型負荷隔離 (Beta)
使用方法
システムは現在の負荷に基づき、適応型負荷隔離を有効にするかどうかを自動的に判断します。この機能は DB レベルで有効化します。DB に対して機能を有効化するには、次のコマンドを実行します。
-- DB レベルで適応型負荷隔離を有効化
ALTER DATABASE <db_name> SET hg_adaptive_serverless_computing_enable_load_isolation = on;適応型大規模タスク隔離
使用方法
適応型大規模タスク隔離機能を有効化するには、次のコマンドを実行します。この機能はユーザーまたは DB レベルで有効化します。
V4.1 より前では、機能を有効にするために両方のパラメーターを有効化する必要があります。
V4.1 以降では、
hg_enable_adaptive_serverless_computingパラメーターは非推奨となりました。hg_adaptive_serverless_computing_enable_big_query_isolationパラメーターのみを有効化すれば十分です。
-- セッションレベルで有効化
SET hg_enable_adaptive_serverless_computing = on;
SET hg_adaptive_serverless_computing_enable_big_query_isolation = on;
-- ユーザーレベルで有効化
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_enable_adaptive_serverless_computing = on;
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_adaptive_serverless_computing_enable_big_query_isolation = on;
-- DB レベルで有効化
ALTER DATABASE <db_name> SET hg_enable_adaptive_serverless_computing = on;
ALTER DATABASE <db_name> SET hg_adaptive_serverless_computing_enable_big_query_isolation = on;検証方法
適応型大規模タスク隔離機能の適用は、システムの自動推定ロジックに依存します。Hologres では、SQL 文の必要コア数を計算し、適応型サーバーレス機能がトリガーされるかどうかを確認できるリソース推定関数を提供しています。
-- SQL 文にエスケープが必要な単一引用符が含まれていない場合に使用
SELECT * FROM hologres.hg_estimate_adaptive_serverless_computing('select * from tbl;');
-- SQL 文にエスケープが必要な単一引用符が含まれている場合に使用
SELECT * FROM hologres.hg_estimate_adaptive_serverless_computing($$insert into test_tbl_dst_1 select * from test_tbl_src;$$);この関数の戻り値は以下のとおりです。
戻り値名 | 説明 |
estimated_cores | SQL 文に対してシステムが自動推定した必要コア数。 |
status | 現在のパラメーター設定に基づき、その SQL 文に適応型サーバーレス機能が適用され、サーバーレスリソースで実行されるかどうかを示します。
|
adaptive_serverless_computing_min_ratio_threshold | 現在設定されている比率しきい値係数。 |
adaptive_serverless_computing_min_cores_threshold | 現在設定されている絶対しきい値。 |