ロックフリー DML は、大規模な UPDATE または DELETE を小さなバッチに分割し、順次実行することで、変更中もテーブルを他の操作に対して常に利用可能に保ちます。テーブルをロックせずに大量の行を変更する必要があり、かつデータベースパフォーマンスへの影響を避けたい場合にこの機能をご利用ください。
仕組み
ロックフリー変更チケットを送信すると、DMS はプライマリキーの範囲に基づいて対象行をバッチに分割し、各バッチに対して順番に SQL ステートメントを適用します。各バッチはごく短時間しかロックを保持しないため、バッチ間では他のトランザクションがテーブルを読み書きできます。カナリアリリースオプションで実行ペースを制御でき、ピーク時間前にタスクを自動的に停止する終了時刻も設定可能です。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
次のいずれかのタイプのデータベースを使用していること:
データベースエンジン サポートされるインスタンス MySQL ApsaraDB RDS for MySQL、PolarDB for MySQL、MyBase for MySQL、PolarDB for Xscale、およびサードパーティの MySQL データベース PostgreSQL ApsaraDB RDS for PostgreSQL、PolarDB for PostgreSQL、MyBase for PostgreSQL、およびサードパーティの PostgreSQL データベース MariaDB ApsaraDB for MariaDB およびサードパーティの MariaDB データベース OceanBase ApsaraDB for OceanBase(MySQL モード) Oracle 互換 PostgreSQL PolarDB for PostgreSQL (Compatible with Oracle) Data Management (DMS) で 安定的な変更 または セキュリティコラボレーション モードで管理されているデータベースインスタンスを使用していること。詳細については、「インスタンスのコントロールモードの確認」をご参照ください。
制限事項
単一テーブルの操作のみサポートされます。
UPDATE、DELETE、およびINSERT_SELECTステートメントのみサポートされます。CREATE_INDEXのような複雑なステートメントや、DELETEとJOINを組み合わせたマルチテーブル操作はサポートされません。完全なリストについては、概要の「使用制限」セクションをご参照ください。マスター・スレーブ遅延チェックは、ApsaraDB RDS for MySQL インスタンスでのみ利用可能です。
ロックフリー変更チケットの送信
DMS コンソール V5.0 にログインします。
上部ナビゲーションバーで、データベース開発 > データ変更 > ロックレス変更 を選択します。
シンプルモードの場合、左上隅の
アイコンにポインターを合わせて、すべての機能 > データベース開発 > データ変更 > ロックレス変更 を選択します。パラメーターを設定し、送信 をクリックします。
以下の例は、セキュリティコラボレーションモードで管理されているインスタンスを使用しています。柔軟な管理または安定的な変更モードで管理されているインスタンスの場合は、データベース および 変更用 SQL ステートメント のみが必須です。
パラメーター 必須 説明 データベース はい データ変更を実行するデータベースです。データベース ドロップダウンリストから選択するか、キーワードを入力して検索します。選択したデータベースに対してデータ変更権限が必要です。詳細については、「所有権限の確認」をご参照ください。 実行方法 はい 承認後の変更を実行するユーザー。オプション: チケット作成者が承認時に実行、承認時に自動的に実行、または最終承認者が実行。DMS 管理者は、構成管理ページで利用可能な実行方法を変更できます(O&M モジュール内)。詳細については、「構成管理」をご参照ください。 影響行数 はい 影響を受けると推定される行数です。正確な件数を取得するには、送信前に タブで COUNTSQLConsole クエリを実行してください。継続的にデータが書き込まれている場合は、既存の行のみをカウントします。変更用 SQL ステートメント はい 実行する DML ステートメント: UPDATE、DELETE、またはINSERT_SELECT。代わりにロックフリーなスキーマ変更を実行する場合は、DDL ステートメントを入力してください。詳細については、「ロックフリー DDL 操作の実行」をご参照ください。ロールバック用 SQL ステートメント いいえ データ変更をロールバックするために実行できる SQL ステートメントです。 SQL テキスト いいえ ロールバック用 SQL ステートメント が テキスト に設定されている場合のみ利用可能です。フィールドにロールバック SQL を直接入力します。 添付ファイル いいえ ロールバック用 SQL ステートメント が 添付ファイル に設定されている場合のみ利用可能です。ロールバック SQL を含む TXT、ZIP、または SQL ファイルをアップロードします。ファイルサイズは 15 MB 以下である必要があります。 関係者の変更 いいえ チケットの詳細を閲覧および承認プロセスに参加できる他のユーザーです。ここに記載されていないユーザー(DMS 管理者およびデータベース管理者 (DBA) を除く)はチケットにアクセスできません。 添付ファイル いいえ データ変更に関する追加情報を提供するサポートファイルです。 送信後、必要に応じて事前チェック設定を構成します。
マスター・スレーブ遅延チェックを有効化(ApsaraDB RDS for MySQL のみ):チケット詳細パネルの 基本情報 セクションで、チャンクオプション をクリックします。ダイアログボックスで、マスター・スレーブ遅延のしきい値(秒単位)を設定します。プライマリデータベースとセカンダリデータベース間のレプリケーションラグがしきい値を超えた場合、DMS はプライマリ/セカンダリ スイッチオーバーを保護するために SQL 実行を一時停止します。
事前チェック失敗時の SQL ステートメント修正:DMS は送信後に自動的に事前チェックを実行します。事前チェックが失敗した場合は、事前チェック ステップで 修正用 SQL ステートメント をクリックしてステートメントを更新し、再送信します。
承認依頼 をクリックします。承認の進捗状況を追跡するには、チケット詳細パネルの 承認 ステップを確認してください。
セキュリティコラボレーションモード:チケットは設定された承認ルールに従ってルーティングされます。
安定的な変更モード:チケットは自動的に承認されます。
チケットが承認されたら、実行 ステップで 変更の実行 をクリックします。
実行パラメーターを設定し、実行の確認 をクリックします。
パラメーター 説明 実行戦略 すぐに実行(デフォルト):実行の確認 をクリックすると直ちにタスクが開始されます。スケジュール:指定した時刻にタスクを開始します。実際の開始時刻は ±1 分程度ずれる可能性があります。 終了時刻の指定 完了の有無にかかわらず、指定した時刻にタスクを停止します。ピーク時間中にタスクが実行されないようにするための設定です。実際の終了時刻は ±1 分程度ずれる可能性があります。 プライマリ/セカンダリノードチェック プライマリインスタンスとセカンダリインスタンス間のデータ同期を継続的に監視し、高可用性を維持します。 カナリアリリースタイプ 実行ペースを制御します。カナリアリリースなし はすべてのバッチを自動的に実行します。最初の SQL ステートメント実行後に一時停止 は最初のバッチ後に一時停止し、再試行 をクリックして続行します。SQL ステートメント実行後に一時停止 は各バッチ後に一時停止し、再試行 をクリックして次のバッチに進みます。 実行 ステップで進捗を監視します。[操作] 列の スケジューリングログ をクリックすると、詳細なスケジューリングログを表示できます。
一時停止中のタスクはいつでも再開できます。
変更の検証
タスク完了後、変更が正しく適用されたことを確認します。
[SQL コンソール] タブを開き、対象のテーブルに対してクエリを実行して、更新または削除された行が期待通りであることを確認します。
結果をエクスポートする必要がある場合は、「データベースのエクスポート」または「SQL 結果セットのエクスポート」を参照してください。
よくある質問
ロックフリー DML は複雑な SQL ステートメントをサポートしていますか?
いいえ。ロックフリー DML 機能は、
CREATE_INDEXのような複雑な SQL ステートメントや、DELETEステートメントにJOIN操作を含むマルチテーブル操作をサポートしていません。完全なリストについては、概要の「使用制限」セクションをご参照ください。Q: DMS ロックレス変更は、ロックされたテーブルやブロッキングを検出しますか?
A: ロックレスデータ変更中、DMS は大規模な SQL ステートメントを複数のミニバッチに分割して実行します。各バッチの実行後、長時間のリソース占有を避けるために短時間の一時停止が挿入されます。実際の実行時には、行ロックの事前チェックは行われません。MySQL は依然として変更対象の行をロックしますが、「ミニバッチ+一時停止」方式により全体的な影響は最小限に抑えられます。ただし、100 % ロックフリー動作を保証するものではありません。DMS のロックレススキーマ進化では、一時テーブルを使用して DDL ステートメントの実行をシミュレートし、テーブルロックやブロッキングが発生するかどうかを事前チェックします。テーブルロックが検出された場合、検証は失敗し、プロンプトが表示されます。
Q: DMS ロックレス変更タスクの増分リプレイ検証は調整可能ですか?
A: はい、可能です。検証調整はサポートされています。まず、 ページで、「ロックレス結果変更リプレイデータ検証比率の調整を許可」機能を検索して有効化します。
コンソールから対応する DDL チケットにアクセスします。
実行セクションで [詳細] ボタンをクリックします。
対応するスクリプトを見つけ、[実行進捗] をクリックします。
下部に検証比率が表示されます。必要に応じて検証比率を調整します。単位はパーミル(‰)です。
次のステップ
API リファレンス
ロックレス変更チケットに関連する API オペレーションは以下のとおりです。