Hologres V2.1.17 以降では、サーバーレスコンピューティングがサポートされています。このトピックでは、この機能を使用してタスクを実行する方法について説明します。
サーバーレスコンピューティングのサポートされる機能
サーバーレスコンピューティングは、次の種類のタスクをサポートしています。
-
Hologres V2.1.17 以降のバージョンは、INSERT (INSERT OVERWRITE を除く)、INSERT ON CONFLICT (UPSERT)、DELETE、UPDATE などの主要なデータ操作言語 (DML) タスクをサポートしています。
-
Hologres V2.2.14 以降のバージョンは、データクエリ言語 (DQL) タスクをサポートしています。
-
Hologres V3.0.1 以降のバージョンは、DML の COPY タスクをサポートしています。
-
Hologres V3.0.9 以降のバージョンは、DML の CREATE TABLE AS (CTAS) タスクをサポートしています。
-
Hologres V2.2.42、V3.0.19 以降のバージョンは、リシャーディングタスクをサポートしています。
-
Hologres V3.0.26 以降のバージョンは、DML の INSERT OVERWRITE タスク (ストアドプロシージャ `hg_insert_overwrite`) をサポートしています。ストアドプロシージャ内の DML および DQL もサポートされています。
-
Hologres V3.1.0 以降のバージョンは、DML のネイティブ INSERT OVERWRITE 構文と REBUILD タスクをサポートしています。
-
Hologres V3.1.3 以降のバージョンは、暗号化されたテーブルへの読み取りと書き込みをサポートしています。これらのテーブルには、Hologres の暗号化された内部テーブルと MaxCompute の暗号化された外部テーブルが含まれます。Hologres の暗号化された内部テーブルへの読み取りと書き込みを行うには、GUC パラメーター
hg_serverless_computing_enable_encrypted_tableを有効にする必要があります。詳細については、「データ暗号化」をご参照ください。 -
Hologres V3.1.11 以降のバージョンは、コンパクションタスクをサポートしています。詳細については、「サーバーレスコンピューティングを使用したコンパクションタスクの実行」をご参照ください。
-
Hologres V4.0 以降のバージョンは、Data Lake Formation (DLF) 外部テーブルへの読み取りと書き込みをサポートしています。ファイル形式やその他の考慮事項の詳細については、「DLF に基づく OSS データレイク内のデータへのアクセス高速化」をご参照ください。
サーバーレスコンピューティングは、次の関数拡張をサポートしています。
-
ClickHouse
-
フロー分析
-
PostGIS
-
RoaringBitmap
-
BSI
-
Proxima
サーバーレスコンピューティングは、次のシナリオではサポートされていません。
-
読み取り専用セカンダリインスタンスでのクエリ。プライマリインスタンスと仮想ウェアハウスインスタンスは通常どおり使用できます。
-
複数行 DML トランザクションが有効になっているクエリ (例:
set hg_experimental_enable_transaction = on)。 -
Fixed Plan を使用する SQL ステートメント。
-
クロスデータベースクエリと書き込み。
サーバーレスコンピューティングリソースを使用した読み取り/書き込みタスクの実行
Hologres は、サーバーレスコンピューティングリソースを使用するための柔軟な方法を提供します。単一の SQL ステートメントをサーバーレスリソースに直接実行させることができます。また、ルールを設定して、サーバーレスリソースを使用して SQL ステートメントのバッチを実行することもできます。
Hologres は、SQL ステートメントをサーバーレスリソースで実行するようにスケジュールするための次のメソッドをサポートしています。メソッドは優先度の降順でリストされています。
-
SQL レベル (セッションレベル):
hg_computing_resourceパラメーターを'serverless'に設定します。現在の接続での読み取り/書き込みリクエストは、サーバーレスリソースで実行されます。 -
ユーザーレベル:
hg_computing_resourceパラメーターをユーザーレベルで'serverless'に設定します。タスクはサーバーレスリソースで実行されます。 -
クエリキューレベル:クエリキュー内のすべてのタスクをサーバーレスリソースで実行するように構成します。
-
適応型サーバーレスコンピューティング:この機能を有効にすると、システムは大規模なタスクを自動的に識別し、サーバーレスリソースで実行します。
-
上記の条件のいずれも満たされない場合、タスクは現在のインスタンスのリソースで実行されます。
SQL 実行中、大規模なクエリをサーバーレスリソースで自動的にリトライするように構成することもできます。これにより、本番サービスの負荷が軽減され、メモリ不足 (OOM) エラーの頻度が低下し、システムの安定性が向上します。
SQL ステートメントがサーバーレスリソースで実行される場合、計算リソースはその SQL ステートメントによって排他的に使用されます。他の SQL ステートメントは同時に実行されません。
注記:
-
サーバーレスコンピューティングを使用して読み取り/書き込みリクエストを実行する場合、リクエストは現在のインスタンスの計算リソースからサーバーレスリソースプールにルーティングされます。このプロセスにはメタデータ処理が含まれ、インスタンスの計算リソースを少量消費します。この消費は通常、無視できるレベルです。ただし、サーバーレスコンピューティングリクエストの秒間クエリ数 (QPS) が過度に高くなることは避けてください。
-
汎用インスタンスの場合、メタデータ処理はインスタンスの計算リソースを消費します。
-
計算グループタイプのインスタンスの場合、上記のメタデータ処理は、テーブルグループのリーダー計算グループまたはフォロワー計算グループのいずれを介して接続しているかに関係なく、リーダー計算グループから計算リソースを消費します。
SQL レベルの構成
次のコードを実行して、サーバーレスコンピューティングリソースで SQL コマンドを実行できます。このパラメーターはセッションレベルで設定することを推奨します。
このメソッドは、次のシナリオでよく使用されます。
-
1回限りのインポートまたはクエリタスク (例:既存データのリフレッシュ、テーブルスキーマまたはプロパティの変更 (Rebuild))。
-
定期的なオフラインインポートタスク (例:M+1、T+1、または H+1 のオフラインデータインポートとエクスポート)。この構成を定期タスクに追加できます。
-
サーバーレスリソースの柔軟な使用を必要とするその他のすべてのシナリオ。
-- SQL ステートメントを実行するためにサーバーレスコンピューティングリソースを使用します。デフォルト値は local で、現在のインスタンスのリソースが使用されることを示します。
SET hg_computing_resource = 'serverless';
-- DML ステートメントを送信した後、不要な SQL ステートメントがサーバーレスリソースを使用しないように構成をリセットします。
RESET hg_computing_resource;
-
データベースレベルで変更を行わないでください。
-
`RESET hg_computing_resource` を実行して構成をリセットします。これにより、後続の SQL ステートメントが不必要にサーバーレスリソースで実行されないようにします。
例:
-- データ準備 --
-- ソーステーブルを作成します。
CREATE TABLE source_tbl ( id int );
-- 結果テーブルを作成します。
CREATE TABLE sink_tbl ( id int );
-- サンプルデータをソーステーブルに書き込みます。
INSERT INTO source_tbl
SELECT * FROM generate_series(1, 99999999);
-- SQL ステートメントを実行するためにサーバーレスコンピューティングリソースを使用します --
-- セッションレベルで機能を有効にします。
SET hg_computing_resource = 'serverless';
-- SQL ステートメントを実行します。
INSERT INTO sink_tbl SELECT * FROM source_tbl;
-- 構成をリセットします。
RESET hg_computing_resource;
ユーザーレベルの構成
このメソッドは、次のシナリオでよく使用されます。
-
スーパーユーザーなどの高権限ユーザーによる日常的な使用。
-
高優先度データダッシュボード。ダッシュボードに対応するデータソースのアカウントを構成できます。
次のコードを実行して、特定の USER または ROLE によって開始されたすべての SQL ステートメントがデフォルトでサーバーレスコンピューティングリソースで実行されるように構成できます。
この構成メソッドの優先度は、データベースレベルの GUC 構成よりも高く、セッションレベルの GUC 構成よりも低いです。詳細については、「GUC パラメーター」をご参照ください。
-- 特定のデータベースで、ユーザーがデフォルトでサーバーレスコンピューティングリソースで SQL ステートメントを実行するように構成します。
ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_computing_resource = 'serverless';
-- 上記の構成をキャンセルします。
ALTER USER "<role_name>" IN DATABASE <db_name> RESET hg_computing_resource;
クエリキューレベルの構成
Hologres では、クエリキュー内のすべての SQL ステートメントをサーバーレスコンピューティングリソースで実行するように構成できます。クエリキューの構成方法の詳細については、「クエリキュー」をご参照ください。この機能により、クエリキューの分類機能を使用して、特定の種類のすべての SQL ステートメントをサーバーレスリソースで実行できます。例を次に示します。
-
クエリタイプ別:INSERT、SELECT、UPDATE、DELETE など。
-
クエリエンジン別:HQE、PQE、SQE、HiveQE など。たとえば、MaxCompute 外部テーブルのすべての非直接読み取りタスク (SQE タスク) は、サーバーレスリソースで実行できます。
-
SQL フィンガープリント別:クエリパターンが大量のリソースを消費し、安定性のリスクをもたらす場合、対応する SQL フィンガープリントを常にサーバーレスリソースで実行するように構成できます。
-
ストレージモード別:ホットまたはコールド。たとえば、すべてのコールドストレージクエリはサーバーレスリソースで実行できます。
次のコードを実行して、この機能を構成できます。
-
汎用インスタンス
-- ターゲットキュー内のすべてのクエリをサーバーレスリソースで実行するように構成します。 CALL hg_set_query_queue_property('<query_queue_name>', 'computing_resource', 'serverless'); -- (オプション) サーバーレスリソースを使用する際のターゲットキュー内のクエリの優先度を設定します。有効な値:1~5。デフォルト値:3。 CALL hg_set_query_queue_property('<query_queue_name>', 'query_priority_when_using_serverless_computing', '<priority>'); -
仮想ウェアハウスインスタンス
-- ターゲットキュー内のすべてのクエリをサーバーレスリソースで実行するように構成します。 CALL hg_set_query_queue_property('<warehouse_name>', '<query_queue_name>', 'computing_resource', 'serverless'); -- (オプション) サーバーレスリソースを使用する際のターゲットキュー内のクエリの優先度を設定します。有効な値:1~5。デフォルト値:3。 CALL hg_set_query_queue_property('<warehouse_name>', '<query_queue_name>', 'query_priority_when_using_serverless_computing', '<priority>');
適応型サーバーレスコンピューティング
Hologres は、システム内の大規模なタスクを自動的に識別し、サーバーレスリソースで実行できます。詳細については、「適応型サーバーレスコンピューティング」をご参照ください。
大規模なタスクの自動リトライ
SQL ステートメントがすでに現在のインスタンスのリソースで実行されている場合、システムの安定性を向上させ、過剰なリソース消費を防ぐために、それを大規模なクエリとして定義できます。大規模なクエリは、指定された秒数を超えて実行される SQL ステートメント、またはメモリ不足 (OOM) エラーを引き起こす SQL ステートメントとして定義できます。これらの大規模なクエリは、その後、サーバーレスリソースで自動的にリトライされます。詳細については、「大規模なクエリ制御」をご参照ください。
サーバーレスコンピューティングタスクの優先度の設定
Hologres では、サーバーレスコンピューティングで実行される SQL ステートメントの優先度を設定できます。各 SQL ステートメントのリソース制限を設定し、優先度ベースのキューイングメカニズムを使用することで、SQL ステートメントがサーバーレスコンピューティングで安定かつ秩序正しく実行されるようにできます。
次のシナリオを考慮してください。
ご利用のインスタンスは 32 コアのインスタンスタイプであり、インスタンスで利用可能な最大サーバーレスコンピューティングリソースは 96 コアです。SQL A が実行中で、サーバーレスリソースの 64 コアを使用しています。同時に、サーバーレスタスクキューには、48 コアを必要とし、優先度が 5 の SQL B と、32 コアを必要とし、優先度が 3 の SQL C が含まれています。この場合、システムは SQL A が完了するのを待ちます。その後、残りの 32 コアを使用して SQL C を実行するのではなく、SQL B を実行するために 48 コアを割り当てます。
-
次のコードを実行して、サーバーレスコンピューティングリソースでの SQL ステートメントの実行優先度を設定できます。
優先度は 1~5 の値で指定できます。デフォルト値は 3 です。値が大きいほど優先度が高くなります。要求されるリソースの量に関係なく、優先度の高いタスクにリソースが最初に割り当てられます。
-- セッションレベルの構成 SET hg_experimental_serverless_computing_query_priority = 5; -- 構成をリセットします。 RESET hg_experimental_serverless_computing_query_priority; -- ユーザーレベルの構成 ALTER USER "<role_name>" IN DATABASE <db_name> SET hg_experimental_serverless_computing_query_priority = 5; -- 構成をリセットします。 ALTER USER "<role_name>" IN DATABASE <db_name> RESET hg_experimental_serverless_computing_query_priority; -
例:
-- SQL ステートメントを実行するためにサーバーレスコンピューティングリソースを使用します。 SET hg_computing_resource = 'serverless'; -- SQL ステートメントの優先度を 5 に設定します。 SET hg_experimental_serverless_computing_query_priority to 5; -- SQL ステートメントを実行します。 INSERT INTO sink_tbl SELECT * FROM source_tbl; -- 構成をリセットします。 RESET hg_computing_resource; RESET hg_experimental_serverless_computing_query_priority;
サーバーレスコンピューティングの検証
次のコードを実行して、SQL ステートメントの実行計画を表示できます。
-- SQL ステートメントを実行するためにサーバーレスコンピューティングリソースを使用します。
SET hg_computing_resource = 'serverless';
-- SQL ステートメントを実行します。
EXPLAIN INSERT INTO sink_tbl SELECT * FROM source_tbl;
-- 構成をリセットします。
RESET hg_computing_resource;
次の結果が返されます。結果に Computing Resource: Serverless が含まれている場合、SQL ステートメントはサーバーレスコンピューティングリソースで実行されました。
QUERY PLAN
------------------------------------------------------------------------------------------
Gather (cost=0.00..5.18 rows=100 width=4)
-> Insert (cost=0.00..5.18 rows=100 width=4)
-> Redistribution (cost=0.00..5.10 rows=100 width=4)
-> Local Gather (cost=0.00..5.10 rows=100 width=4)
-> Decode (cost=0.00..5.10 rows=100 width=4)
-> Seq Scan on source_tbl (cost=0.00..5.00 rows=100 width=4)
Computing Resource: Serverless
Optimizer: HQO version 2.1.0
(8 rows)
サーバーレスリソースでの実行中および履歴タスクも表示できます。詳細については、「サーバーレスコンピューティングの監視と管理」をご参照ください。