

# 排查 Aurora MySQL 数据库内存不足问题
<a name="AuroraMySQLOOM"></a>

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](https://dev.mysql.com/doc/refman/8.0/en/kill.html)。
+ `kill_query` – 按内存消耗量降序结束查询，直到实例内存高于下限阈值。未结束 DDL 语句。

  有关更多信息，请参阅 MySQL 文档中的 [KILL statement](https://dev.mysql.com/doc/refman/8.0/en/kill.html)。
+ `print` – 仅输出占用大量内存的查询。
+ `tune` – 调整内部表缓存以将一些内存释放回系统。在内存不足的情况下，Aurora MySQL 会减少用于缓存（例如 `table_open_cache` 和 `table_definition_cache`）的内存。最终，当系统不再内存不足时，Aurora MySQL 会将其内存使用率恢复正常。

  有关更多信息，请参阅 MySQL 文档中的 [table\$1open\$1cache](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_table_open_cache) 和 [table\$1definition\$1cache](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_table_definition_cache)。
+ `tune_buffer_pool` – 减小缓冲池的大小以释放一些内存，使数据库服务器可以使用这些内存来处理连接。Aurora MySQL 版本 3.06 及更高版本支持此响应。

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

在低于 3.06 的 Aurora MySQL 版本中，对于内存小于或等于 4GiB 的数据库实例类，当实例面临内存压力时，默认操作包括 `print`、`tune`、`decline` 和 `kill_query`。对于内存大于 4GiB 的数据库实例类，该参数值默认为空（已禁用）。

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

在 Aurora MySQL 版本 3.09 及更高版本中，对于内存大于 4 GiB 的数据库实例类，默认参数值为 `print,decline,kill_connect`。

如果您经常遇到内存不足问题，则启用 `performance_schema` 后，可以使用[内存摘要表](https://dev.mysql.com/doc/refman/8.3/en/performance-schema-memory-summary-tables.html)来监控内存使用情况。

有关与 OOM 相关的 Amazon CloudWatch 指标，请参阅 [Amazon Aurora 的实例级指标](Aurora.AuroraMonitoring.Metrics.md#Aurora.AuroraMySQL.Monitoring.Metrics.instances)。有关与 OOM 相关的全局状态变量，请参阅 [Aurora MySQL 全局状态变量](AuroraMySQL.Reference.GlobalStatusVars.md)。