数据库正在磁盘上创建临时表 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

数据库正在磁盘上创建临时表

您最近的磁盘上临时表使用量显著增加,高达 percentage。数据库每秒创建大约 number 个临时表。这可能会影响性能并增加 db-instance 上的磁盘操作。

支持的引擎版本

Aurora MySQL 的所有版本都支持这些见解信息。

上下文

有时,MySQL 服务器在处理查询时需要创建内部临时表。Aurora MySQL 可以在内存中保留一个内部临时表,此临时表可在此由 TempTable 或 MEMORY 存储引擎进行处理,也可以由 InnoDB 存储在磁盘上。有关更多信息,请参阅《MySQL 参考手册》中的 MySQL 中的内部临时表使用

这个问题的可能原因

磁盘上临时表的增加表明使用了复杂的查询。如果配置的内存不足以在内存中存储临时表,则 Aurora MySQL 会在磁盘上创建表。这可能会影响性能并增加磁盘操作。

操作

根据见解的原因,我们建议采取不同的操作。

  • 对于 Aurora MySQL 版本 3,我们建议您使用 TempTable 存储引擎。

  • 通过仅选择必要的列来优化查询,以返回更少的数据。

    如果在启用所有 statement 分析并对其定时的情况下开启性能模式,则可以查询 SYS.statements_with_temp_tables 以检索使用临时表的查询列表。有关更多信息,请参阅 MySQL 文档中的使用 sys 模式的先决条件

  • 考虑对参与排序和分组操作的列编制索引。

  • 重新编写您的查询以避免使用 BLOBTEXT 列。这些列始终使用磁盘。

  • 调整以下数据库参数:tmp_table_sizemax_heap_table_size

    这些参数的原定设置值为 16MiB。对内存中的临时表使用 MEMORY 存储引擎时,其最大大小由 tmp_table_sizemax_heap_table_size 值定义,以较小者为准。当达到此最大大小时,MySQL 会自动将内存中的内部临时表转换为 InnoDB 磁盘上的内部临时表。有关更多信息,请参阅在 Amazon RDS for MySQL 和 Amazon Aurora MySQL 上使用 TempTable 存储引擎

    注意

    使用 CREATE TABLE 显式创建 MEMORY 表时,只有 max_heap_table_size 变量决定表可以增长多大。也不会转换为磁盘上的格式。

相关指标

以下性能详情指标与此见解相关:

  • Created_tmp_disk_tables

  • Created_tmp_tables

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