マネージド接続プーリングを構成する

このページでは、AlloyDB for PostgreSQL でマネージド接続プールを有効にして接続し、モニタリングする方法について説明します。マネージド接続プーリングは、事前に確立された接続のプールを維持することで、データベース接続管理を最適化する設計パターンです。その後、この接続プールは、データベース オペレーションごとに接続を開いたり閉じたりすることなく、アプリケーションによって再利用されます。これにより、パフォーマンスとリソース使用率が向上します。

マネージド接続プールを使用すると、AlloyDB インスタンスのリソース使用量と接続レイテンシを最適化して、データベース ワークロードをスケーリングできます。マネージド接続プーリングは、プールと多重化を使用して、可能な場合は受信リクエストにサーバー接続を動的に割り当てます。このアプローチでは、急激な接続の急増を吸収し、既存のデータベース接続を再利用することで、特にスケーリングされた接続でパフォーマンスが向上します。マネージド接続プーリングを使用する場合、アプリケーションは特定のデータベースに接続するのではなく、プーラーに接続します。これにより、読み取りワークロードの接続時間が短縮され、スケーラビリティが向上します。

マネージド接続プーリングは任意のトランザクション ワークロードに使用できますが、マネージド接続プーリングは、存続期間の短い接続が多数含まれるアプリケーションや、接続の急増が発生する可能性があるアプリケーションに最適です。

始める前に

直接接続を使用してインスタンスに接続する必要があります。マネージド接続プーリングは、AlloyDB Auth Proxy または AlloyDB 言語コネクタとの接続をサポートしていません。

必要なロール

マネージド接続プールを有効にして使用するために必要な権限を取得するには、AlloyDB インスタンスに対する Cloud AlloyDB 管理者 roles/alloydb.admin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

この事前定義ロールには、マネージド接続プールの有効化と使用に必要な alloydb.instances.update 権限が含まれています。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

高度な構成のオプション

AlloyDB マネージド接続プーリングは、次の高度なプーリング構成オプションをサポートしています。これらの構成オプションを使用して、マネージド接続プールをインスタンスのニーズに合わせてカスタマイズできます。これらの構成は、Google Cloud コンソール、gcloud CLI、または AlloyDB API を使用してインスタンスレベルで設定できます。

構成名 説明
接続モード
connection-pooling-pool-mode
接続モードには、トランザクション(デフォルト)またはセッションを選択できます。

トランザクション(transaction):
トランザクション レベルで接続をプールします。サーバー接続は、トランザクション中にクライアントに割り当てられます。トランザクションが完了すると、サーバー接続はプールに戻されます。

セッション(session):
セッション レベルで接続をプールします。サーバー接続は、接続が維持されている間、クライアントに割り当てられます。クライアントが切断すると、サーバー接続はプールに戻されます。
最大プールサイズ
connection-pooling-max-pool-size
接続プールの最大サイズ。デフォルト値は 50 接続です。
最小プールサイズ
connection-pooling-min-pool-size
接続プールの最小サイズ。デフォルト値は 0 接続です。
アイドル状態のクライアント接続のタイムアウト(秒)
connection-pooling-client-connection-idle-timeout
クライアント接続がタイムアウトするまでのアイドル状態の保持時間。この値の範囲は 0 ~ 2,147,483 秒で、デフォルト値は 0 秒です。このパラメータは、Google Cloud コンソールを使用してのみ構成できます。
アイドル状態のサーバー接続のタイムアウト(秒)
connection-pooling-server-connection-idle-timeout
サーバー接続がタイムアウトするまでのアイドル状態の時間を指定します。この値の範囲は 0 ~ 2,147,483 秒で、デフォルト値は 600 秒です。
クエリ待機のタイムアウト(秒)
connection-pooling-query-wait-timeout
クエリがタイムアウトするまでの待機時間。この値の範囲は 0 ~ 2,147,483 秒で、デフォルト値は 120 秒です。
最大準備済みステートメント
connection-pooling-max-prepared-statements
トランザクション プーリング モードで送信される準備済みステートメント コマンドの最大数。デフォルト値は 0 です。
スタートアップ パラメータを無視する
connection-pooling-ignore-startup-parameters
無視するパラメータ(デフォルトでは、起動パケットでトラッキングされません)。
サーバーのライフタイム
connection-pooling-server-lifetime
マネージド接続プーリングがサーバー接続をクローズするまでの、サーバー接続が使用されていない最大時間。デフォルト値は 3,600 秒です。このパラメータは、Google Cloud コンソールを使用してのみ構成できます。

デフォルトでは、マネージド接続プーリングが AlloyDB サーバーへの接続を開始します。クライアント接続が確立され、認証されると、マネージド接続プーリングによって 1 つ以上のサーバー接続が作成され、プールのサイズが選択した構成と一致する場合があります。クライアント接続には、使用可能なサーバー接続が割り当てられます。サーバー接続は、明示的に閉じられるか、アイドル状態のサーバー接続のタイムアウト時間を超えてアイドル状態になるまで維持されます。

マネージド接続プーリングを有効にする

既存または新規のインスタンスでマネージド接続プールを有効にできます。

新しいプライマリ インスタンスで有効にする

マネージド接続プールを有効にして新しいプライマリ インスタンスを作成するには、プライマリ インスタンスを作成するをご覧ください。インスタンスのマネージド接続プールを有効にするには、Google Cloud コンソール、Google Cloud CLI、または AlloyDB API を使用します。

新しい読み取りプール インスタンスで有効にする

マネージド接続プールを有効にして新しい読み取りプール インスタンスを作成するには、読み取りプール インスタンスを作成するをご覧ください。インスタンスのマネージド接続プールを有効にするには、Google Cloud コンソール、Google Cloud CLI、または AlloyDB API を使用します。

既存のインスタンスで有効にする

既存のインスタンスでマネージド接続プールを有効にするには、Google Cloud コンソール、Google Cloud CLI、または AlloyDB API を使用します。

コンソール

  1. [クラスタ] ページに移動します。

    [クラスタ] に移動

  2. [リソース名] 列でクラスタをクリックします。

  3. [概要] ページで、[クラスタ内のインスタンス] に移動します。

  4. [プライマリを編集] または [読み取りプールを編集] をクリックします。

  5. [マネージド接続プール] で、[マネージド接続プールを有効にする] チェックボックスをオンにします。

  6. 省略可: マネージド接続プーリング オプションを構成するには、[詳細なプーリング オプション] をクリックします。

    マネージド接続プーリング オプションは、インスタンスのニーズに合わせてカスタマイズできます。詳細については、詳細な構成オプションをご覧ください。

  7. [変更を保存] をクリックします。

gcloud

既存のプライマリ プールまたは読み取りプール インスタンスでマネージド接続プールを有効にするには、次の gcloud alpha alloydb instances update コマンドを使用します。

gcloud alpha alloydb instances update INSTANCE_ID \
  --project=PROJECT_ID \
  --region=REGION_ID \
  --cluster=CLUSTER_ID \
  --enable-connection-pooling

次のように置き換えます。

  • INSTANCE_ID: マネージド接続プールを有効にする AlloyDB インスタンスの ID。
  • PROJECT_ID: プロジェクトの ID。
  • REGION_ID: リージョンの ID。
  • CLUSTER_ID: クラスタの ID。

マネージド接続プールを有効にしたら、詳細な構成オプションを設定して、インスタンスのニーズに合わせてマネージド接続プール オプションをカスタマイズできます。構成オプションの設定方法の詳細については、インスタンスのマネージド接続プールを変更するをご覧ください。

REST

既存のプライマリ プールまたは読み取りプール インスタンスでマネージド接続プールを有効にするには、次のコマンドを使用して connectionPoolConfig を設定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • LOCATION_ID: クラスタのリージョンの ID。
  • CLUSTER_ID: クラスタの ID。先頭は英小文字にします。英小文字、数字、ハイフンを使用できます。
  • INSTANCE_ID: インスタンスの ID。

HTTP メソッドと URL:

PATCH https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID

リクエストの本文(JSON):

{
  "connectionPoolConfig": {
    "enabled": true
  }
}

マネージド接続プールに接続する

マネージド接続プーリングへの接続は、ポートが異なることを除き、直接データベース接続と同じです。マネージド接続プーリングはポート 6432 でリッスンします。AlloyDB インスタンスに追加されたすべてのユーザーは、マネージド接続プールを使用して接続できます。

組み込み認証を使用して接続する

このコマンドの例では、組み込みの認証を使用して AlloyDB インスタンスをマネージド接続プールに接続します。

psql postgresql://USERNAME:PASSWORD@IP_ADDRESS:6432/postgres

SSL 接続を使用して接続する

インスタンス SSL モードは、マネージド接続プールへの接続にも適用されます。デフォルトでは、SSL 接続のみが受け入れられます。暗号化されていない接続を許可するには、次の gcloud alloydb instances update コマンドを使用して、インスタンスの SSL モードを ALLOW_UNENCRYPTED_AND_ENCRYPTED に設定します。

gcloud alloydb instances update INSTANCE_ID \
  --project=PROJECT_ID \
  --region=REGION_ID \
  --cluster=CLUSTER_ID \
  --ssl-mode=ALLOW_UNENCRYPTED_AND_ENCRYPTED

インスタンスのマネージド接続プールを変更する

マネージド接続プーリングを有効にしたら、高度な構成オプションを使用して、インスタンスのニーズに合わせてマネージド接続プーリング オプションをカスタマイズできます。これらの構成オプションは、マネージド接続プーリング フラグと呼ばれます。構成オプション、デフォルト値、範囲の詳細については、詳細な構成オプションをご覧ください。

既存のインスタンスのマネージド接続プールの構成オプションを変更するには、Google Cloud コンソール、Google Cloud CLI、または AlloyDB API を使用します。

コンソール

  1. [クラスタ] ページに移動します。

    [クラスタ] に移動

  2. [リソース名] 列でクラスタをクリックします。

  3. [概要] ページで、[クラスタ内のインスタンス] に移動します。

  4. 変更するインスタンスの [インスタンスを編集] または [読み取りプールを編集] をクリックします。

  5. [マネージド接続プール] で、[高度なプーリング オプション] を開きます。

  6. 更新する高度なプーリング オプションを変更します。次のオプションを変更できます。

    • 接続モード
    • 最大プールサイズ
    • 最小プールサイズ
    • クライアント接続の最大数
    • アイドル状態のクライアント接続のタイムアウト(秒)
    • アイドル状態のサーバー接続のタイムアウト(秒)
    • クエリ待機のタイムアウト
    • 準備済みステートメントの最大数
    • スタートアップ パラメータを無視する
    • サーバーのライフタイム
  7. [Update instance] をクリックします。

gcloud

既存のインスタンスのマネージド接続プールの構成オプションを変更するには、次の gcloud alpha alloydb instances update コマンドを使用します。

  gcloud alpha alloydb instances update INSTANCE_ID \
    --project=PROJECT_ID \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    { \
      --connection-pooling-pool-mode=CONNECTION_MODE \
      | --connection-pooling-max-pool-size=MAX_POOL_SIZE \
      | --connection-pooling-min-pool-size=MIN_POOL_SIZE \
      | --connection-pooling-max-client-connections=MAX_CLIENT_CONNECTION \
      | --connection-pooling-server-idle-timeout=SERVER_IDLE_TIMEOUT_PERIOD \
      | --connection-pooling-query-wait-timeout=QUERY_WAIT_TIMEOUT_PERIOD \
      | --connection-pooling-ignore-startup-parameters=IGNORE_STARTUP_PARAMETERS \
    }

次のように置き換えます。

  • INSTANCE_ID: マネージド接続プールを無効にする AlloyDB インスタンスの名前。
  • PROJECT_ID: プロジェクトの ID。
  • REGION_ID: リージョンの ID。
  • CLUSTER_ID: クラスタの ID。
  • 次のオプションを構成できます。

    • --connection-pooling-pool-modesession または transaction のいずれかにする必要があります。
    • --connection-pooling-max-pool-size
    • --connection-pooling-min-pool-size
    • --connection-pooling-max-client-connections
    • --connection-pooling-server-idle-timeout
    • --connection-pooling-query-wait-timeout
    • --connection-pooling-ignore-startup-parameters

REST

既存の読み取りプール インスタンスのマネージド接続プールの構成オプションを変更するには、次のコマンドを使用して connectionPoolConfig を設定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • LOCATION_ID: クラスタのリージョンの ID。
  • CLUSTER_ID: 作成するクラスタの ID。先頭は英小文字にします。英小文字、数字、ハイフンを使用できます。
  • INSTANCE_ID: 作成するインスタンスの ID。
  • 次のオプションを構成できます。

    • POOL_MODEsession または transaction のいずれかにする必要があります。
    • MAX_POOL_SIZE
    • MIN_POOL_SIZE
    • MAX_CLIENT_CONNECTION
    • SERVER_IDLE_TIMEOUT
    • QUERY_WAIT_TIMEOUT
    • IGNORE_STARTUP_PARAMETERS

HTTP メソッドと URL:

PATCH https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID

リクエストの本文(JSON):

{
  "connectionPoolConfig": {
    "enabled": true,
    "flags": {
      "pool_mode": "POOL_MODE",
      "max_pool_size": "MAX_POOL_SIZE",
      "min_pool_size": "MIN_POOL_SIZE",
      "max_client_connection": "MAX_CLIENT_CONNECTION",
      "server_idle_timeout": "SERVER_IDLE_TIMEOUT",
      "query_wait_timeout": "QUERY_WAIT_TIMEOUT",
      "ignore_startup_parameters": "IGNORE_STARTUP_PARAMETERS"
    },
  }
}

インスタンスのマネージド接続プールのステータスを表示する

インスタンスのマネージド接続プールのステータスは、Google Cloud コンソール、Google Cloud CLI、または AlloyDB API を使用して確認できます。

コンソール

  1. [クラスタ] ページに移動します。

    [クラスタ] に移動

  2. [リソース名] 列でクラスタをクリックします。

  3. [概要] ページで、マネージド接続プールのステータスを表示するインスタンスを見つけます。[マネージド接続プーリング] フィールドには、有効か無効かが表示されます。

gcloud

既存のインスタンスのマネージド接続プールのステータスを表示するには、次の gcloud alpha alloydb instances describe コマンドを使用します。

gcloud alpha alloydb instances describe INSTANCE_ID \
  --project=PROJECT_ID \
  --region=REGION_ID \
  --cluster=CLUSTER_ID \
  --format="value(connectionPoolConfig.enabled)"

次のように置き換えます。

  • INSTANCE_ID: マネージド接続プーリング オプションを変更する AlloyDB インスタンスの名前。
  • PROJECT_ID: プロジェクトの ID。
  • REGION_ID: リージョンの ID。
  • CLUSTER_ID: クラスタの ID。

マネージド接続プーリングが有効になっている場合、次のレスポンスが返されます。

True

REST

AlloyDB インスタンスのマネージド接続プーリングのステータスを表示するには、次のコマンドを使用して connectionPoolConfig を探します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • LOCATION_ID: クラスタのリージョンの ID。
  • CLUSTER_ID: 作成するクラスタの ID。先頭は英小文字にします。英小文字、数字、ハイフンを使用できます。
  • INSTANCE_ID: 作成するインスタンスの ID。

HTTP メソッドと URL:

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID

既存のインスタンスでマネージド接続プールを無効にする

既存のインスタンスのマネージド接続プールを無効にするには、Google Cloud コンソール、Google Cloud CLI、または AlloyDB API を使用します。

コンソール

  1. [クラスタ] ページに移動します。

    [クラスタ] に移動

  2. [リソース名] 列でクラスタをクリックします。

  3. [概要] ページで、[クラスタ内のインスタンス] に移動します。

  4. マネージド プーリング接続を無効にするインスタンスの [インスタンスの編集] または [読み取りプールの編集] をクリックします。

  5. [マネージド接続プール] で、[マネージド接続プールを有効にする] チェックボックスをオフにします。

  6. [Update instance] をクリックします。

gcloud

既存のインスタンスでマネージド接続プールを無効にするには、次の gcloud alpha alloydb instances update コマンドを使用します。

gcloud alpha alloydb instances update INSTANCE_ID \
  --project=PROJECT_ID \
  --region=REGION_ID \
  --cluster=CLUSTER_ID \
  --no-enable-connection-pooling

次のように置き換えます。

  • INSTANCE_ID: マネージド接続プールを無効にする AlloyDB インスタンスの名前。
  • PROJECT_ID: プロジェクトの ID。
  • REGION_ID: リージョンの ID。
  • CLUSTER_ID: クラスタの ID。

REST

既存の読み取りプール インスタンスのマネージド接続プールを無効にするには、次のコマンドを使用して connectionPoolConfigfalse に設定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • LOCATION_ID: クラスタのリージョンの ID。
  • CLUSTER_ID: 作成するクラスタの ID。先頭は英小文字にします。英小文字、数字、ハイフンを使用できます。
  • INSTANCE_ID: 作成するインスタンスの ID。

HTTP メソッドと URL:

PATCH https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID

リクエストの本文(JSON):

{
  "connectionPoolConfig": {
    "enabled": false
  }
}

マネージド接続プーリングをモニタリングする

AlloyDB には、インスタンスでマネージド接続プーリングがどのように実行されているかをモニタリングするために役立つ次の指標が用意されています。これらの指標は、Metrics Explorer を使用して表示できます。

指標名 説明
接続プールの数

/database/conn_pool/num_pools
データベースあたりの接続プールの合計数。
クライアントとの接続

/database/conn_pool/client_connections
データベースごとにクライアント接続のステータス別にグループ化されたクライアント接続の数を追跡します。この指標に含まれるステータスは次のとおりです。
  • active: 保留中のクエリ リクエストがないアイドル状態のクライアントを含む、データベースあたりのアクティブな接続数。
  • waiting: データベースごとにサーバー接続を待機しているクライアントの数。
サーバー接続

/database/conn_pool/server_connections
データベースごとにサーバー接続のステータス別にグループ化されたサーバー接続の数を追跡します。この指標に含まれるステータスは次のとおりです。
  • active: データベースあたりのアクティブな接続数。
  • idle: データベースあたりのアイドル状態のサーバー接続数。
平均待ち時間

/database/conn_pool/client_connections_avg_wait_time
すべてのクライアントがサーバーの待機状態に費やした平均時間(データベースあたりマイクロ秒単位)。

詳細については、AlloyDB の指標をご覧ください。

制限事項

プレビュー リリース中は、次の制限が適用されます。これらの制限は、一般提供のリリース時またはリリース後に変更または削除される可能性があります。

  • マネージド接続プーリングは、AlloyDB Auth Proxy または AlloyDB 言語コネクタとの接続をサポートしていません。
  • トランザクション プーリング モードでマネージド接続プーリングを使用する場合、次の SQL 機能はサポートされません。
    • SET/RESET
    • LISTEN
    • WITH HOLD CURSOR
    • PREPARE/DEALLOCATE
    • PRESERVE/DELETE ROW 一時テーブル
    • LOAD
    • セッション レベルのアドバイザリ ロック
    • プロトコル レベルの準備済みプラン