本页面介绍了一些最佳做法,遵循这些做法可从 Cloud SQL 获得最佳的性能、耐用性和可用性。
如果您的 Cloud SQL 实例出现问题,请在排查问题时查看以下内容:
实例配置和管理
最佳做法 | 更多信息 |
---|---|
阅读并遵循操作指南,确保您的实例在 Cloud SQL 服务等级协议 (SLA) 的涵盖范围内。 | |
为主实例配置维护期,以控制执行中断性更新的时间。 | 请参阅维护期。 |
对于频繁读取的工作负载,请添加只读副本以从主实例分流流量。 | 或者,您可以使用负载平衡器(如 HAProxy)来管理发送到副本的流量。 |
如果您定期删除并重新创建实例,请在实例 ID 中使用时间戳以增加新实例 ID 可用的可能性。 | 删除实例后的几天内,您不能再次使用已删除的实例的 ID。 |
在先前操作完成之前,请勿启动管理操作。 |
Cloud SQL 实例在完成先前的操作之前不接受新的操作请求。如果您试图提前启动新操作,则操作请求将失败。这也包括实例重启在内。
Cloud Console 中的实例状态不会反映操作是否正在运行。绿色对勾标记仅表示实例处于 |
更新后清空系统表 |
MySQL 系统表(例如 mysql.user 或 mysql.db)使用 MyISAM 存储引擎。这些表很容易受到异常关停的影响;对这些表进行更改后(例如,使用 mysql 客户端添加或更新用户),您应发出 FLUSH CHANGES 命令。如果确实发生 MyISAM 损坏,并且实例能够重启,则您可以使用 CHECK TABLE 和 REPAIR TABLE 命令尝试解决损坏,但表的内容可能不正确。 |
数据架构
最佳做法 | 更多信息 |
---|---|
尽可能将实例分片。 | 如果可能,使用多个较小的 Cloud SQL 实例要优于使用一个大型实例。 管理单个大型实例时,会遇到管理许多较小实例不会发生的难题。 |
请勿使用太多的数据库表。 |
太多数据库表可能会影响实例响应时间。超过 10000 个表将影响您的服务等级协议 (SLA) 覆盖范围。如需了解详情,请参阅操作指南。 |
确保表具有主键或唯一键。 | Cloud SQL 使用基于行的复制,此复制最适用于具有主键或唯一键的表。 |
应用实现
最佳做法 | 更多信息 |
---|---|
采用最佳连接管理做法,例如连接池和指数退避算法。 | 使用这些方法将改善应用对资源的使用,并帮助您保持在 Cloud SQL 连接限制内。如需了解详情和代码示例,请参阅管理数据库连接。 |
测试应用对维护更新的响应情况,这可能在维护期间随时发生。 | 与维护更新最相近的做法是更改实例的机器类型,但在维护更新期间,先更新故障转移副本(并进入离线状态),然后在副本更新完成后更新主实例(并进入离线状态)。对于机器类型更改,主实例会先于副本进入离线状态。确保应用会尝试重新连接到数据库,最好使用指数退避算法至少 10 分钟,以确保应用在维护事件后继续运行。如需了解详情,请参阅管理数据库连接。 |
测试应用对故障转移的响应情况,这可能随时发生。 | 您可以使用 Cloud Console、gcloud 命令行工具或 API 手动启动故障转移。请参阅启动故障转移。 |
避免大型事务。 | 保持事务小而简短。如果需要进行大型数据库更新,将其分为几个较小的事务执行,而不是通过一个大型事务。 |
如果您使用的是 Cloud SQL 代理,请确保使用最新版本。 | 请参阅保持 Cloud SQL 代理为最新版本。 |
数据导入和导出
最佳做法 | 更多信息 |
---|---|
加快小型实例的导入。 | 对于小型实例,您可以临时增加实例层级以提高导入大型数据集时的性能。 |
如果您要导出数据以导入到 Cloud SQL 中,请务必采用正确的过程。 | 请参阅从外部代管式数据库服务器导出数据。 |
在导出时使用适当的 mysqldump 命令加快导入。 |
如果您要使用 mysqldump 实用程序导出数据以导入到 Cloud SQL 中,请考虑以下选项:
|
使用导出和导入功能迁移数据时,导入和导出需采用完全相同的 SQL 模式。 | 请参阅使用相同的 SQL 模式来执行导入和导出操作。 |
备份与恢复
最佳做法 | 更多信息 |
---|---|
使用适当的 Cloud SQL 功能保护您的数据。 |
备份、时间点恢复和导出是提供数据冗余和保护的方法。它们各自防范不同的情形,并在强大的数据保护策略中相互补充。 备份属于轻量级;通过备份,可以将实例上的数据恢复到进行备份时的状态。但是,备份也存在一些限制。如果您删除实例,备份也会被删除。您无法备份单个数据库或表。并且如果实例所在的区域不可用,则无法通过对应备份恢复实例,即使在可用区域中也不行。 借助时间点恢复,您可以将实例恢复到特定的时间点。例如,如果错误导致数据丢失,您可以将数据库恢复到错误发生前的状态。时间点恢复始终会创建一个新实例;您不能对现有实例执行时间点恢复。 导出需要较长时间才能创建,因为在 Cloud Storage 中创建了可用于重新创建数据的外部文件。如果您删除实例,导出不会受影响。此外,您可以只导出单个数据库甚至表,具体取决于您选择的导出格式。 |