データベースはディスク上にテンポラリテーブルを作成している
最近のディスク上のテンポラリテーブルの使用率が大幅に増加し、最大 percentage
に達しています。データベースは、1 秒あたり約 number
個のテンポラリテーブルを作成しています。これにより、パフォーマンスに影響が及び、db-instance
に対するディスク操作が増える可能性があります。
サポート対象エンジンバージョン
このインサイト情報は、Aurora MySQL のすべてのバージョンでサポートされています。
Context
MySQL サーバーがクエリの処理中に内部一時テーブルを作成する必要がある場合があります。Aurora MySQL は、内部一時テーブルをメモリに保持できます。このテーブルは、TempTable または MEMORY ストレージエンジンで処理するか、InnoDB によってディスクに保存したりできます。詳細については、MySQL リファレンスマニュアルの「Internal Temporary Table Use in MySQL
この問題の考えられる原因
ディスク上の一時テーブルの増加は、複雑なクエリの使用を示しています。設定されたメモリが一時テーブルをメモリに格納するには不十分な場合、Aurora MySQL はテーブルをディスク上に作成します。これにより、パフォーマンスに影響が及び、ディスク操作が増える可能性があります。
アクション
インサイトの原因に応じて、異なるアクションをお勧めします。
-
Aurora MySQL バージョン 3 の場合、TempTable ストレージエンジンを使用することをお勧めします。
-
必要な列のみを選択して、クエリを最適化して、返されるデータを減らします。
すべての
statement
計測が有効で時間制限のある状態でパフォーマンススキーマを有効にすると、SYS.statements_with_temp_tables
クエリを実行して、一時テーブルを使用するクエリのリストを取得できます。詳細については、MySQL ドキュメントの「Prerequisites for Using the sys Schema」(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」(Amazon RDS for MySQL および Amazon Aurora MySQL で TempTable ストレージ エンジンを使用する) を参照してください。 注記
CREATE TABLE を使用して MEMORY テーブルを明示的に作成する場合、テーブルをどれだけ大きくできるかを決めるのは
max_heap_table_size
変数だけです。また、オンディスク形式への変換もありません。
関連するメトリクス
以下の Performance Insights メトリクスがこのインサイトに関連しています。
-
Created_tmp_disk_tables
-
Created_tmp_tables
詳細については、MySQL ドキュメントの「Created_tmp_disk_tables