AlloyDB Omni 是一个可下载的数据库软件包,可让您在自己的计算环境中部署精简版 AlloyDB for PostgreSQL。AlloyDB Omni 和 Google Cloud 全托管式 AlloyDB for PostgreSQL 服务共用相同的核心组件。AlloyDB for PostgreSQL 使用可优化 WAL 性能的原生云存储层,而 AlloyDB Omni 使用 PostgreSQL 所用的标准文件系统接口。
得益于 AlloyDB Omni 的可移植性,您可以在许多环境中运行它,包括:
- 数据中心
- 笔记本电脑
- 基于云端的虚拟机实例
AlloyDB Omni 用例
AlloyDB Omni 非常适合以下场景:
- 您需要可扩缩且高性能的 PostgreSQL 版本,但由于法规或数据主权要求,您无法在云端运行数据库。
- 您需要一个即使断开与互联网的连接也能保持运行的数据库。
- 为最大限度地缩短延迟时间,您应将数据库放置在离用户尽可能近的地理位置。
- 您希望找到一种方法来迁离旧版数据库,但不想完全迁移到云端。
AlloyDB Omni 不包含依赖于 Google Cloud中操作的 AlloyDB for PostgreSQL 功能。如果您想将项目升级到 AlloyDB for PostgreSQL 的全代管式扩缩、安全和可用性功能,可以将 AlloyDB Omni 数据迁移到 AlloyDB for PostgreSQL 集群,就像使用任何其他初始数据导入一样。
主要特性
- 与 PostgreSQL 兼容的数据库服务器。
- 支持 AlloyDB AI,可帮助您使用运营数据构建企业级生成式 AI 应用。
- 与 Google Cloud AI 生态系统集成,包括 Vertex AI Model Garden 和开源生成式 AI 工具。
Google Cloud 中支持 AlloyDB for PostgreSQL 的 Autopilot 功能,可让 AlloyDB Omni 进行自我管理和自我调整。
例如,AlloyDB Omni 支持自动内存管理和对过时数据进行自适应自动执行真空。
索引顾问,用于分析经常运行的查询并推荐新索引,以提升查询性能。
AlloyDB Omni 列式引擎,该引擎能够以内存中列式格式保存频繁查询的数据,从而加快商业智能、报告以及混合事务和分析处理 (HTAP) 工作负载的速度。
在我们的性能测试中,与标准 PostgreSQL 相比,AlloyDB Omni 处理事务性工作负载的速度快至 2 倍,运行分析查询的速度快至 100 倍。
AlloyDB Omni 的运作方式
您可以将 AlloyDB Omni 安装为独立服务器,也可以将其作为 Kubernetes 环境的一部分进行安装。
AlloyDB Omni 在您安装到自己的环境的 Docker 容器中运行。我们建议您在具有 SSD 存储空间且每个 CPU 至少有 8 GB 内存的 Linux 系统上运行 AlloyDB Omni。
AlloyDB Omni Kubernetes operator 是 Kubernetes API 的扩展,可让您在大多数符合 CNCF 标准的 Kubernetes 环境中运行 AlloyDB Omni。如需了解详情,请参阅在 Kubernetes 上安装 AlloyDB Omni。
应用与 AlloyDB Omni 安装进行连接和通信的方式与应用与标准 PostgreSQL 数据库服务器进行连接和通信的方式一样。用户访问权限控制也依赖于 PostgreSQL 标准。
从日志记录到吸尘到列式引擎,您都可以使用数据库标志配置 AlloyDB Omni 的数据库行为。
将 AlloyDB Omni 作为容器运行的优势
Google 以容器的形式分发 AlloyDB Omni,您可以使用 Docker 和 Podman 等容器运行时环境运行它。在运维方面,容器具有以下优势:
- 透明的依赖项管理:所有必要的依赖项都捆绑在容器中,并由 Google 进行测试,以确保它们与 AlloyDB Omni 完全兼容。
- 可移植性:AlloyDB Omni 可在不同环境中一致运行。
- 安全隔离:您可以选择 AlloyDB Omni 容器在主机上有权访问的内容。
- 资源管理:您可以定义要让 AlloyDB Omni 容器使用的计算资源量。
- 无缝补丁和升级:如需为容器打补丁,您只需将现有映像替换为新映像。
数据备份和灾难恢复
AlloyDB Omni 采用连续备份和恢复系统,可让您根据可调整保留期的任意时间点创建新的数据库集群。这样,您就可以快速从数据丢失事故中恢复。
此外,AlloyDB Omni 还可以按需或定期创建和存储数据库集群数据的完整备份。您可以随时从备份恢复到 AlloyDB Omni 数据库集群,该集群包含创建备份时原始数据库集群中的所有数据。
如需了解详情,请参阅备份和恢复 AlloyDB Omni。
作为灾难恢复的进一步方法,您可以在不同的数据中心创建次要数据库集群,以实现跨数据中心复制。AlloyDB Omni 会将数据从指定的主数据库集群异步流式传输到其每个辅助集群。您可以根据需要将次要数据库集群提升为主 AlloyDB Omni 数据库集群。
如需了解详情,请参阅跨数据中心复制简介
AlloyDB Omni VM 组件
虚拟机上的 AlloyDB Omni 由两组架构组件组成:具有 AlloyDB for PostgreSQL 增强功能的 PostgreSQL 组件和 AlloyDB for PostgreSQL 组件。下图概述了这两组组件、它们在虚拟机或服务器上的所在基础架构层,以及您可以预期的每种组件的相关功能。
图 1. AlloyDB Omni 架构
数据库引擎
本文档介绍了容器中 AlloyDB Omni 的数据库架构。本文档假定您熟悉 PostgreSQL。
数据库引擎执行以下任务:
- 将客户端的查询转换为可执行的计划
- 查找满足查询所需的数据
- 执行任何必要的过滤、排序和汇总
- 将结果返回给客户端

当客户端应用向 AlloyDB Omni 发送查询时,会发生以下操作:
- 查询处理层会将查询转换为传递给查询执行层的执行计划。
- 查询执行层会执行计算查询响应所需的操作。
- 在执行期间,数据可以从缓冲区缓存加载,也可以直接从存储空间加载。如果是从存储空间加载数据,则存储空间中的数据会存储在缓存中以供日后使用。
处理客户端查询时使用的资源包括 CPU、内存、I/O、网络以及数据库锁等同步基元。性能调优旨在优化查询执行过程中的每个步骤的资源利用率。
高性能数据库引擎的目标是使用尽可能少的资源响应查询。要实现这一目标,首先要有一个良好的数据模型和查询设计。
- 如何在查看最少数据量的情况下回答查询?
- 需要哪些索引来缩减搜索空间和 I/O?
- 对数据进行排序需要 CPU,对于大型数据集,通常还需要访问磁盘,那么如何避免对数据进行排序?
数据存储
AlloyDB Omni 会将数据存储在固定大小的页面中,这些页面存储在底层文件系统中。当查询需要访问数据时,AlloyDB Omni 会先检查缓冲区。如果缓冲区中未找到包含所需数据的页面,AlloyDB Omni 会从文件系统读取所需的页面。从缓冲区池访问数据的速度比从文件系统读取数据的速度要快得多,因此,根据应用将要访问的数据量尽可能扩大缓冲区池的大小是一项重要因素。
资源管理
AlloyDB Omni 使用动态内存管理,让缓冲区池能够根据系统的内存需求,在配置的边界内动态扩大和缩小。因此,无需调整缓冲区池大小。在诊断性能问题时,首先要考虑的两个指标是缓冲区命中率和读取率,以了解您的应用是否在受益于缓冲区。如果没有,则表示应用的数据集不适合缓冲区池,您可以考虑调整大小,改用内存更大的机器。
检索、过滤、汇总、排序和投影数据的过程都需要数据库服务器上的 CPU 资源。为了减少此过程所需的 CPU 资源量,请尽量减少需要处理的数据量。监控数据库服务器上的 CPU 利用率,确保稳定状态利用率约为 70%。此数量可在服务器上留出足够的余量,以应对利用率激增或访问模式随时间推移而发生变化的情况。由于进程调度和上下文切换,在接近 100% 的利用率下运行会产生开销,并且可能会在系统的其他部分造成瓶颈。在制定机器规格决策时,高 CPU 利用率是另一个关键指标。
每秒输入/输出操作次数 (IOPS) 是数据库应用性能的重要因素,表示底层存储设备每秒可向数据库提交的输入或输出操作次数。为避免达到数据库存储的 IOPS 限制,请通过最大限度地增加缓冲区中可容纳的数据量,尽可能减少对存储空间的读写。
列式引擎
列式引擎通过提供以下组件来加快扫描、联接和汇总的 SQL 查询处理速度:
内存列存储区:以列式格式包含所选列的表和具体化视图数据。默认情况下,列存储会占用 1GB 的可用内存。如需更改列存储区可用的内存量,请在 AlloyDB Omni 实例使用的
postgresql.conf
中设置google_columnar_engine.memory_size_in_mb
参数。如需详细了解如何更改此参数,请参阅更改配置参数。
列式查询规划器和执行引擎:支持在查询中使用列存储。
自动内存管理
自动内存管理器会持续监控整个 AlloyDB Omni 实例的内存用量并进行优化。当您运行工作负载时,此模块会根据内存压力调整共享缓冲区缓存大小。默认情况下,自动内存管理器将上限设置为系统内存的 80%,并为共享缓冲区缓存分配 10% 的系统内存。如需更改共享缓冲区缓存大小的上限,请在 AlloyDB Omni 实例使用的 postgresql.conf
中设置 shared_buffers
参数。
如需了解详情,请参阅自动内存管理。
自适应自动执行自动清理
自适应 autovacuum 会根据数据库的工作负载分析操作,并自动调整清理频率。这种自动调整有助于数据库以最佳性能运行,即使工作负载发生变化,也不会受到 Vacuum 进程的干扰。
自适应自动吸尘功能会根据以下因素来确定吸尘操作的频率和强度:
- 数据库的大小
- 数据库中处于不活跃状态的元组数
- 数据库中数据的年龄
- 每秒事务数与估算的 VACUUM 速度
自适应自动执行 Vacuum 操作具有以下优势:
- 动态真空管理资源:AlloyDB Omni 使用实时资源统计信息来调整真空处理程序,而不是使用固定费用限制。当系统繁忙时,系统会限制真空进程和相关资源利用率。如果有足够的内存可用,系统会为
maintenance_work_mem
分配额外内存,以缩短端到端真空时间。 - 动态 XID 节流:自动持续监控吸尘进度和事务 ID 消耗速度。如果检测到事务 ID 回卷风险,AlloyDB Omni 会放慢事务速度,以限制 ID 消耗。此外,AlloyDB Omni 会向真空吸尘器工作器分配更多资源,以处理阻止推进和释放事务 ID 空间的表。在此过程中,每秒的总交易量会减少,直到交易 ID 进入安全区域(可观察到等待
AdaptiveVacuumNewXidDelay
的会话)。随着交易 ID 的使用时间增加,吸尘工会动态增加。 - 高效地为大型表执行吸尘:用于确定何时为表执行吸尘的默认 PostgreSQL 逻辑基于存储在
pg_stat_all_tables
中的表专用统计信息(其中包含死元组比率)。此逻辑适用于小型表,但对于频繁更新的大型表,可能无法高效运行。AlloyDB Omni 提供了经过更新的扫描机制,有助于更频繁地触发自动执行 vaccum 操作。与默认的 PostgreSQL 逻辑相比,此扫描机制可以更高效地扫描大型表的多个分块并移除无效元组。 - 记录警告消息:在 AlloyDB Omni 中,系统会检测真空吸尘器阻塞程序(例如长时间运行的事务、准备好的事务或丢失目标的复制槽),并在 PostgreSQL 日志中注册警告,以便您及时解决问题。
AI/机器学习 Worker
在 AlloyDB Omni 中,AI/ML 后台工作器提供了直接从数据库调用 Vertex AI 模型所需的所有功能。AI/ML Worker 作为名为 omni ml worker
的进程运行。
如需了解详情,请参阅使用 AlloyDB AI 构建生成式 AI 应用。