すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:OPTIMIZE TABLE を使用した MySQL テーブルスペースの再利用

最終更新日:Jun 16, 2026

大規模な MySQL テーブルを扱う場合、DELETE ステートメントを実行しても、ディスク領域は直ちに解放されません。代わりに、データベースレコードまたはデータページを再利用可能としてマークするだけ です。テーブルスペースを再利用してディスク使用量を削減するには、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 とバッファリソース消費が急増し、テーブルロックまたはリソースの競合が発生するリスクがあります。ピーク時には、インスタンスの利用不可や監視の中断につながることもあります。そのため、業務への影響を避けるために、この操作はオフピーク時に実施することを推奨します。

  • OPTIMIZE TABLE 操作の手動終了:MySQL コマンドラインツールや DMS SQL ウィンドウなどのデータベースクライアントで Ctrl+C を押しても、切断されるのは現在のクライアントセッションのみです。バックエンドで実行中の OPTIMIZE TABLE 操作は停止しません。操作を終了するには、別のデータベース接続を確立し、SHOW PROCESSLIST; を実行して OPTIMIZE TABLE 操作のスレッド ID を確認してから、KILL <thread ID>; を実行して該当スレッドを終了します。

コマンドラインでの実行

  1. データベースクライアントを使用して ApsaraDB RDS for MySQL インスタンスに接続します。

  2. 業務要件に基づき、DELETE ステートメントを使用して不要なデータをクリーンアップします。

  3. OPTIMIZE TABLE コマンドを実行してテーブルスペースを再利用します。

    OPTIMIZE TABLE <$Database1>.<Table1>,<$Database2>.<Table2>;
    説明
    • <$Database1> と <$Database2> はデータベース名を表し、<Table1> と <Table2> はテーブル名を表します。

    • InnoDB テーブルで OPTIMIZE TABLE を実行すると、次のメッセージが返されます。これは想定どおりの動作であり、無視できます。最終結果が "ok" の場合、操作は成功しています。詳細については、MySQL 公式ドキュメントの「OPTIMIZE TABLE Statement」をご参照ください。

      Table does not support optimize, doing recreate + analyze instead

DMS での実行

  1. DMS を使用して ApsaraDB RDS for MySQL インスタンスにログオンします。

  2. 左側メニューで対象のインスタンス ID を選択し、データベースをダブルクリックしてから、対象テーブルを右クリックし、 [Batch operation table] を選択します。

  3. 最適化するテーブルを選択し、 テーブルメンテナンス > 最適化テーブル を選択します。

  4. ダイアログボックスの情報を確認し、 OK をクリックします。

関連ドキュメント

断片化したテーブルスペースの再利用

よくある質問

なぜOPTIMIZE TABLE を実行してもディスク容量は解放されないのですか?

問題の説明

大量のデータを削除し、ApsaraDB RDS for MySQL の公式ドキュメントの手順どおりに OPTIMIZE TABLE を実行した後、ユーザーが information_schema.tables の DATA_FREE フィールドを照会する場合があります。値が更新されていないと、ディスク領域の再利用に失敗したと誤解する可能性があります。

原因

領域は再利用されていますが、テーブル統計が速やかに更新されません。これは、ApsaraDB RDS for MySQL 5.6、5.7、および 8.0 (マイナーエンジンバージョンが 20250531 より前) における既知の問題です。これらのバージョンでは、OPTIMIZE TABLE を実行しても、テーブルおよびインデックス統計が自動的に更新されません。その結果、information_schema.tables の DATA_FREE 値は古いデータのままとなり、実際の使用領域を正確に反映しません。詳細については、「Bug #117426: optimize table does not update table and index stats」をご参照ください。

ソリューション

領域が DELETE の後に解放されない場合はどうすればよいですか?

ApsaraDB RDS for MySQL では、DELETE ステートメントを使用してデータを削除しても、コマンドはレコードの位置またはデータページを 再利用可能 としてマークするだけです。ディスクファイルのサイズは変わらないため、テーブルスペースは直接再利用されません。この動作によりテーブルスペースの断片化が発生し、インスタンスのストレージ領域を消費します。

ネイティブ DDL コマンド、または DMS ロックフリースキーマ変更機能を使用できます。いずれの解決策を使用する場合も、事前にストレージ枯渇によるインスタンスロックを防ぐため、インスタンスに十分なディスク領域があることを確認してください

  • コマンドを使用して断片化領域を再編成OPTIMIZE TABLEALTER TABLE <table_name> ENGINE=InnoDB; などの DDL を実行して、テーブルデータとインデックス構造を再編成し、断片化した領域を再利用します。

    重要

    メタデータロックを回避するために、ネイティブ DDL コマンドはオフピーク時に実行してください。詳細については、「使用上の注意」をご参照ください。

  • DMS ロックフリースキーマ変更の使用:メタデータロックを回避するために、DMS ロックフリースキーマ変更機能を使用して、断片化したテーブルスペースを再利用できます。

TRUNCATE または DROP の実行後に領域が再利用されない場合の対処方法

ApsaraDB RDS for MySQL で、TRUNCATE または DROP の実行後にディスク領域が再利用されない場合は、次の手順に従ってください。

  1. 領域再利用のロジックを確認

    TRUNCATE または DROP の実行後、インスタンスのディスク使用量を監視して、領域が再利用されたかどうかを確認します。通常、ディスク使用量の低下は、インスタンス全体の領域における、削除されたテーブルのサイズに応じて発生します。

  2. 古い情報に依存しない

    information_schema.tables または ApsaraDB RDS コンソール ( 自律型サービス > 診断 > 空間解析 ) を使用してテーブルサイズを確認すると、データ更新の遅延により情報が古い場合があります。そのため、最も信頼できる指標として、ディスク使用量メトリクスを使用することを推奨します。

  3. 非同期削除の影響を理解

    Alibaba Cloud の 大容量ファイルの非同期パージなど、非同期削除機能が有効になっている場合、領域は直ちには解放されません。代わりに、バックグラウンドプロセスによって段階的に再利用されます。この場合、非同期プロセスが完了するまで待ってから、ディスク領域が完全に再利用されます。