本页面介绍了如何在 AlloyDB Omni 数据库集群上启用或停用列式引擎。还介绍了如何为其列存储区配置适当的初始大小。
如需查看 AlloyDB 列式引擎的概念性概览,请参阅 AlloyDB Omni 列式引擎概览。
启用列式引擎
如需在实例上使用列式引擎,请将实例的 google_columnar_engine.enabled
标志设置为 on
。
您用于在实例上设置此标志的步骤取决于您是在容器中还是在 Kubernetes 集群中运行 AlloyDB Omni。
单个服务器
如需将 google_columnar_engine.enabled
设置为 on
,请执行以下步骤:
运行
ALTER SYSTEM
PostgreSQL 命令:ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
如果您想调整列式引擎的配置,请先按照下一部分中的说明操作,然后再重启数据库服务器。否则,请立即完成以下步骤以重启数据库服务器。
如需使配置参数更改生效,请重启运行 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: "16.3.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
标志,请执行以下操作:
通过运行
ALTER SYSTEM
PostgreSQL 命令来配置内存:ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
将
COLUMN_MEMORY_SIZE
替换为列存储空间的新大小(以兆字节为单位),例如256
。如需使配置参数更改生效,请重启运行 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: "16.3.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。
单个服务器
请按如下方式配置存储空间缓存:
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 中的较小者。如需使配置参数更改生效,请重启运行 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: "16.3.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
替换为您要手动刷新的表或物化视图的名称。
停用列式引擎
如需在实例上停用列式引擎,请将 google_columnar_engine.enabled
标志设置为 off
。
您用于对实例设置此标志的步骤取决于您是在单个服务器上的容器中还是在 Kubernetes 集群中运行 AlloyDB Omni。
单个服务器
如需将 google_columnar_engine.enabled
设置为 off
,请执行以下步骤:
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
- 如需使配置参数更改生效,请重启运行 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: "16.3.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
标志指定更大的共享内存值。
修正未填充的列
如果列未在列式引擎中填充,则可能存在以下情况之一:
您要添加的列包含不受支持的数据类型。
不符合列式引擎的要求。
如需排查此问题,请尝试执行以下操作:
后续步骤
请参阅列式引擎数据库标志的完整列表。
完成在 AlloyDB Omni 中使用列式引擎加速分析查询 Google CodeLab 教程。