在 AlloyDB Omni 中配置列式引擎

选择文档版本:

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

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

启用列式引擎

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

单个服务器

如需将 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

配置列存储区的大小

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

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

配置内存

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

单个服务器

如需在实例上设置 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

配置存储空间缓存

单个服务器

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

专用设备

在专用设备上,如需为单服务器容器启用 AlloyDB Omni 列式引擎存储缓存,您需要预配磁盘并创建文件系统,然后在 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_COLUMNAR_STORAGE_CACHE_DIRECTORY
    sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY

    OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY 替换为用作装载点的目录的名称或该目录的路径,例如 omni_columnar_storage_cache_directory

在 AlloyDB Omni 中装载列式存储缓存目录

在为容器中运行的 AlloyDB Omni 启用磁盘缓存之前,您必须在 AlloyDB Omni 中装载缓存目录。

如需了解如何从 Docker 映像安装 AlloyDB Omni 并进行自定义,请参阅自定义 AlloyDB Omni 安装

如需在运行 AlloyDB Omni 的 Docker 容器中装载 OMNI_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

替换以下内容:

  • CONTAINER_NAME:为新 AlloyDB Omni 容器分配的名称,例如 my-omni
  • PASSWORD:PostgreSQL 数据库根管理员的密码。
  • DATA_DIR:您希望 AlloyDB Omni 用于其数据目录的文件系统路径。
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER:AlloyDB Omni 容器中映射到宿主机上装载点的缓存目录,例如根据容器中缓存目录的值,可能是 /omni_disk_cache_directory(类似于 OMNI_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

替换以下内容:

  • CONTAINER_NAME:为新 AlloyDB Omni 容器分配的名称,例如 my-omni
  • PASSWORD:PostgreSQL 数据库根管理员的密码。
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER:AlloyDB Omni 容器中映射到宿主机上装载点的缓存目录,例如根据容器中缓存目录的值,可能是 /omni_columnar_storage_cache_directory(类似于 OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY)或 /disk/cache/inside/container

如需授予针对已装载 OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY 的完整访问权限,请使用以下命令:

Docker

  sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  sudo docker exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  

Podman

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

为在容器中运行的 AlloyDB Omni 启用 AlloyDB Omni 列式存储缓存

如需在专用设备上为数据库启用 AlloyDB Omni 列式存储缓存,请先验证可以从 Docker 容器内访问已装载的缓存目录,然后设置相应的全局统一配置 (GUC) 参数。

  1. 设置列式存储缓存目录:

    ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
    

    OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY 替换为您想要 AlloyDB Omni 在其中存储列式引擎存储缓存文件的专用目录的绝对路径。验证此目录存在,且数据库用户拥有相应的写入权限。

  2. 配置存储缓存大小:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    STORAGE_CACHE_SIZE 替换为所需的列式存储缓存大小(以兆字节为单位)。默认情况下,专用设备的整个大小会分配给列式引擎,而不会影响磁盘缓存。此标志允许的最大值是 1,000 * google_columnar_engine.memory_size_in_mb(以较低者为准)。

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

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

共用设备

在将列式存储缓存配置为使用磁盘缓存的共用设备之前,您必须启用 AlloyDB Omni 磁盘缓存

在共用设备上配置存储缓存,如下所示:

  1. 配置存储缓存:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

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

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

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

启用向量化联接

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

启用向量化联接后,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

单个服务器

如需将 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 容器时为其分配的名称。

后续步骤