最佳做法

本页面介绍了一些最佳做法,遵循这些做法可从 Cloud SQL 获得最佳的性能、耐用性和可用性。

如果您的 Cloud SQL 实例出现问题,请在排查问题时查看以下内容:

实例配置和管理

最佳做法 更多信息
阅读并遵循操作指南,确保您的实例在 Cloud SQL 服务等级协议 (SLA) 的涵盖范围内。
为主实例配置维护期,以控制执行中断性更新的时间。 请参阅维护期
对于频繁读取的工作负载,请添加读取副本以从主实例分流流量。 或者,您可以使用负载平衡器(如 HAProxy)来管理发送到副本的流量。
如果您定期删除并重新创建实例,请在实例 ID 中使用时间戳以增加新实例 ID 可用的可能性。 删除实例后的几天内,您不能再次使用已删除的实例的 ID。
在先前操作完成之前,请勿启动管理操作。

Cloud SQL 实例在完成先前的操作之前不接受新的操作请求。如果您试图提前启动新操作,则操作请求将失败。这也包括实例重启在内。

Cloud Console 中的实例状态不会反映操作是否正在运行。绿色对勾标记仅表示实例处于 RUNNABLE 状态。如需查看操作是否正在运行,请转到操作标签页,然后检查最近操作的状态。

更新后清空系统表 MySQL 系统表(例如 mysql.user 或 mysql.db)使用 MyISAM 存储引擎。这些表很容易受到异常关停的影响;对这些表进行更改后(例如,使用 mysql 客户端添加或更新用户),您应发出 FLUSH CHANGES 命令。如果确实发生 MyISAM 损坏,并且实例能够重启,则您可以使用 CHECK TABLEREPAIR TABLE 命令尝试解决损坏,但表的内容可能不正确。

数据架构

最佳做法 更多信息
尽可能将实例分片。 如果可能,使用多个较小的 Cloud SQL 实例要优于使用一个大型实例。 管理单个大型实例时,会遇到管理许多较小实例不会发生的难题。
请勿使用太多的数据库表。

太多数据库表可能会影响实例响应时间。超过 10000 个表将影响您的服务等级协议 (SLA) 覆盖范围。如需了解详情,请参阅操作指南

确保表具有主键或唯一键。 Cloud SQL 使用基于行的复制,此复制最适用于具有主键或唯一键的表。

应用实现

最佳做法 更多信息
采用最佳连接管理做法,例如连接池和指数退避算法。 使用这些方法将改善应用对资源的使用,并帮助您保持在 Cloud SQL 连接限制内。如需了解详情和代码示例,请参阅管理数据库连接
测试应用对维护更新的响应情况,这可能在维护期间随时发生。 与维护更新最相近的做法是更改实例的机器类型,但在维护更新期间,先更新故障转移副本(并进入离线状态),然后在副本更新完成后更新主实例(并进入离线状态)。对于机器类型更改,主实例会先于副本进入离线状态。确保应用会尝试重新连接到数据库,最好使用指数退避算法至少 10 分钟,以确保应用在维护事件后继续运行。如需了解详情,请参阅管理数据库连接
测试应用对故障转移的响应情况,这可能随时发生。 您可以使用 Cloud Console、gcloud 命令行工具或 API 手动启动故障转移。请参阅启动故障转移
避免大型事务。 保持事务小而简短。如果需要进行大型数据库更新,将其分为几个较小的事务执行,而不是通过一个大型事务。
如果您使用的是 Cloud SQL 代理,请确保使用最新版本。 请参阅保持 Cloud SQL 代理为最新版本

数据导入和导出

最佳做法 更多信息
加快小型实例的导入。 对于小型实例,您可以临时增加实例层级以提高导入大型数据集时的性能。
如果您要导出数据以导入到 Cloud SQL 中,请务必采用正确的过程。 请参阅从外部代管式数据库服务器导出数据
在导出时使用适当的 mysqldump 命令加快导入。 如果您要使用 mysqldump 实用程序导出数据以导入到 Cloud SQL 中,请考虑以下选项:
  • 停用自动提交并使用 --single-transaction 选项将文件或表封装在单个事务中。
  • 使用 --extended-insert 选项(默认启用)在每个 INSERT 语句中包含多行。
使用导出和导入功能迁移数据时,导入和导出需采用完全相同的 SQL 模式。 请参阅使用相同的 SQL 模式来执行导入和导出操作
使用适当的 Cloud SQL 功能保护您的数据。

备份和导出是提供数据冗余和保护的两种方法。它们各自防范不同的情形,并在强大的数据保护策略中相互补充。

备份属于轻量级;通过备份,可以将实例上的数据恢复到进行备份时的状态。但是,备份也存在一些限制。如果您删除实例,备份也会被删除。您无法备份单个数据库或表。并且如果实例所在的区域不可用,则无法通过对应备份恢复实例,即使在可用区域中也不行。

导出需要较长时间才能创建,因为在 Cloud Storage 中创建了可用于重新创建数据的外部文件。如果您删除实例,导出不会受影响。此外,您可以只导出单个数据库甚至表,具体取决于您选择的导出格式。