除了标准的 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,请确保在通用卷上启用磁盘缓存之前执行以下操作:
- 创建具有基于本地 SSD 的存储空间的集群。
- 使用运行本地卷静态预配工具的第 1 步将卷格式化为 ext4 文件系统。
- 在存储设备上使用定义永久性存储的
storageClass,为集群中的每个 SSD 手动创建永久性卷。
如需为数据库在通用卷上启用磁盘缓存,请完成以下步骤:
修改数据库集群清单,以将
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。
- 重新应用清单。
在本地卷上启用磁盘缓存
如果您想使用本地卷,则无需创建永久性卷。您可以改用以下优化。
例如,如果您使用 GKE 且尚未准备好永久性卷和 storageClass,请确保在本地卷上启用磁盘缓存之前执行以下操作:
- 创建具有基于本地 SSD 的存储空间的集群。
- 使用运行本地卷静态预配工具的第 1 步将卷格式化为
ext4文件系统。
如需为数据库在本地卷上启用磁盘缓存,请执行以下操作:
修改数据库集群清单,以将
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。将该参数设置为字符串值数组,如下所示:- 如果运算符为
In或NotIn,则值数组不得为空。 - 如果运算符为
Exists或DoesNotExist,则值数组必须为空。 - 如果运算符为
Gt或Lt,则值数组必须包含单个元素,该元素将被解释为整数。
- 如果运算符为
- 重新应用清单。
在临时卷上启用磁盘缓存
您可以使用 emptyDir 卷启用磁盘缓存,该卷提供直接与 Pod 生命周期相关联的临时存储空间。该卷是在将 Pod 分配给节点时创建的,只要 Pod 在该节点上运行,该卷就会存在。
当 pod 从节点中移除时,emptyDir 中的数据将被永久删除。这种类型的卷适合用作缓存,因为它提供临时快速存储。如果 pod 重新调度,则无需保留缓存中的数据。
如需为数据库在临时卷上启用磁盘缓存,请完成以下步骤:
修改数据库集群清单,以将
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。
- 重新应用清单。
验证磁盘缓存配置
启用 AlloyDB Omni 磁盘缓存后,可使用 iotop 或 iostat 等可用实用程序监控对磁盘进行的读写活动,以验证是否可以访问磁盘缓存。
此外,您还可以检查 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 ... 消息。