本页面介绍了一些常规最佳实践,可帮助您提升 AlloyDB for PostgreSQL 的性能、耐用性和可用性。本页面适用于已熟悉 AlloyDB 和 PostgreSQL 的数据库管理员和开发者。
实例配置和管理
使用 AlloyDB 工具监控数据库使用情况和状态。
遵循运维指南。
为主实例配置维护窗口。
添加读取池实例以分流读取流量。
管理复制延迟时间。
在先前操作完成之前,请勿启动管理操作。
配置足够的存储空间配额,以支持重要的数据库维护。
防止 CPU 利用率过高。
避免内存耗尽。
确保实例具有最佳事务 ID。
使用 AlloyDB 工具监控数据库使用情况和状态
请参阅下表,了解可帮助您监控数据库使用情况、状态和性能的 AlloyDB 工具。
AlloyDB 工具 | 说明 |
---|---|
Performance Snapshot Report | 比较两个不同时间点之间的系统指标快照。 |
查询数据分析 | 帮助您检测、诊断和避免 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 具有内置的自适应自动完全清理 (autovacuum) 功能,有助于缓解与完全清理 (vacuum) 相关的问题。
数据架构
尽可能将大型实例拆分为较小的实例
如有可能,请使用多个较小的 AlloyDB 集群,而不是使用一个大型实例。管理单个大型实例时,会遇到一组较小实例不会发生的难题。
请勿使用太多的数据库表
确保实例的表数少于 10000 个。太多数据库表可能会影响数据库的升级时间。
查询性能
如果您运行分析查询,请启用列式引擎
请参阅 AlloyDB 列式引擎概览。 查看哪些类型的查询可从启用列式引擎中受益。
您可以监控列式引擎的使用情况。
如果您刚开始接触列式引擎,请先熟悉自动列式处理。然后,您可以选择手动管理列。
扩缩实例以提高查询性能
如果您遇到查询性能低下的问题,请考虑对实例进行扩容。
每个 SKU 的 vCPU 和内存配置有限,并且每个 SKU 的快速缓存也有限。如果您的数据量很大,并且查询性能不佳,请考虑扩容到更大的实例。
部署读取池并将读取查询分流到读取池
如果您的应用执行大量写入和读取操作,请考虑部署读取池并将读取查询分流到读取池。
对于频繁读取的工作负载,请添加读取池实例以从主实例分流读取流量。
应用实现
采用最佳连接管理做法
采用最佳连接管理做法,例如连接池和指数退避算法。
采用有效的连接管理方法可改善应用对资源的使用,并帮助您保持在 AlloyDB 连接限制内。
测试应用对维护更新的响应情况
测试应用对维护更新的响应情况,这可能在维护窗口期间随时发生。
您可以通过执行计算扩缩操作或更新静态 PostgreSQL 标志(该标志会触发低停机时间维护 (LDTM))来模拟维护更新。
在 LDTM 期间,实例在短时间内变得不可用,并且现有连接会被丢弃。通过测试 LDTM,您可以更好地了解应用处理计划性维护的方式以及系统恢复的速度。
测试应用对故障切换的响应情况
测试应用对故障切换的响应情况,这可能随时发生。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 API 手动启动故障切换。如需了解详情,请参阅启动故障切换。
避免大型事务
保持事务小而简短。如果需要进行大型数据库更新,请将其分为几个较小的事务执行,而不是通过一个大型事务来执行。
避免大量子交易
如果存在长时间运行的事务,请避免在事务中使用大量子事务。
在 AlloyDB 中,在 PL/pgSQL 错误块中执行事务会创建与该错误块对应的事务的子事务。如果存在长时间运行的事务,且子事务的数量超过 64 个,则整体系统性能会下降。
使用最新版本的 Auth Proxy
如果您使用的是 AlloyDB Auth Proxy,请确保使用其最新版本。如需了解详情,请参阅确保 Auth Proxy 客户端为最新版本。
数据导入和导出
从 Cloud SQL for PostgreSQL 备份恢复数据以进行迁移
如需了解如何轻松迁移,请参阅从 Cloud SQL for PostgreSQL 迁移到 AlloyDB。
如需了解如何使用持续数据复制将数据从 Cloud SQL for PostgreSQL 迁移到 AlloyDB,请参阅 Database Migration Service for PostgreSQL to AlloyDB。
加快小型实例的导入速度
为小型实例导入大型数据集时,您可以临时增加实例的 CPU 和 RAM,以提高性能。
备份与恢复
使用适当的 AlloyDB 功能保护数据
使用备份、时间点恢复 (PITR) 和导出功能来实现冗余和保护。它们各自防范不同的情形,并在强大的数据保护策略中相互补充。
备份属于轻量级;通过备份,可以将实例上的数据恢复到进行备份时的状态。不过,AlloyDB 的备份功能存在一些限制。如果您删除实例,备份也会被删除。您无法备份单个数据库或表。并且如果实例所在的区域不可用,则无法通过对应备份恢复实例,即使在可用区域中也不行。
借助时间点恢复,您可以将实例恢复到特定的时间点。例如,如果错误导致数据丢失,您可以将数据库恢复到错误发生前的状态。 时间点恢复始终会创建一个新实例,而不能恢复到现有实例。
导出需要较长时间才能创建,因为在 Cloud Storage 中创建了可用于重新创建数据的外部文件。如果您删除实例,导出不会受影响。此外,您可以只导出单个数据库或表,具体取决于您选择的导出格式。
保护您的实例和备份免遭意外删除
如需启用默认的意外删除防范功能,请使用 Google Cloud 控制台或 Terraform 创建 AlloyDB 实例。
使用 AlloyDB 中的导出功能导出数据以提供额外保护。将 Cloud Scheduler 与 Cloud Scheduler API 搭配使用以自动执行导出管理。
对于更高级的场景,将 Cloud Scheduler 与 Cloud Run functions 搭配使用以实现自动化。