DELETE
文を実行してデータを削除すると、delete
文はデータレコードまたはデータページの場所のみを再利用可能としてマークします。 ディスクファイルのサイズは変更されず、テーブルスペースは直接再利用されません。 この場合、OPTIMIZE TABLE
ステートメントを実行して、テーブルスペースを解放できます。
前提条件
- RDSインスタンスがInnoDBまたはMyISAMストレージエンジンを実行している場合にのみ、
OPTIMIZE TABLE
ステートメントを実行できます。 - RDSインスタンスの使用可能なストレージは、リリースするテーブルスペースのサイズ以上である必要があります。 使用可能なストレージが不十分な場合は、RDSインスタンスのストレージ容量を拡張することを推奨します。 詳細については、「ApsaraDB RDS For MySQLインスタンスの仕様の変更」をご参照ください。 説明 テーブルに対して
OPTIMIZE TABLE
文を実行すると、テーブルデータが新しい一時テーブルにコピーされます。 これにより、RDSインスタンスのストレージ使用量が増加します。
使用上の注意
DELETE
文を実行して大量のテーブルデータを削除していない場合、OPTIMIZE table
文ではテーブルが占有するストレージを削減できません。説明 RDSインスタンスの使用可能なストレージが不十分で、大量のテーブルデータを削除する操作を実行しない場合は、次のトピックに基づいてストレージ容量を拡張できます。OPTIMIZE TABLE
ステートメントは、オンラインDDLを使用してMySQL 5.7またはMySQL 8.0を実行するRDSインスタンスで実行され、同時DML操作が許可されます。 大きなテーブルでOPTIMIZE TABLEステートメントを実行すると、I/Oバーストとバッファバーストが発生します。 その結果、テーブルがロックされ、リソースのプリエンプションが発生する可能性がある。 ピーク時にステートメントを実行すると、RDSインスタンスが使用できなくなり、モニタリングブレークポイントが存在する可能性があります。 このステートメントは、オフピーク時に実行することを推奨します。
CLIを使用してテーブルスペースを解放する
- RDSインスタンスに接続します。 詳細については、「データベースクライアントまたはCLIを使用したApsaraDB RDS For MySQLインスタンスへの接続」をご参照ください。
- 次のSQL文を実行して、テーブルスペースを解放します。
optimize table [$Database1].[Table1],[$Database2].[Table2]
説明- [$Database1] と [$Database2] はデータベース名です。 [Table1] と [Table2] はテーブル名です。
- InnoDBストレージエンジンを実行するRDSインスタンスで
OPTIMIZE TABLE
ステートメントを実行すると、次の情報が返されます。 情報は無視できます。 出力にOKが含まれている場合、実行は成功です。 詳細については、「OPTIMIZE TABLEステートメント」をご参照ください。テーブルは最適化をサポートしていません、再作成 + 代わりに分析します
DMSを使用してテーブルスペースを解放する
- RDSインスタンスにログインします。 詳細については、「DMSを使用したApsaraDB RDS For MySQLインスタンスへのログイン」をご参照ください。
- 左側のナビゲーションウィンドウで、RDSインスタンスのIDをクリックし、必要なデータベースをダブルクリックして、テーブル名を右クリックし、[バッチ操作テーブル] を選択します。
- テーブルスペースをリリースするテーブルの名前を選択し、 を選択します。
- 表示されるダイアログボックスで、情報を確認して [OK] をクリックします。