IBM Cloud Docs
Databases for MySQL 的最佳实践

Databases for MySQL 的最佳实践

最佳实践
最佳实践 注释
max_allowed_packet 设置正确的值。 在复制设置中,如果大型事务或 binlog 超过限制,超过 max_allowed_packet 大小会导致副本进入失败复制状态,并造成锁定主副本的风险。 在 MySQL 列中使用 BLOB 或 VARTEXT 列存储文件内容可能会导致复制和恢复备份时出现问题。 如果在任何列中加载不同长度的数据,建议将 max_allowed_packet 配置为最大值。 此外,不要在特定表中使用多个宽 LONGBLOB 列,因为这可能导致行大小超过允许的最大值,使用时间点还原可能无法正常工作。
在行数较多的表中执行主键。 为任何大于 5K 行的表添加主键都能极大地优化复制,防止过度延迟。 建议为在单条语句中执行 5K 行以上 DELETE 或 UPDATE 操作的任何表定义一个主键。 如果无法添加主键,则分批删除 < 5K 行,每批提交一次。
尽可能使用 DROP TABLE 和 TRUNCATE TABLE,而不是整个表的 DELETE。 复制会记录每一行的删除,这会大大降低处理速度。 建议将删除和更新分块。 请注意,DROP、CREATE 和 TRUNCATE 属于 DDL 语句,它们不会在备份过程中完成,而是要等到备份操作完成后才会完成。 日志条目会显示备份期间这些语句阻塞时的警告信息。 您可以通过检查监控仪表板的磁盘使用面板来估算备份时间。 根据经验,备份 500 GB 的数据大约需要 90 分钟。
尽量减少 UPDATE JOIN 或 DELETE 等单语句多行操作,使用 WHERE 范围子句尽量减少触及的行数。 这种做法可以提高查询性能,减少锁的争用。
在应用程序端使用连接池。 池化可重复使用连接,避免连接数达到最大值。 确保您的数据池大小远小于数据库的 max_connections。 执行重试逻辑和捕获异常,以处理池耗尽或连接失败。
为每个生产应用程序使用专用的 ICD-MySQL 实例,从而减少爆炸半径。 应用程序的分离降低了每个服务实例的容量,最大限度地减少了因许多应用程序的需求聚集而造成的问题。
为每个 MySQL 实例部署一个 MySQL 读副本。 读取副本能够支持主实例之外的读取流量,从而减少总体工作量并提高可靠性。