在 AlloyDB Omni 中配置列式引擎

选择文档版本:

本页面介绍了如何在 AlloyDB Omni 数据库集群上启用或停用列式引擎。还介绍了如何为其列存储区配置适当的初始大小。

如需查看 AlloyDB 列式引擎的概念性概览,请参阅 AlloyDB Omni 列式引擎概览

启用列式引擎

如需在实例上使用列式引擎,请将实例的 google_columnar_engine.enabled 标志设置为 on

Kubernetes

如需将 google_columnar_engine.enabled 标志设置为 on,请修改数据库集群清单,以将 parameters 属性添加到 primarySpec 部分:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      databaseVersion: "17.5.0"
      primarySpec:
        parameters:
          google_columnar_engine.enabled: "on"

CLUSTER_NAME 替换为您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。

配置列存储区的大小

在实例上启用列式引擎后,AlloyDB Omni 会分配一部分实例内存来存储其列式数据。将高速 RAM 专用于列存储区可确保 AlloyDB Omni 能够尽可能快地访问列式数据。

内存和存储空间缓存共同代表列式引擎的总容量。

配置内存

您可以使用 google_columnar_engine.memory_size_in_mb 标志将内存分配设置为固定大小。

Kubernetes

如需设置 google_columnar_engine.memory_size_in_mb 标志,请修改数据库集群清单,以将 parameters 属性添加到 primarySpec 部分:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      databaseVersion: "17.5.0"
      primarySpec:
        parameters:
          google_columnar_engine.memory_size_in_mb: "COLUMN_MEMORY_SIZE"

替换以下内容:

  • CLUSTER_NAME:您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。
  • COLUMN_MEMORY_SIZE:列存储空间的新大小(以兆字节为单位),例如 256

配置存储空间缓存

您可以在共用设备或专用设备上配置列式引擎存储缓存。

Kubernetes

共用设备

如需在共享设备上为数据库启用存储空间缓存,请修改数据库集群清单,以将 columnarSpillToDisk 属性添加到 primarySpec 部分的 features 部分:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: CLUSTER_NAME
spec:
  databaseVersion: "17.5.0"
  primarySpec:
    features:
      columnarSpillToDisk:
        cacheSize: STORAGE_CACHE_SIZE
      ultraFastCache:
        cacheSize: ULTRAFAST_CACHE_SIZE
        genericVolume:
          storageClass: "STORAGE_CLASS_NAME"
...

替换以下内容:

  • CLUSTER_NAME:您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。
  • STORAGE_CACHE_SIZE:列式存储空间缓存的大小,例如 5Gi。如果您没有为此字段指定值,则默认会将 5% 的磁盘缓存分配给列式引擎。
  • ULTRAFAST_CACHE_SIZE:缓存的大小,例如 100Gi。必须大于 shared_buffers。此字段是可选字段。如果您未指定此字段的值,AlloyDB Omni 会使用磁盘上剩余的所有空间,这适用于容器中的 AlloyDB Omni 和 Kubernetes 集群中的 AlloyDB Omni。如需详细了解度量单位,请参阅内存资源单位
  • STORAGE_CLASS_NAME:超快缓存卷的存储类别的名称,例如 local-storage

专用设备

默认情况下,列式引擎的存储缓存与 AlloyDB Omni 磁盘缓存共享同一设备。不过,您可以配置列式引擎,使其使用自己的专用设备作为存储缓存,原因如下:

  • 您不需要磁盘缓存,因为您的主存储空间已位于高性能 SSD 上。在此场景中,您无需为磁盘缓存分配任何空间即可创建列式引擎存储缓存。
  • 您希望为磁盘缓存和列式引擎缓存使用不同的存储介质。例如,您可能希望将标准 SSD 用于磁盘缓存,将性能更高的 NVMe SSD 用于列式引擎缓存。
使用通用卷

如需为列式引擎存储缓存配置专用设备,请修改 DBCluster 清单,以将 columnarSpillToDisk 属性添加到 features 部分。在 columnarSpillToDisk 中,您可以指定一个 storageClass 指向您要用于专用列式引擎缓存的存储空间的 genericVolume

以下示例展示了如何使用名为 local-ssd 的存储类为列式引擎存储缓存配置 50 Gi 的专用设备:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: CLUSTER_NAME
spec:
  databaseVersion: "17.5.0"
  primarySpec:
    features:
      columnarSpillToDisk:
        cacheSize: STORAGE_CACHE_SIZE
        genericVolume:
          storageClass: "STORAGE_CLASS_NAME"

替换以下内容:

  • CLUSTER_NAME:您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。
  • STORAGE_CACHE_SIZE:列式存储空间缓存的大小,例如 50Gi。如果您没有为此字段指定值,则默认会将 5% 的磁盘缓存分配给列式引擎。
  • STORAGE_CLASS_NAME:专用列式引擎缓存卷的存储类别的名称,例如 local-ssd
使用临时卷

您可以将列式引擎配置为使用临时 emptyDir 卷作为其存储缓存。emptyDir 卷是在将 Pod 分配给节点时创建的,只要该 Pod 在该节点上运行,它就会存在。如果 Pod 从节点中移除,emptyDir 中的数据将被永久删除。

如需为列式存储缓存配置 emptyDir 卷,请修改 DBCluster 清单,以将 emptyDir 属性添加到 columnarSpillToDisk 部分。

以下示例展示了如何为列式存储缓存配置临时卷:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: CLUSTER_NAME
spec:
  databaseVersion: "17.5.0"
  primarySpec:
    features:
      columnarSpillToDisk:
        cacheSize: 50Gi
        emptyDir: {}

替换以下内容:

  • CLUSTER_NAME:您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。
  • STORAGE_CACHE_SIZE:列式存储空间缓存的大小,例如 50Gi

启用向量化联接

列式引擎具有向量化联接功能,可通过对符合条件的查询应用向量化处理来提高联接性能。

启用向量化联接后,AlloyDB 查询规划工具可以选择应用向量化联接运算符,而不是标准 PostgreSQL 哈希联接运算符。规划工具通过比较使用每种方法执行查询的成本来做出此决策。

如需在实例上启用向量化联接,请将实例的 google_columnar_engine.enable_vectorized_join 标志设置为 on

如需在实例上设置此标志,请运行 ALTER SYSTEM PostgreSQL 命令

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

默认情况下,AlloyDB Omni 会将一个线程分配给向量化联接功能。您可以通过将 google_columnar_engine.vectorized_join_threads 标志设置为更大的值来增加此功能可用的线程数量。最大值为 cpu_count * 2

手动刷新列式引擎

默认情况下,当列式引擎处于启用状态时,它会在后台刷新列存储区。

如需手动刷新列引擎,请运行以下 SQL 查询:

SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');

TABLE_NAME 替换为您要手动刷新的表或物化视图的名称。

停用列式引擎

如需在实例上停用列式引擎,请将 google_columnar_engine.enabled 标志设置为 off

Kubernetes

如需将 google_columnar_engine.enabled 标志设置为 off,请修改数据库集群清单,以将 parameters 属性添加到 primarySpec 部分:

  apiVersion: alloydbomni.dbadmin.goog/v1
  kind: DBCluster
  metadata:
    name: CLUSTER_NAME
  spec:
    databaseVersion: "17.5.0"
    primarySpec:
      parameters:
        google_columnar_engine.enabled: "off"

CLUSTER_NAME 替换为您的数据库集群的名称。这是您在创建数据库集群时声明的同一个名称。

后续步骤