使用磁盘缓存提升数据库性能

选择文档版本:

本页面介绍了如何在 AlloyDB Omni 上预配、设置和使用磁盘缓存,以提高 AlloyDB Omni 安装的性能。

除了标准的 PostgreSQL 内存中共享缓冲区之外,AlloyDB Omni 磁盘缓存还可在固态硬盘 (SSD) 等快速存储空间上启用存储缓冲区。在数据目录位于较慢存储空间中的 AlloyDB Omni 安装中,磁盘缓存可加快数据检索速度。

与 PostgreSQL 共享缓冲区一样,AlloyDB Omni 磁盘缓存也是非永久性的,这意味着缓存的数据会在重启时丢失。

默认情况下,AlloyDB Omni 磁盘缓存会使用文件系统报告的所有存储空间。您可以使用 omni_disk_cache_file_size 参数定义为缓存数据预留的存储空间量。

启用 AlloyDB Omni 磁盘缓存

如需启用磁盘缓存,请完成以下所有子部分:

  1. 预配磁盘并创建文件系统
  2. 在 AlloyDB Omni 中装载缓存目录
  3. 为在容器中运行的 AlloyDB Omni 启用 AlloyDB Omni 磁盘缓存

预配磁盘并创建文件系统

对于 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) 接口挂接到虚拟机的目标本地磁盘路径的前缀,例如在 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 \
        -d google/alloydbomni
      

替换以下内容:

  • CONTAINER_NAME:为新 AlloyDB Omni 容器分配的名称,例如 my-omni
  • PASSWORD:PostgreSQL 数据库根管理员的密码。
  • DATA_DIR:您希望 AlloyDB Omni 用于其数据目录的文件系统路径。
  • CACHE_DIRECTORY_PATH: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 \
        -d docker.io/google/alloydbomni
      

替换以下内容:

  • CONTAINER_NAME:为新 AlloyDB Omni 容器分配的名称,例如 my-omni
  • PASSWORD:PostgreSQL 数据库根管理员的密码。
  • CACHE_DIRECTORY_PATH: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 /OMNI_DISK_CACHE_DIRECTORY
  sudo docker exec -it CONTAINER_NAME chmod -R a+rw  /OMNI_DISK_CACHE_DIRECTORY

Podman

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

启用磁盘缓存

如需为数据库启用磁盘缓存,请完成以下步骤:

  1. SUPERUSER 身份连接到数据库。

    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. 设置 omni_disk_cache_enabledomni_disk_cache_directory Grand Unified Configuration (GUC) 标志。

    ALTER SYSTEM SET omni_disk_cache_enabled=on;
    ALTER SYSTEM SET omni_disk_cache_directory='/OMNI_DISK_CACHE_DIRECTORY';
    
  3. (可选)默认情况下,AlloyDB Omni 会使用文件系统中的所有可用空间。如有需要,您可以通过更新 omni_disk_cache_file_size GUC 标志来替换此设置。

    ALTER SYSTEM SET omni_disk_cache_file_size=SIZE_IN_MB;
    

    SIZE_IN_MB 替换为您希望磁盘缓存使用的磁盘空间量(以 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 ... 消息。

后续步骤