本页介绍了一些常规最佳实践,可帮助您提升 AlloyDB for PostgreSQL 的性能、持久性和可用性。本页面适用于已经熟悉 AlloyDB 和 PostgreSQL 的数据库管理员和开发者。
实例配置和管理
使用 AlloyDB 工具监控数据库使用情况和状态。
遵循操作指南。
为您的主实例配置维护窗口。
添加读取池实例以分流读取流量。
管理复制延迟。
在先前操作完成之前,请勿启动管理操作。
配置足够的存储配额,以支持重要的数据库维护。
防止 CPU 利用率过高。
避免内存耗尽。
确保实例具有最佳事务 ID。
使用 AlloyDB 工具监控数据库使用情况和状态
请参阅下表,了解有助于您监控数据库用量、状态和性能的 AlloyDB 工具。
AlloyDB 工具 | 说明 |
---|---|
“效果概况”报告 | 比较两个不同时间点的系统指标快照。 |
查询数据分析 | 可帮助您检测、诊断和避免 AlloyDB 数据库的查询性能问题。它提供自助式、直观的监控和诊断信息,不仅仅是检测,可帮助您找出导致性能问题的根本原因。 |
系统数据分析 | 可让您监控数据库资源和指标,包括活跃节点数、CPU 用量、峰值连接数、日志错误、每秒事务数和最大复制延迟时间。 |
遵循操作指南
如需确保您的实例在 AlloyDB for PostgreSQL 服务等级协议 (SLA) 的涵盖范围内,请遵循操作指南。
为主实例配置维护窗口
为主实例配置维护窗口,以规划中断性更新的发生时间。如需了解详情,请参阅查看和设置维护时间。
添加读取池实例以分流读取流量
对于频繁读取的工作负载,请添加读取池实例以从主实例分流读取流量。
为实例中的每个数据库配置一个或多个读取池,以帮助改进缓存。
考虑为每个池添加其他节点,以便实现自动负载均衡和高可用性。
管理复制延迟
AlloyDB 进行了多项增强,以缩短复制延迟时间。不过,您可能会遇到日志重放被阻止或无法跟上的情况,这可能会导致复制延迟时间增加。
例如,如果主虚拟机大小远大于读取池节点大小,在写入工作负载繁重的情况下,主虚拟机生成日志记录的速度可能会比读取节点能够重放日志记录的速度更快,尤其是在读取节点上同时运行繁重的读取工作负载时。在这种情况下,增加读取节点大小以向其提供更多资源可能会有所帮助。
根据您的应用需求,您可能需要调整以下参数:
max_standby_streaming_delay
:确定重放操作在取消阻塞它的查询之前等待的时长。google_storage.log_replay_throttle_read_transactions
:确定在延迟时间较长时是否要节流查询。通过节流查询,可为重放提供更多资源,以便更快地赶上,并避免向查询返回过时数据。alloydb.promote_cancel_to_terminate
:确定是否强制终止对取消操作无响应的查询后端。
在先前操作完成之前,请勿启动管理操作
AlloyDB 实例在完成先前的操作之前不接受新的操作请求。如果您试图在先前操作完成之前启动新操作,则操作请求将失败。这也包括实例重启在内。
Google Cloud 控制台中的实例状态不会反映操作是否正在运行。绿色对勾标记仅表示实例是否处于 RUNNABLE 状态。如需查看操作是否正在运行,请点击操作标签页,然后检查最近操作的状态。
配置足够的存储配额以支持重要的数据库维护
默认情况下,每个集群最多可使用 16 TB 的存储空间。如果您需要更多存储空间,请考虑增加存储空间配额。
防止 CPU 利用率过高
您可以在 Google Cloud 控制台的“实例详情”页面上查看实例正在使用的可用 CPU 的百分比。如需了解详情,请参阅监控实例。您还可以使用创建指标阈值提醒政策,监控 CPU 使用率并在达到指定的阈值时收到提醒。
为了避免利用率过高,您可以将实例扩容到更多 CPU。更改 CPU 需要重启实例。如果实例的 CPU 数已达到上限,我们建议您将数据库分片到多个实例。
避免内存耗尽
AlloyDB 具有自动内存管理功能,可防止内存不足问题。不过,持续的内存压力可能会导致性能问题。在查找内存耗尽迹象时,应主要使用 usage 指标。我们建议将此指标保持在 90% 以下,以获得最佳性能。
您还可以使用 total_usage 指标来观察 AlloyDB 实例正在使用的可用内存百分比,包括数据库容器使用的内存以及操作系统缓存分配的内存。
通过观察“使用量”指标与“总使用量”指标之间的差异,您可以确定进程使用的内存量与操作系统缓存使用的内存量。您可以将此缓存中的内存改作他用。
扩缩 AlloyDB 实例以增加其内存大小。 更改实例的内存大小需要重启实例。如果实例已达到内存大小上限,则必须将数据库分片到多个实例。
如需详细了解如何在 Google Cloud 控制台中监控使用情况和总使用情况指标,请参阅监控实例。
确保实例具有最佳事务 ID
您可以通过将 Resource Type
设置为 AlloyDB for PostgreSQL Database
并将 Metric
设置为 Percentage of instance's transaction IDs consumed
,在 Google Cloud 控制台中的 Metrics Explorer 页面上查看实例的事务 ID 使用情况。如需了解详情,请参阅使用 Metrics Explorer 创建图表。
AlloyDB 内置自适应自动压缩功能,有助于缓解与压缩相关的问题。
数据架构
尽可能将大型实例拆分为较小的实例
请尽可能使用多个较小的 AlloyDB 集群,而不是使用一个大型实例。管理单个大型实例时,会遇到一组较小实例不会出现的难题。
请勿使用太多的数据库表
确保实例的表数少于 10000 个。数据库表过多可能会影响数据库升级时间。
查询性能
如果您要运行分析查询,请启用列式引擎
阅读 AlloyDB 列式引擎概览。 检查启用列式引擎后受益的查询类型。
您可以监控列式引擎用量。
如果您刚开始接触列式引擎,请先熟悉自动列化。然后,您可以选择手动管理列。
扩容实例以提高查询性能
如果您遇到查询性能低下的问题,请考虑扩容实例。
每个 SKU 的 vCPU 和内存配置有限,每个 SKU 的快速缓存也有限。如果您的数据量很大,并且查询性能不佳,请考虑扩容到更大的实例。
部署读取池并将读取查询分流到读取池
如果您的应用执行大量写入和读取操作,请考虑部署读取池并将读取查询分流到读取池。
对于频繁读取的工作负载,请添加读取池实例以从主实例分流读取流量。
应用实现
采用最佳连接管理做法
采用最佳连接管理做法,例如连接池和指数退避算法。
采用良好的连接管理技术可以改善应用对资源的使用,并帮助您保持在 AlloyDB 连接限制内。
测试应用对维护更新的响应
测试应用对维护更新的响应情况,这可能在维护窗口期间随时发生。
您可以通过执行计算规模操作或更新触发低停机时间维护 (LDTM) 的静态 PostgreSQL 标志来模拟维护更新。
在 LDTM 期间,实例在短时间内变得不可用,并且现有连接会被丢弃。通过测试 LDTM,您可以更好地了解应用处理计划性维护的方式以及系统恢复的速度。
测试应用对故障切换的响应情况
测试应用对故障转移的响应情况,这可能随时发生。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 API 手动启动故障切换。如需了解详情,请参阅启动故障切换。
避免大型事务
保持事务小而简短。如果需要进行大的数据库更新,将其分为几个较小的事务执行,而不是通过一个大型事务。
避免使用大量子事务
存在长时间运行的事务时,避免在事务中包含大量子事务。
在 AlloyDB 中,在 PL/pgSQL 错误块中执行事务会创建与错误块对应的事务子事务。如果存在长时间运行的交易,并且子事务数量超过 64 个,则系统的整体性能会下降。
使用最新版本的 Auth 代理
如果您使用的是 AlloyDB Auth 代理,请确保使用的是最新版本。如需了解详情,请参阅保持 Auth Proxy 客户端为最新版本。
数据导入和导出
从 Cloud SQL for PostgreSQL 备份恢复以进行迁移
如需简化迁移,请参阅从 Cloud SQL for PostgreSQL 迁移到 AlloyDB。
如需了解如何使用持续数据复制将数据从 Cloud SQL for PostgreSQL 迁移到 AlloyDB,请参阅 将 Database Migration Service for PostgreSQL 迁移到 AlloyDB。
加快小型实例的导入
向小型实例导入大型数据集时,您可以临时增加实例的 CPU 和 RAM,以提高性能。
备份与恢复
使用适当的 AlloyDB 功能保护您的数据
使用备份、时间点恢复 (PITR) 和导出功能实现冗余和保护。它们各自防范不同的情形,并在强大的数据保护策略中相互补充。
备份属于轻量级;通过备份,可以将实例上的数据恢复到进行备份时的状态。不过,AlloyDB 的备份功能有一些限制。如果您删除实例,备份也会被删除。您无法备份单个数据库或表。并且如果实例所在的区域不可用,则无法通过对应备份恢复实例,即使在可用区域中也不行。
借助时间点恢复,您可以将实例恢复到特定的时间点。例如,如果错误导致数据丢失,您可以将数据库恢复到错误发生前的状态。时间点恢复始终会创建一个新实例;您不能对现有实例执行时间点恢复。
导出需要较长时间才能创建,因为在 Cloud Storage 中创建了可用于重新创建数据的外部文件。如果您删除实例,导出不会受影响。此外,您可以只导出单个数据库或表,具体取决于导出格式。
保护您的实例和备份免遭意外删除
如需启用默认的意外删除防范功能,请使用 Google Cloud 控制台或 Terraform 创建 AlloyDB 实例。
使用 AlloyDB 中的导出功能导出数据以提供额外保护。将 Cloud Scheduler 与 Cloud Scheduler API 搭配使用以自动执行导出管理。
对于更高级的场景,将 Cloud Scheduler 与 Cloud Run functions 搭配使用以实现自动化。