自動メモリ管理について

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 サイズの上限として尊重し、指定されたカスタムサイズで開始します。

カスタムサイズを指定するには、postgresql.conf 構成ファイルを編集します。たとえば、次のいずれかを使用して shared_buffers1GB に設定できます。

  • docker run --name CONTAINER_NAME -e INITDB_ARGS="-c shared_buffers=1GB" $image

  • docker run --name CONTAINER_NAME $image -c shared_buffers=1GB

    CONTAINER_NAME は、AlloyDB Omni コンテナのインストール時に割り当てた名前に置き換えます。

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

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

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

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

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

巨大ページ

巨大ページを使用すると、データベースのパフォーマンスが向上します。AlloyDB Omni は、可能であれば巨大ページを明示的に管理します。可能でない場合、オペレーティング システムのトランスペアレントな巨大ページ(THP)機能に依存します。どちらの巨大ページタイプもサポートされていない場合、AlloyDB Omni は 4k ページにフォールバックし、Docker コンテナ ログ docker logs $container_name に警告を印刷し、巨大ページの設定手順を具体的に示します。コンテナの起動方法については、AlloyDB Omni を起動するをご覧ください。

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

HINT:  Please either execute the all-in-one setup script:
          docker run --rm --privileged $image setup-host
        OR manually execute:
          echo within_size | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
          sudo sysctl -w vm.nr_overcommit_hugepages=1048576

実行時の自動メモリ管理

AlloyDB Omni はシステム負荷を継続的にモニタリングし、パフォーマンスを向上させるためにメモリ使用量を調整します。具体的には、次のようなことが起こる可能性があります。

動的 shared_buffers サイズ変更
AlloyDB Omni は、システムメモリの使用量が少ない場合は動的 shared_buffers サイズを増やし、システムメモリの使用量が多い場合はサイズを減らします。動的 shared_buffers サイズをモニタリングするには、次のコマンドを使用します。
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
システムのメモリが非常に不足している場合の PostgreSQL 接続の終了
AlloyDB Omni は、システムのメモリが非常に不足していることを検出すると、負荷が適切なレベルに戻るまで、メモリ使用量が最も多い PostgreSQL 接続を削除しようとします。このようなイベントが発生すると、AlloyDB Omni は Docker コンテナログに次のように記録します。
WARNING: Sending SIGTERM to pid=xxx NSpid=xxx (VA size = xxxMB) (RSS size = xxxMB)