MySQL テーブルに大量のデータが含まれている場合、DELETE 文を使用してデータをクリーンアップしてもディスク容量は直接解放されません。データベースレコードまたはデータページが再利用可能としてマークされるだけです。実際に表領域を解放し、ディスク使用量を削減するには、OPTIMIZE TABLE を使用できます。
前提条件
InnoDB エンジンと MyISAM エンジンのみが
OPTIMIZE TABLE文をサポートしています。インスタンスの残りのディスク容量は、解放されるテーブルの容量以上である必要があります。
説明インスタンスの残りのディスク領域が不足している場合は、まずディスク領域のスケールアップが必要です。操作完了後、必要に応じてディスク領域をスケールダウンできます。システムにより差額の返金も行われます。
考慮事項
最初に大量のデータを削除する必要があります。
DELETEを使用して最初に大量のデータを削除しないと、OPTIMIZE TABLEを直接実行しても表領域の使用量は効果的に削減されません。ディスク使用量の一時的な増加。
OPTIMIZE TABLEを実行すると、MySQL は再編成されたデータを格納するための一時テーブルを作成します。これにより、ディスク容量が一時的に増加します。操作が完了すると、一時テーブルは削除され、ディスク使用量は通常に戻ります。パフォーマンスへの影響とピーク時のリスク。RDS MySQL 5.7 および 8.0 では、
OPTIMIZE TABLEはオンライン DDL を使用して実行され、同時 DML 操作をサポートしています。ただし、大きなテーブルでこの操作を実行すると、突然の IO およびバッファリソースの消費が発生し、テーブルロックまたはリソース競合のリスクがあります。ビジネスのピーク時には、インスタンスが使用できなくなったり、監視が中断されたりする可能性があります。そのため、通常のビジネス運用への影響を避けるために、この操作はビジネスのオフピーク時に実行することをお勧めします。
CLI を使用して表領域を解放する
必要に応じて、
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 を選択し、ターゲットデータベースをダブルクリックし、任意のテーブル名を右クリックして、[一括操作] を選択します。
容量を解放するテーブルを選択し、 を選択します。

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