すべてのプロダクト
Search
ドキュメントセンター

Hologres:接続の管理

最終更新日:May 22, 2026

本トピックでは、Hologres インスタンスの接続を診断および管理する方法について説明します。

接続とクエリの管理

Hologres は PostgreSQL と互換性があります。pg_stat_activity ビューをクエリして接続を検査し、その状態を分析し、アクティブな SQL クエリを診断できます。主な管理操作は次のとおりです。

pg_stat_activity ビューのクエリ

pg_stat_activity ビューは、アクティブな SQL タスクの分析とトラブルシューティングに役立つ強力なツールです。次のコマンドを実行して、インスタンスの接続とクエリに関するランタイム情報を表示できます。

select * from pg_stat_activity;

次の表に、pg_stat_activity ビューのフィールドを示します。

フィールド

説明

datid

バックエンドが接続されているデータベースのオブジェクト ID (OID)。

datname

バックエンドが接続されているデータベースの名前。

pid

Hologres バックエンドのプロセス ID (PID)。

usesysid

Hologres バックエンドにログインしているユーザーの OID。

usename

現在の接続のユーザー名。

application_name

クライアントアプリケーションの種類。

一般的なアプリケーションの種類は次のとおりです。

  • Realtime Compute for Apache Flink: {client_version}_ververica-connector-hologres

  • オープンソース Flink: {client_version}_hologres-connector-flink

  • DataWorks Data Integration (バッチ同期、Hologres からの読み取り): datax_{jobId}

  • DataWorks Data Integration (バッチ同期、Hologres への書き込み): {client_version}_datax_{jobId}

  • DataWorks Data Integration (リアルタイム同期): {client_version}_streamx_{jobId}

  • HoloWeb: holoweb

  • MaxCompute の外部テーブルを使用した Hologres へのアクセス: MaxCompute

  • Holo Client によって Hologres の binlog を読み取るために開始されたプロセス: holo_client_replication。この種類のタスクではクエリ内容は表示されません。

  • 他のアプリケーションについては、接続文字列で application_name を明示的に指定することを推奨します。

client_addr

クライアントの IP アドレス。

表示される IP アドレスは解決済みのアドレスであり、元のソース IP ではない場合があります。

client_hostname

クライアントのホスト名。

client_port

クライアントのポート。

backend_start

バックエンドプロセスが開始された時刻。

xact_start

プロセスの現在のトランザクションの開始時刻。

  • アクティブなトランザクションがない場合、このフィールドは null になります。

  • 現在のクエリがこのプロセスで最初のトランザクションである場合、この値は query_start と同じです。

query_start

現在アクティブなクエリの開始時刻。接続状態が active でない場合、これは前のクエリの開始時刻です。

state_change

接続の状態が最後に変更された時刻。

wait_event_type

バックエンドが待機しているイベントの種類、または待機していない場合は NULL。指定できる値は次のとおりです。

  • LWLock:バックエンドは軽量ロックを待機しています。

  • Lock:バックエンドは重量ロックを待機しています。wait_event フィールドは、待機しているロックの種類を示します。

  • BufferPin:サーバープロセスは、他のプロセスがそのバッファを調べていない間にデータバッファへのアクセスを待機しています。

  • Activity:サーバープロセスはアイドル状態です。これは、メインの処理ループでアクティビティを待機しているシステムプロセスに使用されます。

  • Extension:サーバープロセスは、拡張モジュール内でのアクティビティを待機しています。

  • Client:サーバープロセスは、クライアントアプリケーションからのクエリを待機しており、内部処理とは関係のない何かが発生するのを待っています。

  • IPC:サーバープロセスは、サーバー上の別のプロセスからのアクティビティを待機しています。

  • Timeout:サーバープロセスは、タイムアウトが発生するのを待機しています。

  • IO:サーバープロセスは、I/O 操作が完了するのを待機しています。

wait_event

バックエンドが現在待機している場合の待機イベントの名前、それ以外の場合は NULL。

state

現在の接続状態。一般的な状態は次のとおりです。

  • active:接続はクエリを実行しています。

  • idle:接続は新しいクライアントコマンドを待機しています。

  • idle in transaction (トランザクション中のアイドル):接続はトランザクション中にありますが、現在クエリを実行していません。

  • idle in transaction (aborted) (失敗したトランザクション中のアイドル):接続は失敗したトランザクション中にあり、現在クエリを実行していません。

  • \N (空):非ユーザープロセスを示します。通常は無視できる、システムのバックグラウンドメンテナンスプロセスです。

backend_xid

Hologres バックエンドのトップレベルのトランザクション識別子。

backend_xmin

現在のバックエンドの xmin ホライズン。

query

バックエンドで最後に実行されたクエリ。 stateactive の場合、現在実行中のクエリが表示されます。他のすべての状態では、最後に実行されたクエリが表示されます。

backend_type

現在のバックエンドの種類。指定できる種類には、autovacuum launcher、autovacuum worker、logical replication launcher、logical replication worker、parallel worker、background writer、クライアントバックエンド、checkpointer、startup、walreceiver、walsender、walwriter があります。これには、PQE などのバックエンド実行コンポーネントも含まれます。

説明

アプリケーションの接続を表す クライアントバックエンド 種類にご注意ください。

使用方法

スーパーユーザーのみがすべての接続情報を表示できます。標準ユーザーは自身の接続のみを表示できます。

デフォルトの最大接続数

デフォルトの接続制限は、インスタンスの仕様によって異なります。次のコマンドを実行して、最大接続制限をクエリできます。このコマンドは、単一の FE ノードの制限を返します。インスタンスの総接続制限は、この値に FE ノードの数を掛けたものです。各インスタンスの FE ノード数については、「インスタンス管理」をご参照ください。

  • インスタンス全体の最大接続数をクエリします。このコマンドは Hologres V1.3.23 以降でサポートされています。

    select instance_max_connections();
  • 単一の FE ノードの最大接続数をクエリします。インスタンスの総接続制限は、FE ノードの数にこの値を掛けたものです。

    show max_connections;

HoloWeb での接続の管理

HoloWeb コンソールでアクティブな接続を表示および管理できます。

  1. HoloWeb コンソールにログインします。詳細については、「HoloWeb への接続と SQL クエリの実行」をご参照ください。

  2. 上部メニューで、Diagnostics and Optimization をクリックします。

  3. 左側のナビゲーションペインで、Connections をクリックします。

  4. Connections ページでは、フィルターを使用して接続を検索し、結果の一覧で詳細情報を確認できます。

    説明

    スーパーユーザーアカウントのみがすべての接続情報を表示できます。標準ユーザーは自身の接続のみを表示できます。

    次の表でパラメーターについて説明します。

    Parameter

    Description

    Instance name

    The name of the Hologres instance.

    Database

    The name of the Hologres database. You can select a specific database. If you leave this blank, connections to all databases are displayed.

    Database

    The name of the connected database.

    説明

    If the database name is Postgres, it indicates a backend maintenance connection, which can be ignored.

    User Name

    The user account for the connection.

    Client Address

    This may be a routed outbound IP address, not the original source IP.

    Application Name

    The name of the application that created the connection.

    State

    The state of the connection. Common states include:

    • active: The connection is active.

    • idle: The connection is idle.

    • idle in transaction: The connection is idle within a long-running transaction.

    • idle in transaction (Aborted): The connection is idle within a failed transaction.

    Query Start

    The start time of the query.

    Query

    The executed query.

    説明

    Long queries might be truncated.

    PID

    The process ID (PID) of the query.

    Operation

    • Kill: Terminate unexpected connections individually or in batches.

    • Details: Click to view detailed information about the connection.

SQL を使用した接続情報のクエリ

SQL を使用して接続情報をクエリする場合は、次の操作を実行できます。

  1. 現在のデータベースへの接続数をクエリします。

    次のコマンドを実行して、現在のデータベースへの接続数を表示できます。フィールドの詳細については、「pg_stat_activity ビューのクエリ」をご参照ください。

    • Hologres V1.1 以降の場合:

      SELECT  datname::TEXT
              ,COUNT(1) AS COUNT
      FROM    pg_stat_activity
      WHERE   backend_type = 'client backend'
      AND     application_name != 'hologres'
      GROUP BY datname::TEXT;
    • Hologres V0.10 以前の場合:

      SELECT  datname
              ,COUNT(1) AS COUNT
      FROM    pg_stat_activity
      WHERE   backend_type = 'client backend'
      AND     application_name != 'hologres'
      GROUP BY datname;
  2. 各接続の状態を表示します。

    Hologres コンソールの HoloWeb を使用して各インスタンスの接続状態を表示するか、次のステートメントを実行して pg_stat_activity ビューをクエリし、すべての JDBC または PSQL 接続の状態を取得できます。

    select * from pg_stat_activity where backend_type = 'client backend' and state = '<statename>';

    <statename> を次のいずれかの状態パラメーターに置き換えます。

    • idle:アイドル接続。プロセスは新しいクライアントコマンドを待機しています。

    • active:アクティブな接続。プロセスはクエリを実行しています。

    • idle in transaction:プロセスはトランザクション中にありますが、現在クエリを実行していません (トランザクション中のアイドル)。

    • idle in transaction (aborted):プロセスは失敗したトランザクション中にあり、現在クエリを実行していません (失敗したトランザクション中のアイドル)。

    • fastpath function call:プロセスが fast-path 関数を実行していることを示します。

    • disabled:プロセスの track activities が無効になっていることを示します。

    たとえば、次のコマンドを実行して、現在のインスタンスのアイドル接続をクエリできます。

    select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';

    Holoweb などの Hologres の周辺コンポーネントは JDBC を使用し、一定数の接続を消費します。十分な数の接続がある場合は、この使用状況について心配する必要はありません。SQL 接続数が常に max_connections に近づくか達する場合、アプリケーションに接続リークがないか確認し、適切な接続プールサイズを設定する必要があります。または、次のセクションで説明するようにアイドル接続を解放することもできます。詳細については、「接続の終了」をご参照ください。

  3. 各アクセスノードの接続数を表示する

    インスタンスの各 FE ノードの現在の接続数をクエリできます。この機能は Hologres V1.3.23 以降でサポートされています。アクティブな接続がない FE ノードは、クエリ結果に表示されません。

    select * from hologres.hg_connections;

    次の表に、クエリ結果のフィールドを示します。

    • fe_id:FE ノードの ID。

    • used_connections:FE ノードで現在使用中の接続数。

    • max_connections:FE ノードの最大接続数。show max_connections コマンドの戻り値と同じです。

接続の終了

次の条件は、システムまたは特定のアクセスノードの接続制限に達したことを示します。

  • 接続数が max_connections の値に達したか超えた場合、Hologres コンソールの [監視とアラーム] ページで接続数を確認できます。

  • FATAL: sorry, too many clients already connection limit exceeded for superusers エラーが発生します。

  • FATAL: remaining connection slots are reserved for non-replication superuser connections エラーが報告されます。

これらの問題が発生した場合は、スーパーユーザーアカウントでインスタンスに接続し、次のステートメントを実行して、アイドル接続が過剰でないか確認します。

select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';

クエリ結果に不要なアイドルプロセスが過剰に表示される場合は、結果から pid を見つけ、次のステートメントを実行してアイドル接続を解放します。フィールドの詳細については、「pg_stat_activity ビューのクエリ」をご参照ください。

select pg_cancel_backend(<pid>);     -- 接続中のクエリをキャンセルします。
select pg_terminate_backend(<pid>);  -- 対応するバックエンド接続プロセスを終了します。

-- バックエンドの IDLE 接続プロセスを一括で終了して、接続を解放します。
SELECT pg_terminate_backend(pid)
        ,query
        ,datname
        ,usename
        ,application_name
        ,client_addr
        ,client_port
        ,backend_start
        ,state
FROM    pg_stat_activity
WHERE   length(query) > 0
AND     pid != pg_backend_pid()
AND     backend_type = 'client backend'
AND     state = 'idle'
AND     application_name != 'hologres'
AND     query not like '%pg_cancel_backend%';

スーパーユーザー用の予約済み接続

Hologres は、スーパーユーザー用に多数の接続を予約しています。予約される接続の数はインスタンスの仕様によって異なります。詳細については、「インスタンス管理」をご参照ください。これらの予約済み接続は、最大接続制限に達したときにアイドル接続を終了するなど、管理タスク用です。標準ユーザーが利用できる最大接続数は、max_connections から予約済み接続の数を引いたものです。通常のデータベース操作にスーパーユーザーアカウントを使用しないことを推奨します。これにより、利用可能なすべての接続が枯渇し、管理チャネルを使用してそれらを解放できなくなる可能性があります。

ユーザーの接続制限

ユーザー接続制限の設定

特定ユーザーの接続制限を設定して、接続を過剰に消費してリソースを浪費するのを防ぐことができます。

次のステートメントを実行して、単一の FE ノード上の単一ユーザーの最大接続数を制限します。インスタンスに複数のノードがある場合、ユーザーの総接続制限は (ノードごとの接続数) * (ノード数) です。

  • 構文

    ALTER ROLE "Alibaba Cloud アカウント ID" CONNECTION LIMIT <number>;
  • パラメーター

    パラメーター

    説明

    Alibaba Cloud アカウント ID

    制限するアカウントの ID。 RAM ユーザーの場合、アカウント UID の前に p4_ を付けます。

    アカウントの詳細については、「アカウントの概要」をご参照ください。

    number

    接続制限。

    値は [-1, N] の範囲内である必要があります。値 -1 は、ユーザーの接続制限を削除します。

  • 次の例では、RAM ユーザー 283813xxxx をノードあたり最大 1 接続に制限します。

    ALTER ROLE "p4_283813xxxx" CONNECTION LIMIT 1;

ユーザー接続制限の表示

次のステートメントを実行して、インスタンスユーザーに現在設定されているノードごとの接続制限を表示します。

SELECT rolname, rolconnlimit
FROM pg_roles
WHERE rolconnlimit <> -1;

クエリ結果の例:

       rolname | rolconnlimit 
---------------+--------------
 p4_283813xxxx |      1
(1 row)

アイドル接続の自動終了

インスタンスへの接続数が常に上限に近い場合、アプリケーションに接続リークがある可能性があります。アイドル接続の自動終了を有効にして、リソースを解放できます。接続が指定された時間より長くアイドル状態になると、自動的に切断されます。

  • 制限事項

    アイドル接続の自動終了は、Hologres V0.10.25 以降でのみサポートされています。インスタンスがそれより前のバージョンを実行している場合は、アップグレード中に発生する一般的なエラー」をご参照いただくか、Hologres DingTalk グループに参加してインスタンスのアップグレードをリクエストしてください。オンラインサポート用の DingTalk グループへの参加方法については、「オンラインサポートをさらに受けるにはどうすればよいですか?」をご参照ください。

  • 構文

    • セッションレベル

      -- 接続が 10 分間 (600,000 ミリ秒) アイドル状態であった場合に、自動的に切断します。
      SET idle_session_timeout = 600000;
    • データベースレベル

      -- このデータベースへの接続が 10 分間 (600,000 ミリ秒) アイドル状態であった場合に、自動的に切断します。
      ALTER DATABASE <db_name> SET idle_session_timeout = 600000;

      <db_name> を、アイドル接続の自動終了を有効にするデータベースの名前に置き換えます。

接続のベストプラクティス

Hologres 接続を利用する際のベストプラクティスに従ってください。

  • スーパーユーザーアカウントを賢く使用する

    • アプリケーションの接続や通常のインスタンス操作にスーパーユーザーアカウントを使用しないでください。接続数がインスタンスの制限を超えた場合、スーパーユーザーアカウントでさえ接続できなくなる可能性があります。

    • 操作用に専用のスーパーユーザーアカウントを作成することを推奨します。このアカウントを使用して HoloWeb にログインし、接続制限に達した場合やクエリがハングした場合などの緊急時に、接続とクエリを管理できます。

  • 適切な接続プールを設定する

    • デフォルトでは、Hologres はビジネスの安定性を確保するためにアイドル接続を自動的に終了しません。アプリケーションで堅牢な接続プールを使用して、アイドル接続を速やかに解放することを推奨します。

    • アイドル接続がリソースを過剰に消費し、オンラインサービスに影響を与えるのを防ぐために、定期的にアイドル接続をクリーンアップします。

よくあるエラー

  • SQL 実行中にエラーメッセージが返されます: terminating connection due to idle state timeout

  • 原因:設定されたアイドルタイムアウトを超えたため、接続が自動的に終了されました。

  • 解決策:インスタンスに再接続するか、アイドル接続のタイムアウトを増やします。アイドル接続のタイムアウトを変更する方法については、「アイドル接続の自動終了」をご参照ください。