你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Database for MySQL 灵活服务器上执行服务器操作的最佳做法

了解使用 Azure Database for MySQL 灵活服务器的最佳做法。 在向平台添加新功能时,我们会继续重点关注优化本部分中详述的最佳做法。

Azure Database for MySQL 灵活服务器操作指南

下面是在使用 Azure Database for MySQL 灵活服务器提高数据库性能时应遵循的操作指南:

  • 共置:若要减少网络延迟,请将客户端和数据库服务器置于同一 Azure 区域

  • 监视内存、CPU 和存储使用情况:可以设置警报,以在使用模式发生更改或在接近部署容量时通知你,以便你可以保持系统性能和可用性

  • 加速日志增强性能:启用加速日志功能可优化与事务日志相关的操作,从而提高服务器吞吐量和性能。 此功能无需额外付费即可使用,是对业务关键服务层级用户操作最佳做法的重要补充

  • 纵向扩展 DB 实例:接近存储容量限制时,可以进行纵向扩展。 存储和内存中应具有一些缓冲区,以适应应用程序中不可预见的需求增长。 还可以启用存储自动增长功能,以确保服务在存储接近存储限额时自动缩放存储。

  • 配置备份:根据业务需求启用本地或异地冗余备份。 此外,还可以修改保持期,即备份可用于业务连续性的时长。

  • 使用自动缩放 IOPS 优化 I/O 容量:如果数据库工作负载所需的 I/O 容量大于预配的容量,数据库的恢复或其他事务性操作将变慢。 若要增加服务器实例的 I/O 容量,请执行以下任一操作:

    • 使用自动缩放 IOPS:自动缩放 IOPS 无需预配每秒特定数量的 I/O 操作。 相反,它允许服务器根据工作负载要求自动调整 IOPS。 这意味着,服务器可以根据工作负载需求自动纵向扩展或缩减 IOPS。

    • Azure Database for MySQL 灵活服务器按预配的每 GB 存储 3 个 IOPS 这一速率提供 IOPS 缩放。 增加预配的存储以缩放 IOPS,从而提高性能。

    • 如果已在使用预配的 IOPS 存储,请预配额外的吞吐量容量

  • 缩放计算:数据库工作负载还会因 CPU 或内存而受到限制,这可能会对事务处理产生严重影响。 计算(定价层)只能在常规用途或内存优化层之间进行纵向扩展或缩减。

  • 测试故障转移:手动测试服务器实例的故障转移,以了解该过程在你的用例中需要多长时间,并确保访问服务器实例的应用程序可以在故障转移后自动连接到新的服务器实例。

  • 使用主键:确保在操作 Azure Database for MySQL 灵活服务器实例时,表具有主键或唯一键。 这有助于进行备份、复制等,并可提高性能。

  • 配置 TTL 值:如果客户端应用程序要缓存服务器实例的域名服务 (DNS) 数据,请设置一个小于 30 秒的生存时间 (TTL) 值。 由于服务器实例的基础 IP 地址在故障转移后可能会更改,因此,如果应用程序尝试连接到不再提供服务的 IP 地址,长时间缓存 DNS 数据就可能导致连接失败。

  • 使用连接池来避免达到最大连接限制,并使用重试逻辑来避免间歇性连接问题。

  • 如果使用副本,请使用 ProxySQL 在主服务器和可读辅助副本服务器之间进行负载均衡。 请参阅此处的设置步骤。

  • 预配资源时,请务必为 Azure Database for MySQL 灵活服务器实例启用自动增长。 这不会增加额外的费用,并将保护数据库免受可能遇到的任何存储瓶颈的影响。

将 InnoDB 与 Azure Database for MySQL 灵活服务器配合使用

  • 如果使用 ibdata1 功能(即系统表空间数据文件),那么即使从表中删除数据,或将表移至 file-per-table tablespaces,也无法收缩或清除数据文件。

  • 对于大小超过 1 TB 的数据库,应在 innodb_file_per_table tablespace 中创建表。 对于大小超过 1 TB 的单个表,应使用分区表。

  • 对于具有大量 tablespace 的服务器,由于在 Azure Database for MySQL 灵活服务器启动或故障转移期间要进行顺序表空间扫描,因此引擎启动会非常缓慢。

  • 如果表的总数小于 500,则在创建表之前设置 innodb_file_per_table = ON。

  • 如果数据库中包含 500 多个表,请查看每个表的表大小。 对于大型表,仍应考虑使用 file-per-table 表空间来避免系统表空间文件达到最大存储限制。

注意

对于大小小于 5 GB 的表,请考虑使用系统表空间

CREATE TABLE tbl_name ... *TABLESPACE* = *innodb_system*;
  • 如果你有一个大型表,并且该表可能会增长到超过 1 TB,请在创建表时对表进行分区

  • 使用多个 Azure Database for MySQL 灵活服务器实例,并将表分散到这些服务器上。 如果有大约 10,000 个表或更多的表,请避免在单个服务器上放置过多的表。