排查 Aurora MySQL 数据库内存不足问题 - Amazon Aurora

排查 Aurora MySQL 数据库内存不足问题

Aurora MySQL aurora_oom_response 实例级参数可以使数据库实例能够监控系统内存,并估计各种语句和连接消耗的内存。如果系统内存不足,它可能会执行一系列操作,来尝试释放该内存。这样做的目的是试图避免由于内存不足(OOM)问题而导致数据库重启。该实例级参数使用一串以逗号分隔的操作,在内存不足时,数据库实例将执行这些操作。Aurora MySQL 版本 2 和 3 支持 aurora_oom_response 参数。

以下值及其组合可用于 aurora_oom_response 参数。空字符串表示未执行任何操作,实际上是关闭此功能,使数据库易于 OOM 重启。

  • decline – 在数据库实例出现内存不足时,拒绝新的查询。

  • kill_connect – 关闭消耗大量内存的数据库连接,并结束当前事务和数据定义语言(DDL)语句。Aurora MySQL 版本 2 不支持此响应。

    有关更多信息,请参阅 MySQL 文档中的 KILL statement

  • kill_query – 按内存消耗量降序结束查询,直到实例内存高于下限阈值。未结束 DDL 语句。

    有关更多信息,请参阅 MySQL 文档中的 KILL statement

  • print – 仅输出占用大量内存的查询。

  • tune – 调整内部表缓存以将一些内存释放回系统。在内存不足的情况下,Aurora MySQL 会减少用于缓存(例如 table_open_cachetable_definition_cache)的内存。最终,当系统不再内存不足时,Aurora MySQL 会将其内存使用率恢复正常。

    有关更多信息,请参阅 MySQL 文档中的 table_open_cachetable_definition_cache

  • tune_buffer_pool – 减小缓冲池的大小以释放一些内存,使数据库服务器可以使用这些内存来处理连接。Aurora MySQL 版本 3.06 及更高版本支持此响应。

    您必须在 aurora_oom_response 参数值中将 tune_buffer_poolkill_querykill_connect 进行配对。否则,即使您在参数值中包含 tune_buffer_pool,也无法调整缓冲池的大小。

在低于 3.06 的 Aurora MySQL 版本中,对于内存小于或等于 4GiB 的数据库实例类,当实例面临内存压力时,默认操作包括 printtunedeclinekill_query。对于内存大于 4GiB 的数据库实例类,该参数值默认为空(已禁用)。

在 Aurora MySQL 版本 3.06 及更高版本中,对于内存小于或等于 4 GiB 的数据库实例类,Aurora MySQL 还会关闭占用内存最高的连接(kill_connect)。对于内存大于 4 GiB 的数据库实例类,默认参数值为 print

如果您经常遇到内存不足问题,则启用 performance_schema 后,可以使用内存摘要表来监控内存使用情况。

有关与 OOM 相关的 Amazon CloudWatch 指标,请参阅 Amazon Aurora 的实例级指标。有关与 OOM 相关的全局状态变量,请参阅 Aurora MySQL 全局状态变量