MySQL データベースで INSERT、UPDATE、および DELETE 文が頻繁に実行される場合、データはディスクに連続して保存されなくなり、表領域フラグメントが生成されます。表領域フラグメントはデータベースのパフォーマンスを低下させます。 表領域フラグメントを再利用するために OPTIMIZE TABLE 文を実行するなどの一般的な操作を実行すると、テーブルがロックされ、ビジネスに影響を与える可能性があります。Data Management (DMS) のロックフリー変更機能は、データベースの変更中にテーブルがロックされることによるビジネスへの影響を防ぎながら、表領域フラグメントを自動的に再利用できます。 これにより、データベースのパフォーマンスと効率が向上し、ストレージ コストが削減されます。この Topic では、DMS でロックフリーのスキーマ変更チケットを送信して、表領域フラグメントを自動的に再利用する方法について説明します。
前提条件
領域のデフラグを実行するデータベース内のテーブルを変更する権限を持っていること。詳細については、「所有している権限の表示」および「権限の管理」をご参照ください。
MySQL データベースインスタンスでロックフリーのスキーマ変更機能が有効になっていること。詳細については、「ロックフリーのスキーマ変更機能を有効にする」をご参照ください。
注意事項
大きなテーブルの表領域フラグメントを再利用する前に、データベースインスタンスの残りのストレージ容量がテーブルのサイズの少なくとも 2 倍であることを確認してください。データベースの変更中は、データベースインスタンスの残りのストレージ容量に細心の注意を払ってください。
大きなテーブルの表領域フラグメントを再利用する場合、データを一時的に保存するためのコピーが必要になる場合があり、これは追加のストレージを占有します。 データベースインスタンスの残りのストレージ容量が不十分な場合、DMS は表領域フラグメントを再利用できないか、データベースインスタンスがロックされる可能性があります。
DMS は、テーブルをロックせずにスキーマを変更する DDL 文を実行することで、表領域フラグメントを再利用します。文の実行の成功率は 100% に達することはできませんのでご注意ください。
表領域フラグメントのサイズを表示する
DMS コンソールで MySQL データベースインスタンスにログオンします。 [SQLConsole] タブで、SHOW TABLE STATUS LIKE 'table_name';
文を実行して、表領域フラグメントのサイズを表示できます。 [SQLConsole] タブでデータをクエリする方法の詳細については、「概要」をご参照ください。
次の図は、クエリ結果の例を示しています。Data_free パラメーターは、テーブル内の表領域フラグメントのサイズを示します。単位:バイト。
手順
- DMS コンソール V5.0 にログオンします。
上部のナビゲーションバーで、[データベース開発] > [データ変更] > [ロックフリー変更] を選択します。
説明DMS コンソールをシンプルモードで使用している場合は、左上隅にある
アイコンをクリックし、 を選択します。
ロックフリーのスキーマ変更チケットを設定します。詳細については、「ロックフリーの DDL 操作を実行する」をご参照ください。
データベースインスタンスでロックフリーのスキーマ変更機能が有効になっていると、ロックフリーのスキーマ変更チケットを送信するたびに、DMS は自動的に表領域フラグメントを再利用します。DMS が安定した方法で表領域フラグメントを再利用し、テーブルに依存している、または関連付けられている他のテーブルへの影響を軽減できるように、チケットで次の SQL 文を使用して領域をデフラグし、表領域フラグメントを再利用することをお勧めします。
ALTER TABLE table_name COMMENT '変更されたテーブルのコメント';
ALTER TABLE table_name ENGINE=InnoDB;
OPTIMIZE TABLE table_name;
ALTER TABLE table_name MODIFY COLUMN field_name INT COMMENT '変更されたフィールドのコメント';