MySQL データベースで INSERT、UPDATE、DELETE 文が頻繁に実行されると、データがディスク上で連続して格納されなくなり、表領域のフラグメントが生成されます。表領域のフラグメントは、データベースのパフォーマンスを低下させます。`OPTIMIZE TABLE` 文の実行などの一般的な操作で表領域のフラグメントをリサイクルしようとすると、テーブルがロックされ、ビジネスに影響が及ぶ可能性があります。Data Management (DMS) のロックレス変更機能を使用すると、データベース変更中にテーブルがロックされてビジネスに影響が及ぶのを防ぎながら、表領域のフラグメントを自動的にリサイクルできます。これにより、データベースのパフォーマンスと効率が向上し、ストレージコストを削減できます。このトピックでは、DMS でロックレスのスキーマ変更チケットを送信して、表領域のフラグメントを自動的にリサイクルする方法について説明します。
前提条件
ターゲットデータベース内のテーブルを変更する権限があります。詳細については、「自分の権限の表示」および「権限をリクエストするためのチケット送信」をご参照ください。
MySQL データベースインスタンスでロックレス変更機能が有効になっている必要があります。詳細については、「ロックレス変更機能を有効にする」をご参照ください。
注意事項
サイズの大きいテーブルから断片化された領域を再利用する場合、インスタンスの残りのストレージ領域がテーブルサイズの 2〜3 倍以上あることを確認してください。また、変更プロセス中は、インスタンスの残りのストレージ領域を注意深くモニターする必要があります。
サイズの大きいテーブルの表領域のフラグメントをリサイクルする場合、データを一時的に格納するためのコピーが必要になることがあり、これにより追加のストレージが消費されます。データベースインスタンスの残りのストレージ領域が不足している場合、DMS による表領域のフラグメントのリサイクルに失敗したり、データベースインスタンスがロックされたりする可能性があります。
DMS は、テーブルをロックせずにスキーマを変更する DDL 文を実行することで、表領域のフラグメントをリサイクルします。文の実行成功率は 100% ではないことにご注意ください。
テーブルの断片化された領域サイズの表示
DMS の SQL コンソールで、次の SQL 文を入力すると、テーブル内の断片化された領域を表示できます:SHOW TABLE STATUS LIKE 'table_name';。SQL コンソールでのクエリの実行方法の詳細については、「SQL ウィンドウの概要」をご参照ください。
次の図は、クエリ結果の例を示しています。`Data_free` パラメーターは、テーブル内の表領域のフラグメントのサイズを示します。単位はバイトです。

断片化されたテーブル領域の再利用
- DMS コンソール V5.0 にログインします。
上部のナビゲーションバーで、[データベース開発] > [データ変更] > [ロックレス変更] を選択します。
説明DMS コンソールをシンプルモードで使用している場合は、左上隅の
アイコンをクリックし、 を選択します。ロックレスのスキーマ変更チケットを設定します。詳細については、「ロックレス変更チケットを使用したロックレスのスキーマ変更の実行」をご参照ください。
インスタンスでロックレス変更機能が有効になると、ロックレスのスキーマ進化チケットを実行するたびに、DMS は断片化された領域を自動的に再利用します。システムがより確実に断片化された領域を再利用し、依存テーブルや関連テーブルへの影響を軽減するために、チケットで次のいずれかの SQL 文を使用して領域を再編成および再利用できます:
OPTIMIZE TABLE table_name;ALTER TABLE table_name COMMENT 'The new comment for the table';ALTER TABLE table_name ENGINE=InnoDB;ALTER TABLE table_name MODIFY COLUMN field_name INT COMMENT 'The new comment for the field';説明前述のすべての SQL 文で領域を再利用できますが、
OPTIMIZE TABLEを含め、DMS でロックレスに実行した場合、ネイティブでOPTIMIZE TABLEを実行する場合と比較して、通常、断片化を解消する効果は劣ります。