ディスク キャッシュを使用してデータベースのパフォーマンスを高速化する

ドキュメントのバージョンを選択します。

このページでは、AlloyDB Omni でディスク キャッシュをプロビジョニング、設定、使用して、AlloyDB Omni のパフォーマンスを向上させる方法について説明します。

AlloyDB Omni ディスク キャッシュでは、標準の PostgreSQL インメモリ共有バッファに加えて、ソリッド ステート ドライブ(SSD)などの高速ストレージをバッファとして使用できます。ディスク キャッシュを使用すると、データ ディレクトリが低速なストレージにある AlloyDB Omni インストールでデータの取得が高速化されます。

PostgreSQL の共有バッファと同様に、AlloyDB Omni ディスク キャッシュは永続的ではありません。つまり、キャッシュに保存されたデータは再起動時に失われます。

デフォルトでは、AlloyDB Omni ディスク キャッシュはファイル システムから報告されたすべてのストレージを使用します。データ キャッシュに予約するストレージの量は、omni_disk_cache_file_size パラメータで定義できます。

AlloyDB Omni ディスク キャッシュを有効にする

コンテナ内の AlloyDB Omni のディスク キャッシュを有効にする手順は次のとおりです。

ディスクをプロビジョニングしてファイル システムを作成する

AlloyDB Omni ディスク キャッシュの場合、1 つのディスクまたは複数のディスクにファイル システムを作成し、AlloyDB Omni を使用してコンテナ内にマウントします。また、mdadmlvm などのユーティリティを使用して、複数のディスクで容量をプールし、任意のファイル システムを使用することもできます。

次の手順では、NVMe SSD を使用する Ubuntu Compute Engine インスタンスで lvmext4 を使用する方法を説明します。

  1. 使用可能なすべての物理デバイスからボリューム グループを作成します。

      nvme_prefix="STORAGE_PREFIX"
      nvme_list=$(ls "$nvme_prefix"*)
      sudo vgcreate VOLUME_GROUP ${nvme_list}

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

    • STORAGE_PREFIX: NVMe(Non-Volatile Memory Express)インターフェースを使用して仮想マシンにアタッチされるターゲット ローカル ディスクパスの接頭辞。たとえば、 Google Cloudでは、NVMe デバイスのパスは常に /dev/nvme0n で始まります。
    • VOLUME_GROUP: SSD が結合されるボリューム グループの名前。例: omni-disk-cache-volume
  2. 前の手順のボリューム グループの空き容量から論理ボリュームを作成するには、次のコマンドを使用します。

      sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP

    LOGICAL_VOLUME は、LVM によってパーティションとして扱われる論理ボリュームの名前に置き換えます。例: omni_disk_cache_device

  3. 論理ボリュームに ext4 ファイル システムを作成します。必要であれば、データの安全性に応じて他の ext4 オプションを指定することもできます。
      sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. ホストマシンのマウント ポイントとして機能するディレクトリを作成し、ファイル システムをマウントするには、次のコマンドを使用します。

      sudo mkdir /OMNI_DISK_CACHE_DIRECTORY
      sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY

    OMNI_DISK_CACHE_DIRECTORY は、マウント ポイントとして機能するディレクトリの名前またはディレクトリのパスに置き換えます。例: omni_disk_cache_directory

AlloyDB Omni 内にキャッシュ ディレクトリをマウントする

コンテナで実行されている AlloyDB Omni のディスク キャッシュを有効にする前に、AlloyDB Omni 内にキャッシュ ディレクトリをマウントする必要があります。

Docker イメージから AlloyDB Omni をインストールしてカスタマイズする方法については、AlloyDB Omni のインストールをカスタマイズするをご覧ください。

AlloyDB Omni を実行している Docker コンテナ内に OMNI_DISK_CACHE_DIRECTORY をマウントするには、次のコマンドを使用します。

Docker

      sudo docker run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

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

  • CONTAINER_NAME: 新しい AlloyDB Omni コンテナに割り当てる名前。例: my-omni
  • PASSWORD: PostgreSQL データベースの root 管理者のパスワード。
  • DATA_DIR: AlloyDB Omni がデータ ディレクトリに使用するファイル システムのパス。
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: ホストマシンのマウント ポイントにマッピングされる AlloyDB Omni コンテナ内のキャッシュ ディレクトリ。たとえば、コンテナ内のキャッシュ ディレクトリの値(OMNI_DISK_CACHE_DIRECTORY に似た /omni_disk_cache_directory または /disk/cache/inside/container)に基づきます。

Podman

      podman run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

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

  • CONTAINER_NAME: 新しい AlloyDB Omni コンテナに割り当てる名前。例: my-omni
  • PASSWORD: PostgreSQL データベースの root 管理者のパスワード。
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: ホストマシンのマウント ポイントにマッピングされる AlloyDB Omni コンテナ内のキャッシュ ディレクトリ。たとえば、コンテナ内のキャッシュ ディレクトリの値(OMNI_DISK_CACHE_DIRECTORY に似た /omni_disk_cache_directory または /disk/cache/inside/container)に基づきます。

マウントされた OMNI_DISK_CACHE_DIRECTORY に完全アクセス権を付与するには、次のコマンドを使用します。

Docker

      sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      sudo docker exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      

Podman

      sudo podman exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      sudo podman exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      

AlloyDB Omni ディスク キャッシュを有効にする

データベースの AlloyDB Omni ディスク キャッシュを有効にするには、マウントされたキャッシュ ディレクトリに Docker コンテナ内からアクセスできることを確認してから、適切な Grand Unified Configuration(GUC)パラメータを設定します。

  1. コンテナ化された AlloyDB Omni データベースにスーパーユーザーとして接続するには、次のコマンドを使用します。

    Docker

          sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgres
          

    Podman

          sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres
          
  2. パラメータの値を設定するには、AlloyDB Omni データベース内で次のコマンドを使用します。

            alter system set omni_disk_cache_enabled=on;
            alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
          
  3. デフォルトでは、AlloyDB Omni はファイル システムで使用可能なすべてのスペースを使用します。必要であれば、omni_disk_cache_file_size パラメータでデフォルト値をオーバーライドできます。

          alter system set omni_disk_cache_file_size=SIZE_IN_MB;
          
  4. キャッシュ構成パラメータの変更を有効にするには、AlloyDB Omni で実行中のコンテナを再起動します。

    Docker

          sudo docker restart CONTAINER_NAME
          

    Podman

          sudo podman restart CONTAINER_NAME
          

ディスク キャッシュの構成を確認する

AlloyDB Omni ディスク キャッシュを有効にしたら、iotopiostat などのユーティリティを使用してディスクへの読み取り / 書き込みアクティビティをモニタリングし、ディスク キャッシュにアクセスされていることを確認します。

また、AlloyDB Omni ディスク キャッシュが開いているかどうかを確認することもできます。

コンテナ内の AlloyDB Omni のディスク キャッシュ構成を確認する手順は次のとおりです。

Docker

sudo docker logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

Podman

sudo podman logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

ディスク キャッシュが正しく構成されている場合、ログに「Successfully opened omni disk cache ...」というメッセージが記録されます。

次のステップ