このページでは、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 をコンテナで実行するか、Kubernetes クラスタで実行するかによって異なります。
単一サーバー
ディスクをプロビジョニングしてファイル システムを作成する
AlloyDB Omni ディスク キャッシュの場合、ディスクまたは複数のディスクにファイル システムを作成し、AlloyDB Omni を使用してコンテナ内にマウントします。また、mdadm
や lvm
などのユーティリティを使用して、複数のディスクを使用して容量をプールし、任意のファイル システムを使用することもできます。
次の手順では、NVMe SSD を使用する Ubuntu Compute Engine インスタンスで lvm
と ext4
を使用する方法を示します。
使用可能なすべての物理デバイスからボリューム グループを作成します。
nvme_prefix="STORAGE_PREFIX" nvme_list=$(ls "$nvme_prefix"*) sudo vgcreate VOLUME_GROUP ${nvme_list}
次のように置き換えます。
STORAGE_PREFIX
: ノン ボラティル メモリ エクスプレス(NVMe)インターフェースを使用して仮想マシンにアタッチされるターゲット ローカル ディスクパスの接頭辞。たとえば、 Google Cloudでは、NVMe デバイスパスは常に/dev/nvme0n
で始まります。VOLUME_GROUP
: SSD が結合されるボリューム グループの名前(例:omni-disk-cache-volume
)。
-
前の手順のボリューム グループの空き容量から論理ボリュームを作成するには、次のコマンドを使用します。
sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP
LOGICAL_VOLUME
は、LVM によってパーティションとして扱われる論理ボリュームの名前に置き換えます(omni_disk_cache_device
など)。 - 論理ボリュームに
ext4
ファイル システムを作成します。必要に応じて、データの安全性に応じて他のext4
オプションを指定できます。sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
ホストマシンのマウント ポイントとして機能するディレクトリを作成し、ファイル システムをマウントするには、次のコマンドを使用します。
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 データベースのルート管理者のパスワード。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 データベースのルート管理者のパスワード。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 ディスク キャッシュを有効にする
データベースで AlloyDB Omni ディスク キャッシュを有効にするには、マウントされたキャッシュ ディレクトリに Docker コンテナ内からアクセスできることを確認してから、適切な Grand Unified Configuration(GUC)パラメータを設定します。
-
コンテナ化された 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
-
パラメータの値を設定するには、AlloyDB Omni データベース内で次のコマンドを使用します。
alter system set omni_disk_cache_enabled=on; alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
-
デフォルトでは、AlloyDB Omni はファイル システムで使用可能なすべてのスペースを使用します。必要に応じて、
omni_disk_cache_file_size
パラメータを使用してデフォルト値をオーバーライドできます。alter system set omni_disk_cache_file_size=SIZE_IN_MB;
-
キャッシュ構成パラメータの変更を有効にするには、AlloyDB Omni で実行中のコンテナを再起動します。
Docker
sudo docker restart CONTAINER_NAME
Podman
sudo podman restart CONTAINER_NAME
Kubernetes
汎用ボリュームでディスク キャッシュを有効にする
汎用ボリュームを使用してディスク キャッシュを有効にできます。
AlloyDB Omni Kubernetes オペレーターの汎用ボリュームでディスク キャッシュを有効にするには、事前に準備した永続ボリュームと storageClass
が必要です。
たとえば、GKE を使用しているときに永続ボリュームと storageClass
が準備できていない場合は、汎用ボリュームでディスク キャッシュを有効にする前に、次の操作を完了していることを確認してください。
- ローカル SSD ベースのストレージを使用するクラスタを作成しました。
- ローカル ボリュームの静的プロビジョナーを実行するの手順 1 で、ボリュームを ext4 ファイル システムにフォーマットしました。
- ストレージ デバイス上の永続ストレージを定義する
storageClass
を使用して、クラスタ内の SSD ごとに永続ボリュームを手動で作成しました。
データベースの汎用ボリュームでディスク キャッシュを有効にするには、次の操作を行います。
データベース クラスタ マニフェストを変更して、
spec
セクションのfeatures
セクションにultraFastCache
属性を追加します。apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "15.7.0" primarySpec: features: ultraFastCache: cacheSize: DISK_CACHE_SIZE genericVolume: storageClass: "STORAGE_CLASS_NAME" ...
次のように置き換えます。
DB_CLUSTER_NAME
: データベース クラスタの名前。これは、作成時に宣言したデータベース クラスタ名と同じです。DISK_CACHE_SIZE
: キャッシュのサイズ(例:100Gi
)。shared_buffers
より大きい値にしてください。このフィールドは省略可能です。このフィールドの値を指定しない場合、AlloyDB Omni はディスク上の残りのスペースをすべて使用します。これは、コンテナ内の AlloyDB Omni と Kubernetes クラスタの両方に適用されます。STORAGE_CLASS_NAME
: 超高速キャッシュ ボリュームのstorage class
の名前(例:local-storage
)。
- マニフェストを再度適用します。
ローカル ボリュームでディスク キャッシュを有効にする
ローカル ボリュームを使用する場合は、永続ボリュームを作成する必要はありません。代わりに、次の最適化を使用できます。
たとえば、GKE を使用しているときに永続ボリュームと storageClass
の準備ができていない場合は、ローカル ボリュームでディスク キャッシュを有効にする前に、次の操作を完了していることを確認してください。
- ローカル SSD ベースのストレージを使用するクラスタを作成しました。
- ローカル ボリュームの静的プロビジョナーを実行するの手順 1 で、ボリュームを ext4 ファイル システムにフォーマットしました。
データベースのローカル ボリュームでディスク キャッシュを有効にするには、次の操作を行います。
データベース クラスタ マニフェストを変更して、
spec
セクションのfeatures
セクションにultraFastCache
属性を追加します。apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "15.7.0" primarySpec: features: ultraFastCache: cacheSize: DISK_CACHE_SIZE localVolume: path: "LOCAL_VOLUME_PATH" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: "LABEL_KEY" operator: "OPERATOR_VALUE" values: - "LABEL_KEY_VALUE" ...
次のように置き換えます。
CLUSTER_NAME
: データベース クラスタの名前。これは、作成時に宣言したデータベース クラスタ名と同じです。DISK_CACHE_SIZE
: キャッシュのサイズ(例:100Gi
)。shared_buffers
より大きい値にしてください。このフィールドは省略可能です。このフィールドの値を指定しない場合、AlloyDB Omni はディスク上の残りのスペースをすべて使用します。これは、コンテナ内の AlloyDB Omni と Kubernetes クラスタの両方に適用されます。STORAGE_CLASS_NAME
: ストレージ クラスの名前。LOCAL_VOLUME_PATH
: ローカル ボリュームのパス(例:/mnt/disks/raid/0
)。LABEL_KEY
: ロケーション インジケーターとして機能し、クラスタ全体に Pod を均等に分散するキーのノードラベル(例:cloud.google.com/gke-local-nvme-ssd
)。OPERATOR_VALUE
: キーと値のセットの関連付け(例:In
)。パラメータを次のいずれかに設定します。-
In
: values 配列は空でないこと。 -
NotIn
: values 配列は空でないこと。 -
Exists
: values 配列は空にする必要があります。 -
DoesNotExist
: values 配列は空にする必要があります。 -
Gt
: 値の配列には、整数として解釈される単一の要素が必要です。 -
Lt
: 値の配列には、整数として解釈される単一の要素が必要です。
-
LABEL_KEY_VALUE
: ラベルキーの値(例:true
)。次のように、パラメータを文字列値の配列に設定します。- 演算子が
In
またはNotIn
の場合、値の配列は空でないこと。 - 演算子が
Exists
またはDoesNotExist
の場合、値の配列は空にする必要があります。 - 演算子が
Gt
またはLt
の場合、値の配列には整数として解釈される単一の要素が必要です。
- 演算子が
- マニフェストを再度適用します。
ディスク キャッシュの構成を確認する
AlloyDB Omni ディスク キャッシュを有効にしたら、iotop
や iostat
などの利用可能なユーティリティを使用してディスクへの読み取り / 書き込みアクティビティをモニタリングし、ディスク キャッシュにアクセスされていることを確認します。
また、AlloyDB Omni ディスク キャッシュが開いているかどうかを確認することもできます。
AlloyDB Omni のディスク キャッシュ構成を確認する手順は、AlloyDB Omni をコンテナで実行するか、Kubernetes クラスタで実行するかによって異なります。
単一サーバー
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"
Kubernetes
kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | grep "opened omni disk cache"
ディスク キャッシュが正しく構成されている場合、ログに Successfully opened omni disk cache ...
メッセージが表示されます。