

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 資料庫正在磁碟上建立暫存資料表
<a name="proactive-insights.temp-tables"></a>

您最近的磁碟上暫存資料表用量大幅增加，已達*百分比*。資料庫現在每秒建立約*數量*份暫存資料表。這可能會影響 *db-instance* 的效能並增加磁碟操作。

**Topics**
+ [支援的引擎版本](#proactive-insights.temp-tables.context.supported)
+ [Context](#proactive-insights.temp-tables.context)
+ [造成此問題的可能原因](#proactive-insights.temp-tables.causes)
+ [動作](#proactive-insights.temp-tables.actions)
+ [相關指標](#proactive-insights.temp-tables.metrics)

## 支援的引擎版本
<a name="proactive-insights.temp-tables.context.supported"></a>

所有版本的 Aurora MySQL 都支援此洞察資訊。

## Context
<a name="proactive-insights.temp-tables.context"></a>

有時候，MySQL 伺服器需要在處理查詢時建立內部暫存資料表。Aurora MySQL 可以在記憶體中保存內部暫存資料表。可以由 Temptable 或 MEMORY 儲存引擎處理，或由 InnoDB 儲存在磁碟上。如需詳細資訊，請參閱《MySQL 參考手冊》**中的 [MySQL 中的內部暫存資料表使用](https://dev.mysql.com/doc/refman/5.6/en/internal-temporary-tables.html)。

## 造成此問題的可能原因
<a name="proactive-insights.temp-tables.causes"></a>

磁碟上暫存資料表數量增加，表示有使用複雜的查詢。若所設記憶體不足以將暫存資料表儲存在記憶體， Aurora MySQL 會在磁碟上建立資料表。這可能會影響效能並增加磁碟操作。

## 動作
<a name="proactive-insights.temp-tables.actions"></a>

根據洞察的原因，我們會建議不同的動作。
+ 針對 Aurora MySQL 第 3 版，建議您使用 TempTable 儲存引擎。
+ 只選取必要欄，以最佳化查詢，傳回較少的資料。

  若您在啟用並計時所有 `statement` 工具的情況下開啟效能結構描述，您可以查詢 `SYS.statements_with_temp_tables`，以擷取使用暫存資料表的查詢清單。如需詳細資訊，請參閱 MySQL 文件中的[使用 sys 結構描述的先決條件](https://dev.mysql.com/doc/refman/8.0/en/sys-schema-prerequisites.html)。
+ 考慮涉及排序和分組操作的索引欄。
+ 重寫查詢以避免 `BLOB` 和 `TEXT` 欄。這些欄始終使用磁碟。
+ 調校下列資料庫參數：`tmp_table_size` 和 `max_heap_table_size`。

  這些參數的預設值為 16 MiB。針對記憶體內暫存資料表使用 MEMORY 儲存引擎時，大小上限由 `tmp_table_size` 或 `max_heap_table_size` 值定義，以較小值為準。當達到此大小上限時，MySQL 會自動將記憶體內的內部暫存資料表轉換為 InnoDB 磁碟上內部暫存資料表。如需詳細資訊，請參閱[在 Amazon RDS for MySQL 和 Amazon Aurora MySQL 上使用 TempTable 儲存引擎](https://aws.amazon.com/blogs/database/use-the-temptable-storage-engine-on-amazon-rds-for-mysql-and-amazon-aurora-mysql/)。
**注意**  
使用 CREATE TABLE 明確建立 MEMORY 資料表時，只有 `max_heap_table_size` 變數會決定資料表的大小。也沒有轉換為磁碟上的格式。

## 相關指標
<a name="proactive-insights.temp-tables.metrics"></a>

下列績效詳情指標與此洞察相關：
+ Created\$1tmp\$1disk\$1tables
+ Created\$1tmp\$1tables

如需詳細資訊，請參閱 MySQL 文件中的 [RCreated\$1tmp\$1disk\$1tables](https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html#statvar_Created_tmp_disk_tables)。