

# データベースはディスク上にテンポラリテーブルを作成している
<a name="proactive-insights.temp-tables"></a>

最近のディスク上のテンポラリテーブルの使用率が大幅に増加し、最大 *percentage* に達しています。データベースは、1 秒あたり約 *number* 個のテンポラリテーブルを作成しています。これにより、パフォーマンスに影響が及び、*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 リファレンスマニュアル*の「[Internal Temporary Table Use in MySQL](https://dev.mysql.com/doc/refman/5.6/en/internal-temporary-tables.html)」(MySQL での内部一時テーブルの使用) を参照してください。

## この問題の考えられる原因
<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 ドキュメントの「[Prerequisites for Using the sys Schema](https://dev.mysql.com/doc/refman/8.0/en/sys-schema-prerequisites.html)」(sys スキーマを使用するための前提条件) を参照してください。
+ ソートやグループ化の操作に関係する列にインデックスを付けることを検討してください。
+ `BLOB` および `TEXT` 列を避けるように、クエリを書き直します。これらの列は常にディスクを使用します。
+ `tmp_table_size` および `max_heap_table_size` データベースパラメータをチューニングします。

  これらのパラメータのデフォルト値は 16 MiB です。メモリ内一時テーブルに MEMORY ストレージエンジンを使用する場合、最大サイズは、`tmp_table_size` または `max_heap_table_size` 値のいずれか小さい方によって定義されます。この最大サイズに達すると、MySQL はインメモリ内部一時テーブルを InnoDB オンディスク内部一時テーブルに自動的に変換します。詳細については、「[Use the TempTable storage engine on Amazon RDS for MySQL and Amazon Aurora MySQL](https://aws.amazon.com/blogs/database/use-the-temptable-storage-engine-on-amazon-rds-for-mysql-and-amazon-aurora-mysql/)」(Amazon RDS for MySQL および Amazon Aurora MySQL で TempTable ストレージ エンジンを使用する) を参照してください。
**注記**  
CREATE TABLE を使用して MEMORY テーブルを明示的に作成する場合、テーブルをどれだけ大きくできるかを決めるのは `max_heap_table_size` 変数だけです。また、オンディスク形式への変換もありません。

## 関連するメトリクス
<a name="proactive-insights.temp-tables.metrics"></a>

以下の Performance Insights メトリクスがこのインサイトに関連しています。
+ Created\$1tmp\$1disk\$1tables
+ Created\$1tmp\$1tables

詳細については、MySQL ドキュメントの「[Created\$1tmp\$1disk\$1tables](https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html#statvar_Created_tmp_disk_tables)」を参照してください。