DELETE 文を使用して MySQL テーブルから大量のデータを削除しても、ディスク領域は直接解放されません。この文は、データベースレコードまたはデータページを再利用可能としてマークするだけです。表領域を再利用してディスク使用量を削減するには、OPTIMIZE TABLE コマンドを実行する必要があります。
前提条件
OPTIMIZE TABLE文をサポートするのは、InnoDB および MyISAM エンジンのみです。インスタンスの残りのディスク領域は、最適化するテーブルのサイズ以上である必要があります。
説明インスタンスの残りのディスク領域が不十分な場合は、まずディスク領域をスケールアウトする必要があります。操作が完了したら、必要に応じてディスク領域をスケールインできます。システムは差額を返金します。
考慮事項
まず大量のデータを削除する必要があります:
DELETE文を使用して最初に大量のデータを削除しない限り、OPTIMIZE TABLEコマンドは表領域の使用量を効果的に削減しません。ディスク使用量の一時的な増加:
OPTIMIZE TABLEコマンドを実行すると、MySQL は再編成されたデータを格納するための一時テーブルを作成します。これにより、ディスク使用量が一時的に増加します。操作が完了すると、一時テーブルは削除され、ディスク使用量は通常に戻ります。解放後、テーブルとインデックスの統計情報が変更されない場合があります: ディスク領域は解放されますが、MySQL のテーブル統計情報は迅速にリフレッシュされません。詳細については、「OPTIMIZE TABLE コマンドを実行した後、ApsaraDB RDS for MySQL インスタンスのディスク領域が変わらないのはなぜですか?」をご参照ください。
パフォーマンスへの影響とピーク時間のリスク: ApsaraDB RDS for MySQL 5.7 および 8.0 では、
OPTIMIZE TABLEコマンドはオンライン DDL メソッドを使用して実行され、同時 DML 操作をサポートします。ただし、大きなテーブルでこのコマンドを実行すると、I/O およびバッファーリソースの使用量が急増する可能性があります。これにより、テーブルロックやリソース競合が発生する可能性があります。ピーク時間帯には、インスタンスが利用できなくなったり、モニタリングが中断されたりすることさえあります。したがって、サービスに影響を与えないように、このコマンドはオフピーク時間帯に実行する必要があります。
コマンドラインの使用
必要に応じて、
DELETE文を使用して不要なデータを削除します。OPTIMIZE TABLEコマンドを実行して表領域を解放します。OPTIMIZE TABLE <$Database1>.<Table1>,<$Database2>.<Table2>;説明<$Database1> と <$Database2> はデータベース名を表します。<Table1> と <Table2> はテーブル名を表します。
InnoDB エンジンを使用するテーブルで
OPTIMIZE TABLE文を実行すると、次のメッセージが返されます。このメッセージは、文が正常に実行されたことを示します。このメッセージは無視してかまいません。ステータスに "ok" が返されることを確認してください。詳細については、「OPTIMIZE TABLE Statement」をご参照ください。Table does not support optimize, doing recreate + analyze instead
DMS の使用
左側のナビゲーションウィンドウで、ターゲットインスタンスを見つけてインスタンス ID をクリックします。ターゲットデータベースをダブルクリックします。テーブルを右クリックし、[一括操作] を選択します。
領域を解放するテーブルを選択し、 を選択します。

表示されるダイアログボックスで、情報が正しいことを確認し、[確認] をクリックします。