除了标准的 PostgreSQL 内存中共享缓冲区之外,AlloyDB Omni 磁盘缓存还可在固态硬盘 (SSD) 等快速存储空间上启用存储缓冲区。在数据目录位于较慢存储空间中的 AlloyDB Omni 安装中,磁盘缓存可加快数据检索速度。
与 PostgreSQL 共享缓冲区一样,AlloyDB Omni 磁盘缓存也是非永久性的,这意味着缓存的数据会在重启时丢失。
默认情况下,AlloyDB Omni 磁盘缓存会使用文件系统报告的所有存储空间。您可以使用 omni_disk_cache_file_size
参数定义为缓存数据预留的存储空间量。
启用 AlloyDB Omni 磁盘缓存
如需为容器中的 AlloyDB Omni 启用磁盘缓存,请按照以下步骤操作。
预配磁盘并创建文件系统
对于 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 磁盘缓存,请先确保可以从 Docker 容器内访问已装载的缓存目录,然后设置相应的全局统一配置 (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
验证磁盘缓存配置
启用 AlloyDB Omni 磁盘缓存后,可使用 iotop
或 iostat
等实用程序监控对磁盘进行的读写活动,以验证是否可以访问磁盘缓存。
此外,您还可以检查 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 ...”消息。