排查 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_cache
和table_definition_cache
)的内存。最终,当系统不再内存不足时,Aurora MySQL 会将其内存使用率恢复正常。有关更多信息,请参阅 MySQL 文档中的 table_open_cache
和 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
。
如果您经常遇到内存不足问题,则启用 performance_schema
后,可以使用内存摘要表
有关与 OOM 相关的 Amazon CloudWatch 指标,请参阅 Amazon Aurora 的实例级指标。有关与 OOM 相关的全局状态变量,请参阅 Aurora MySQL 全局状态变量。