在 AlloyDB Omni 中配置列式引擎

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

如需了解 AlloyDB 列式引擎的概念概览,请参阅 AlloyDB Omni 列式引擎概览

启用列式引擎

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

您在实例上设置此标志所需的步骤取决于您是在容器中还是在 Kubernetes 集群上运行 AlloyDB Omni。

单服务器

如需将 google_columnar_engine.enabled 设置为 on,请执行以下步骤:

  1. 运行 ALTER SYSTEM PostgreSQL 命令

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. 如果您想调整列式引擎的配置,请先按照下一部分中的说明操作,然后再重启数据库服务器。否则,请立即完成以下步骤以重启数据库服务器。

  3. 如需使配置参数更改生效,请使用 AlloyDB Omni 重启正在运行的容器。

    Docker

      sudo docker restart CONTAINER_NAME

    Podman

      sudo podman restart CONTAINER_NAME

Kubernetes

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

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

CLUSTER_NAME 替换为您的数据库集群名称。该名称与您在创建数据库集群时声明的名称相同。

配置列存储的大小

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

内存和存储缓存加起来代表列式引擎的总容量。

配置内存

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

您为 AlloyDB Omni 配置列存储区内存的步骤取决于您是在容器中还是在 Kubernetes 集群上运行 AlloyDB Omni。

单服务器

如需在实例上设置 google_columnar_engine.memory_size_in_mb 标志,请执行以下操作:

  1. 运行 ALTER SYSTEM PostgreSQL 命令来配置内存:

    ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
    

    COLUMN_MEMORY_SIZE 替换为列存储空间的新大小(以兆字节为单位),例如 256

  2. 如需使配置参数更改生效,请使用 AlloyDB Omni 重启正在运行的容器。

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Kubernetes

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

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

替换以下内容:

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

配置存储空间缓存

在配置存储缓存之前,您必须启用 AlloyDB Omni 磁盘缓存

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

单服务器

  1. 按如下方式配置存储空间缓存:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    STORAGE_CACHE_SIZE 替换为所需的存储缓存大小(以兆字节为单位)。默认情况下,系统会将 5% 的磁盘缓存分配给列式引擎。此标志允许的最大值是总磁盘缓存的 50%,或 1000 * google_columnar_engine.memory_size_in_mb,以较小者为准。

  2. 如需使配置参数更改生效,请使用 AlloyDB Omni 重启正在运行的容器。

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Kubernetes

如需为数据库启用存储缓存,请修改数据库集群清单,将 columnarSpillToDisk 属性添加到 primarySpec 部分的 features 部分:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: CLUSTER_NAME
spec:
  databaseVersion: "15.7.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 查询规划程序可以选择应用矢量化联接运算符,而不是标准 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 替换为您要手动刷新的表或物化视图的名称。

停用列式引擎

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

在实例上设置此标志的步骤取决于您是在单个服务器上的容器中还是在 Kubernetes 集群中运行 AlloyDB Omni。

单服务器

如需将 google_columnar_engine.enabled 设置为 off,请执行以下步骤:

  1. 运行 ALTER SYSTEM PostgreSQL 命令
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
  1. 如需使配置参数更改生效,请使用 AlloyDB Omni 重启正在运行的容器。

Docker

如需重启 AlloyDB Omni 容器,请运行 docker container restart 命令

  sudo docker restart CONTAINER_NAME

CONTAINER_NAME 替换为您在安装 AlloyDB Omni 容器时为其分配的名称。

Podman

如需重启 AlloyDB Omni 容器,请运行 podman container start 命令

  sudo podman restart CONTAINER_NAME

CONTAINER_NAME 替换为您在安装 AlloyDB Omni 容器时为其分配的名称。

Kubernetes

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

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

CLUSTER_NAME 替换为您的数据库集群名称。该名称与您在创建数据库集群时声明的名称相同。

排查列式引擎问题

修复了 insufficient shared memory 错误

如果您运行 AlloyDB Omni 时没有足够的共享内存供列式引擎使用,则可能会看到以下错误:

Insufficient shared memory for generating the columnar formats.

您可以通过指定可供 AlloyDB Omni 容器使用的共享内存量来解决此问题。具体方法因主机操作系统而异。

Linux

使用编辑 /etc/fstab 文件等方法,增加宿主机的 /dev/shm 分区的大小。

macOS

安装新的 AlloyDB Omni 容器,--shm-size 标志指定更大的共享内存值

修复了列未填充的问题

如果列未在列式引擎中填充,则可能存在以下情况之一:

  • 您要添加的列包含不受支持的数据类型。

  • 不符合列式引擎的要求。

如需排查此问题,请尝试以下操作:

  • 确认查询中的表或物化视图位于列式引擎中。
  • 使用 EXPLAIN 语句验证列式引擎的使用情况。

后续步骤