在 AlloyDB Omni 中配置列式引擎

选择文档版本:

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

如需在 Google Cloud上使用 AlloyDB for PostgreSQL 时使用列式引擎,请参阅配置列式引擎

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

启用列式引擎

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

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

  1. 运行 ALTER SYSTEM PostgreSQL 命令

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

  3. 停止数据库服务器。

  4. 启动数据库服务器。

配置列存储区的大小

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

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

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

  1. 运行 ALTER SYSTEM PostgreSQL 命令

    ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_STORE_SIZE;
    

    COLUMN_STORE_SIZE 替换为列存储区的新大小(以兆字节为单位)。

  2. 停止数据库服务器。

  3. 启动数据库服务器。

启用向量化联接

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

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

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

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

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

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

手动刷新列式引擎

默认情况下,列式引擎设置为在启用时在后台自动刷新列式存储区。在某些情况下,您可能需要手动刷新列式存储区,例如,如果自动刷新未刷新包含大量无效区块的关系。

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

SELECT google_columnar_engine_refresh('TABLE_NAME');

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

停用列式引擎

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

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

  1. 运行 ALTER SYSTEM PostgreSQL 命令

    ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
    
  2. 停止数据库服务器。

  3. 启动数据库服务器。

排查列式引擎问题

修正“共享内存不足”错误

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

Insufficient shared memory for generating the columnar formats.

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

Linux

使用修改 /etc/fstab 文件等方法来增加宿主机 /dev/shm 分区的大小。

macOS

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

修正未填充的列

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

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

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

如需查找导致此问题的原因,请尝试执行以下操作:

  • 确认查询中的表或物化视图处于列式引擎中。

  • 使用 EXPLAIN 语句验证列式引擎的使用情况。

后续步骤