自動メモリ管理について

ドキュメントのバージョンを選択してください。

AlloyDB Omni は、メモリ管理に適応型のアルゴリズムを使用します。

AlloyDB Omni の起動時に、共有バッファの上限を設定できます。上限を設定しない場合、AlloyDB Omni は共有バッファのバックアップ サイズをシステムメモリの 80% に自動的に設定します。共有バッファの初期バックアップ サイズは上限とは異なる場合があります。

AlloyDB Omni は、メモリのステータスを常にモニタリングし、データをキャッシュに保存するときに最適なパフォーマンスを発揮するよう、共有バッファのバックアップ サイズを調整するインテリジェントなメモリワーカーから構成されています。

自動メモリ

デフォルトでは、shared_buffers パラメータは 0 に設定されています。これは、shared buffers キャッシュのサイズの上限をシステムメモリの 80% に設定する特別な値です。AlloyDB Omni は、shared_buffers の上限の 10% から開始します。shared_buffers がカスタム値でオーバーライドされている場合、AlloyDB Omni は、その値を shared_buffers サイズの上限として扱い、指定されたカスタムサイズで開始します。

カスタムサイズを指定するには、shared_buffers1GB に設定します。方法はデプロイタイプによって異なります。

Linux ベースのインストール(RPM を含む)の場合は、次のいずれかの方法で shared_buffers パラメータを設定できます。変更を適用したら、サービスを再起動する必要があります。

  • オプション 1: 構成ファイルを編集する

    1. 編集する postgresql.conf ファイルを開きます。

    2. 次の行を追加または変更します。

      shared_buffers = 1GB
      
    3. ファイルを保存して、AlloyDB Omni サービスを再起動します。

      sudo systemctl restart alloydbomniMAJOR_VERSION

      MAJOR_VERSION は、AlloyDB Omni インストールのメジャー バージョン(18 など)に置き換えます。

  • オプション 2: ALTER SYSTEM コマンドを使用する

    1. SQL クライアントを使用してデータベース インスタンスに接続します。

    2. 次のコマンドを実行します。

      ALTER SYSTEM SET shared_buffers = '1GB';
      
    3. AlloyDB Omni サービスを再起動します。

      sudo systemctl restart alloydbomniMAJOR_VERSION

      MAJOR_VERSION は、AlloyDB Omni インストールのメジャー バージョン(18 など)に置き換えます。

クエリのパフォーマンスの最適化

shared_buffers パラメータのデフォルト値は、一般的なシナリオで機能します。

ただし、パフォーマンスを最適化するために値を調整できます。デフォルト値の shared_buffers から共有バッファの上限を推測する場合は、cgroup memory.max 値を使用して計算します。

カラム型エンジンのメモリ

動的 shared_buffers は、カラム型エンジンのメモリとは独立しています。カラム型エンジンが有効になっている場合、動的 shared_buffers サイズは、カラム型エンジンで使用されるメモリ量を、システムまたは cgroup で使用可能な合計メモリの 80% から差し引いて導出します。

huge page

huge page を使用すると、データベースのパフォーマンスが向上します。AlloyDB Omni は、可能であれば huge page を明示的に管理します。可能でない場合、オペレーティング システムの transparent huge page(THP)機能に依存します。どちらの huge page タイプもサポートされていない場合、AlloyDB Omni は 4k ページにフォールバックし、データベースログ に警告を出力して、huge page の設定手順を具体的に示します。

警告は次のようになります。


HINT:  Please manually execute:
          echo within_size | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
          sudo sysctl -w vm.nr_overcommit_hugepages="$(/usr/bin/awk '/MemTotal/ { printf "%.0f", $2/1024 }' /proc/meminfo)"

実行時の自動メモリ管理

AlloyDB Omni はシステム負荷を継続的にモニタリングし、パフォーマンスを向上させるためにメモリ使用量を調整します。具体的には、次のような処理が行われます。

動的 shared_buffers のサイズを変更する
AlloyDB Omni は、システムメモリの使用量が少ない場合は動的 shared_buffers サイズを増やし、システムメモリの使用量が多い場合はサイズを減らします。`g_memory` 拡張機能は AlloyDB Omni ディストリビューションに含まれています。この機能を有効にして動的 `shared_buffers` サイズをモニタリングするには、次のコマンドを実行します。
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
システムのメモリが非常に不足している場合に PostgreSQL 接続を終了する
AlloyDB Omni は、システムのメモリが非常に不足していることを検出すると、負荷が適切なレベルに戻るまで、メモリ使用量が最も多い PostgreSQL 接続を終了しようとします。このようなイベントが発生すると、AlloyDB Omni はデータベースログに次の例のようなエントリを記録します。
WARNING: Sending SIGTERM to pid=12345 NSpid=67890 (VA size = 1024MB) (RSS size = 512MB)