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

Hologres:接続の管理

最終更新日:Jan 06, 2026

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

接続とクエリ管理の概要

Hologres は PostgreSQL と互換性があり、`pg_stat_activity` ビューをクエリして Hologres インスタンスへの接続に関する情報を取得できます。これは、インスタンスへの接続ステータスを分析し、SQL 実行の診断を行うのに役立ちます。詳細については、本トピックの「pg_stat_activity ビューのクエリ」をご参照ください。このトピックには、以下のセクションが含まれています。

pg_stat_activityビューのクエリ

pg_stat_activityビューを使用して、実行中のSQLクエリを診断し、問題のトラブルシューティングを行うことができます。 Hologresインスタンスへの接続に関する情報とインスタンス内のSQLクエリの 実行情報をクエリするには、次のステートメントを実行します。

select * from pg_stat_activity ;

次の表は、pg_stat_activityビューのクエリ結果のフィールドについて説明しています。

フィールド

説明

datid

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

datname

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

pid

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

usesysid

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

usename

現在の接続の作成に使用されたユーザー名。

application_name

クライアント上のアプリケーションのタイプ。

一般的なアプリケーションタイプ:

  • Realtime Compute for Apache Flink(VVRバージョン): {client_version}_ververica-connector-hologres

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

  • Hologres からデータを読み取るバッチ同期タスクを実行できる DataWorks Data Integration:datax_{jobId}

  • Hologres にデータを書き込むバッチ同期タスクを実行できる DataWorks Data Integration:{client_version}_datax_{jobId}

  • DataWorks リアルタイムデータ統合同期のタスク名のフォーマットは {client_version}_streamx_{jobId} です。

  • HoloWeb: holoweb

  • 外部テーブルを使用して Hologres にアクセスできる MaxCompute:MaxCompute

  • Holoクライアントによって開始されたHologresバイナリログを読み取るプロセス: holo_client_replication。 このタイプのタスクでは、クエリ内容は表示されません。

  • 他のアプリケーションの場合、アプリケーションがHologresインスタンスに接続されている場合は、接続文字列で application_name フィールドを明示的に指定することをお勧めします。

client_addr

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

表示されるIPアドレスは解決済みであり、クライアントの実際のIPアドレスではない場合があります。

client_hostname

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

client_port

クライアントのポート番号。

backend_start

バックエンドプロセスの開始時刻。

xact_start

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

  • アクティブなトランザクションがない場合は、空の文字列が返されます。

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

query_start

現在アクティブなクエリの開始時刻。 現在の接続がアクティブでない場合、このフィールドの値は最後のクエリの開始時刻です。

state_change

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

wait_event_type

バックエンドが待機しているイベントのタイプ。 バックエンドがイベントを待機していない場合、このフィールドの値はNULLです。 有効な値:

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

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

  • BufferPin: サーバープロセスはデータバッファへのアクセスを待機しており、他のプロセスはデータバッファをチェックしていません。

  • Activity: サーバープロセスはアイドル状態です。 これは、メイン処理ループで実行されるのを待機しているシステムプロセスである可能性があります。

  • Extension: サーバープロセスは拡張モジュール内にあり、実行されるのを待機しています。

  • Client: サーバープロセスはユーザーアプリケーションからのクエリを待機しています。 また、サーバーは、内部処理とは無関係のアクティビティが発生することを期待しています。

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

  • 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

バックエンドで最後に実行されたクエリ。 state フィールドの値が active の場合、実行中のクエリが表示されます。 接続がアクティブでない場合は、最後に実行されたクエリが表示されます。

backend_type

バックエンドのタイプ。 サポートされているタイプには、autovacuum launcher、autovacuum worker、logical replication launcher、logical replication worker、parallel worker、background writer、client backend、checkpointer、startup、walreceiver、walsender、walwriterなどがあります。 PQEなどのバックエンド実行コンポーネントもサポートされています。

説明

client backend タイプに注意してください。 このタイプは、アプリケーション接続のタイプを示します。

使用上の注意

すべての接続に関する情報を表示できるのはスーパーユーザーのみです。 通常のユーザーは、自分の接続に関する情報のみを表示できます。

Hologresインスタンスへのデフォルトの最大接続数をクエリする

Hologresインスタンスへのデフォルトの最大接続数は、インスタンスの仕様によって異なります。 次のいずれかの方法を使用して、Hologresインスタンスへの許容最大接続数をクエリできます。 2番目の方法では、戻り値は単一のフロントエンド(FE)ノードへのデフォルトの最大接続数です。 最大合計接続数は、単一のFEノードへの最大接続数にFEノードの数を掛けた値に等しくなります。 さまざまなインスタンス仕様のFEノードの最大数については、インスタンス管理をご参照ください。

  • 次のステートメントを実行して、Hologresインスタンスへの許容最大接続数をクエリします。 このステートメントは、Hologres V1.3.23以降でサポートされています。

    select instance_max_connections();
  • 次のステートメントを実行して、単一のFEノードへの許容最大接続数をクエリします。 単一のFEノードへの許容最大接続数にFEノードの数を掛けて、Hologresインスタンスへの許容最大接続数を取得できます。

    show max_connections;

HoloWebコンソールで接続を管理する

HoloWebを使用して、アクティブな接続を視覚的に表示および管理できます。

  1. HoloWebコンソールにログオンします。 詳細については、HoloWebへの接続をご参照ください。

  2. 上部のナビゲーションバーで、[診断と最適化] をクリックします。

  3. 左側のナビゲーションウィンドウで、[アクティブな接続の管理] をクリックします。

  4. [アクティブな接続の管理] ページで、パラメーターを設定してインスタンスの接続と関連情報を表示できます。

    説明

    すべてのインスタンスの接続に関する情報を表示できるのはスーパーユーザーのみです。 通常のユーザーは、自分のインスタンスの接続に関する情報のみを表示できます。

    パラメーターは次のとおりです。

    パラメータ

    説明

    インスタンス名

    Hologresインスタンスの名前。

    データベース

    Hologresデータベースの名前。 接続を表示するデータベースを選択できます。 このパラメータを指定しない場合、デフォルトですべてのデータベースへの接続が表示されます。

    データベース

    接続されているデータベース名。

    説明

    Postgresという名前のデータベースへの接続は、バックエンドで実行されるO&M接続です。 これらの接続は無視できます。

    ユーザー名

    接続の作成に使用されるユーザーアカウント。

    クライアントアドレス

    クライアントのIPアドレス。 表示されるIPアドレスは、クライアントの実際のIPアドレスではなく、ルーターの送信IPアドレスである場合があります。

    アプリケーション名

    インスタンスに接続されているアプリケーションの名前。

    状態

    接続のステータス。次のいずれかになります。

    • active: 接続はアクティブです。

    • idle:リソースが使用されていないことを示します。

    • idle in transaction: 接続は長時間実行されているトランザクションでアイドル状態です。

    • idle in transaction (Aborted): 接続は失敗したトランザクションでアイドル状態です。

    クエリの開始

    クエリの開始時刻。

    クエリ

    実行されるクエリ。

    説明

    クエリステートメントが長い場合、ステートメントは切り捨てられる場合があります。

    PID

    クエリのプロセスID(PID)。

    操作

    • Kill: 期待どおりに動作しない1つ以上の接続を直接閉じることができます。

    • 詳細: 接続の詳細を表示します。

SQLステートメントを実行して接続情報をクエリする

SQLステートメントを実行して接続情報をクエリできます。

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

    次のコマンドを使用して、現在のデータベースへの接続数を表示できます。メトリックの詳細については、「メトリックの説明」をご参照ください。

    • 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` ビューをクエリして、指定された状態のすべての Java Database Connectivity (JDBC) または PostgreSQL 接続をクエリするために、次の文を実行することもできます。

    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接続を使用します。 Hologresインスタンスへの最大接続数がビジネス要件を満たしている場合、これらの接続について心配する必要はありません。 HologresインスタンスへのSQL接続の数が max_connections で指定された上限に近づいているか、達している場合は、アプリケーションで接続リークが発生しているかどうかを確認します。 接続リークが発生した場合は、アプリケーションの接続プールに適切な制限を設定するか、アイドル状態の接続を解放します。 アイドル状態の接続を解放する方法の詳細については、このトピックの接続を解放するをご参照ください。

  3. 各FEノードへの接続数をクエリします。

    Hologres V1.3.23以降では、次のステートメントを実行して、Hologresインスタンスの各FEノードへの接続数をクエリできます。 このステートメントは、接続がないFEノードに関する情報は返しません。

    select * from hologres.hg_connections;

    返された結果のフィールドの説明:

    • fe_id: FEノードのID。

    • used_connections: FEノードによって使用されている接続の数。

    • max_connections: FEノードに許可される最大接続数。 このフィールドの値は、 show max_connections コマンドの戻り値と同じです。

接続を解放する

次のシナリオでは、HologresインスタンスまたはHologresインスタンスの単一のFEノードへの接続数が上限に達します。

  • 接続数が 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

これらのシナリオでは、スーパーユーザーとしてHologresインスタンスに接続し、次のステートメントを実行して、過剰なアイドル状態の接続が存在するかどうかを確認できます。

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は、Hologresインスタンスのスーパーユーザー用に接続を自動的に予約します。 インスタンスへの予約済み接続の数は、インスタンスの仕様によって異なります。 詳細については、インスタンス管理をご参照ください。 Hologresインスタンスの場合、予約済み接続は、インスタンスへの接続数が上限に達したときにスーパーユーザーが接続を管理するために使用されます。 たとえば、スーパーユーザーはアイドル状態の接続を閉じることができます。 通常のユーザーが使用できる最大接続数は、最大接続数から予約済み接続の数を引いた値です。 通常のユーザーの場合は、スーパーユーザーアカウントを使用してデータベースを管理しないことをお勧めします。 そうしないと、接続が予約されず、接続を解放できません。

単一ユーザーの最大接続数

単一ユーザーの最大接続数を設定する

Hologres は PostgreSQL と互換性があり、単一ユーザーの最大接続数を設定できます。これにより、単一ユーザーが過剰な接続によって過剰なリソースを占有するのを防ぎます。

次のステートメントを実行して、単一ユーザーの単一のFEノードへの最大接続数を設定できます。 インスタンスに複数のノードが含まれている場合、単一ユーザーのインスタンスへの最大接続数は次のように計算されます: 単一のFEノードへの最大接続数 × ノード数

  • 構文例

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

    パラメータ

    説明

    アカウント ID

    管理するアカウントのユーザーID(UID)。 アカウントは、Alibaba CloudアカウントまたはRAMユーザーです。 アカウントがRAMユーザーの場合は、UIDの前にp4_を追加します。

    詳細については、概要をご参照ください。

    number

    最大接続数。

    有効な値: [-1, N]。 値 -1 は、単一ユーザーの接続数に制限が課されないことを示します。

  • 次の例は、UIDが 283813xxxx のRAMユーザーの最大接続数を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インスタンスへの接続数が上限に近づいているか、達している場合は、接続リークが発生している可能性があります。 アイドル状態の接続の自動解放を有効にして、特定の期間使用されていない接続を解放できます。 接続が指定された期間アイドル状態のままになっている場合、接続は自動的に閉じられます。 SQLステートメントが実行されていない接続は、アイドル状態と見なされます。

  • 制限

    Hologres V0.10.25以降では、アイドル状態の接続の自動解放がサポートされています。 HologresインスタンスのバージョンがV0.10.25より前の場合は、HologresコンソールでHologresインスタンスを手動でアップグレードするか、テクニカルサポートのDingTalkグループに参加してください。 HologresコンソールでHologresインスタンスを手動でアップグレードする方法の詳細については、「インスタンスのアップグレード」トピックの手動アップグレードをご参照ください。 Hologres DingTalkグループへの参加方法の詳細については、Hologresのオンラインサポートを受けるをご参照ください。

  • 構文例

    • セッションレベル

      -- 接続が 600,000 ミリ秒(10分)間アイドル状態の場合、接続は自動的に閉じられます。
      SET idle_session_timeout = 600000;
    • データベースレベル

      -- 接続が 600,000 ミリ秒(10分)間アイドル状態の場合、接続は自動的に閉じられます。
      ALTER DATABASE  <db_name> SET idle_session_timeout = 600000;

      db_name パラメータは、アイドル状態の接続の自動解放を有効にするデータベースの名前を指定します。

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

このトピックでは、Hologres 接続のベストプラクティスについて説明します。

  • スーパーユーザーアカウントを適切に使用します。

    • スーパーユーザーアカウントを使用してHologresインスタンスを管理したり、アプリケーションに接続したりしないことをお勧めします。 そうしないと、インスタンスへの接続数が上限に達した場合、スーパーユーザーアカウントを使用してインスタンスに接続できなくなります。

    • スーパーユーザーアカウントをO&Mアカウントとして作成できます。 これにより、インスタンスへの接続数が上限に達した場合、またはクエリが応答を停止した場合、O&Mアカウントを使用してHoloWebコンソールで接続またはクエリを管理できます。

  • 適切な接続プールを設定します。

    • セキュリティ上の理由から、Hologresはバックエンドで接続を自動的に解放しません。 アプリケーションの接続プールに適切な設定を行うことをお勧めします。 これにより、アイドル状態の接続をタイムリーに解放できます。

    • オンラインビジネスに影響を与えないように、アイドル状態の接続を定期的に解放することをお勧めします。

よくあるエラー

  • SQL 文を実行すると、次のエラーが発生します:terminating connection due to idle state timeout

  • 原因: アイドル状態の接続を自動的に解放するためのタイムアウト期間がHologresインスタンスに設定されています。 指定されたタイムアウト期間が経過すると、接続は自動的に閉じられます。 その後、このエラーメッセージが返されます。

  • 解決策: Hologresインスタンスに再度接続するか、アイドル状態の接続を自動的に解放するためのタイムアウト期間を増やします。 タイムアウト期間を増やす方法の詳細については、このトピックのアイドル状態の接続を自動的に解放するようにシステムを有効にするをご参照ください。