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

选择文档版本:

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

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

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

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

启用 AlloyDB Omni 磁盘缓存

您为 AlloyDB Omni 启用磁盘缓存的步骤取决于您是在容器中还是在 Kubernetes 集群中运行 AlloyDB Omni。

在通用卷上启用磁盘缓存

您可以使用通用卷启用磁盘缓存。

如需在 AlloyDB Omni Kubernetes 操作器的通用卷上启用磁盘缓存,您需要提前准备永久性卷storageClass

例如,如果您使用 GKE 且尚未准备好永久性卷和 storageClass,请确保在通用卷上启用磁盘缓存之前执行以下操作:

  1. 创建具有基于本地 SSD 的存储空间的集群
  2. 使用运行本地卷静态预配工具的第 1 步将卷格式化为 ext4 文件系统。
  3. 在存储设备上使用定义永久性存储的 storageClass为集群中的每个 SSD 手动创建永久性卷

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

  1. 修改数据库集群清单,以将 ultraFastCache 属性添加到 spec 部分的 features 部分:

          apiVersion: alloydbomni.dbadmin.goog/v1
          kind: DBCluster
          metadata:
            name: CLUSTER_NAME
          spec:
            databaseVersion: "17.5.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 集群中的 AlloyDB Omni。
    • STORAGE_CLASS_NAME:超快缓存卷的 storage class 的名称,例如 local-storage
  2. 重新应用清单。

在本地卷上启用磁盘缓存

如果您想使用本地卷,则无需创建永久性卷。您可以改用以下优化。

例如,如果您使用 GKE 且尚未准备好永久性卷和 storageClass,请确保在本地卷上启用磁盘缓存之前执行以下操作:

  1. 创建具有基于本地 SSD 的存储空间的集群
  2. 使用运行本地卷静态预配工具的第 1 步将卷格式化为 ext4 文件系统。

如需为数据库在本地卷上启用磁盘缓存,请执行以下操作:

  1. 修改数据库集群清单,以将 ultraFastCache 属性添加到 spec 部分的 features 部分:

        apiVersion: alloydbomni.dbadmin.goog/v1
        kind: DBCluster
        metadata:
          name: CLUSTER_NAME
        spec:
          databaseVersion: "17.5.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 集群中的 AlloyDB Omni。
    • STORAGE_CLASS_NAME存储类别的名称。
    • LOCAL_VOLUME_PATH:本地卷的路径,例如 /mnt/disks/raid/0
    • LABEL_KEY:节点的键标签,充当位置指示器,有助于在集群中均匀分布 Pod,例如 cloud.google.com/gke-local-nvme-ssd
    • OPERATOR_VALUE:键与一组值的关系,例如 In。将该参数设置为以下值之一:
      • In:值数组不能为空。
      • NotIn:值数组不能为空。
      • Exists:值数组必须为空。
      • DoesNotExist:值数组必须为空。
      • Gt:值数组必须包含单个元素,该元素会被解释为整数。
      • Lt:值数组必须包含单个元素,该元素会被解释为整数。
    • LABEL_KEY_VALUE:标签键的值,例如 true。将该参数设置为字符串值数组,如下所示:
      • 如果运算符为 InNotIn,则值数组不得为空。
      • 如果运算符为 ExistsDoesNotExist,则值数组必须为空。
      • 如果运算符为 GtLt,则值数组必须包含单个元素,该元素将被解释为整数。
  2. 重新应用清单。

在临时卷上启用磁盘缓存

您可以使用 emptyDir 卷启用磁盘缓存,该卷提供直接与 Pod 生命周期相关联的临时存储空间。该卷是在将 Pod 分配给节点时创建的,只要 Pod 在该节点上运行,该卷就会存在。

当 pod 从节点中移除时,emptyDir 中的数据将被永久删除。这种类型的卷适合用作缓存,因为它提供临时快速存储。如果 pod 重新调度,则无需保留缓存中的数据。

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

  1. 修改数据库集群清单,以将 ultraFastCache 属性添加到 spec 部分的 features 部分,并指定 emptyDirVolume

          apiVersion: alloydbomni.dbadmin.goog/v1
          kind: DBCluster
          metadata:
            name: CLUSTER_NAME
          spec:
            databaseVersion: "17.5.0"
            primarySpec:
              features:
                ultraFastCache:
                  cacheSize: DISK_CACHE_SIZE
                  emptyDirVolume: {}
            ...
          

    替换以下内容:

    • CLUSTER_NAME:您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。
    • DISK_CACHE_SIZE:缓存的大小,例如 200Gi。
  2. 重新应用清单。

验证磁盘缓存配置

启用 AlloyDB Omni 磁盘缓存后,可使用 iotopiostat 等可用实用程序监控对磁盘进行的读写活动,以验证是否可以访问磁盘缓存。

此外,您还可以检查 AlloyDB Omni 磁盘缓存是否已打开。

如需验证 AlloyDB Omni 的磁盘缓存配置,请使用以下命令。

  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 ... 消息。

后续步骤