INSERT、UPDATE、およびDELETEステートメントがMySQLデータベースで頻繁に実行されると、データはディスクに継続的に保存されなくなり、テーブルスペースのフラグメントが生成されます。 テーブルスペースの断片はデータベースのパフォーマンスを低下させます。 OPTIMIZE TABLEステートメントを実行してtablespaceフラグメントをリサイクルするなどの一般的な操作を実行すると、テーブルがロックされ、ビジネスに影響を与える可能性があります。 このトピックでは、Data Management (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;
最適化テーブルtable_name;
ALTER TABLE table_name MODIFY COLUMN field_name INT COMMENT '変更されたフィールドのコメント';