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 5.0 にログインします。
上部のナビゲーションバーで、[データベース開発] > [データ変更] > [ロックレス変更] を選択します。
説明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 ステートメントは領域を解放しますが、DMS でのロックフリー操作 (
OPTIMIZE TABLEを含む) は、ネイティブのOPTIMIZE TABLEコマンドほど徹底的ではない可能性があります。
-