テーブルをロックせずに大量のテーブルデータを変更する必要がある場合は、Data Management (DMS) のロックレス変更機能を使用できます。この機能は、単一の SQL ステートメントを複数のバッチに分割して実行することで、テーブルをロックせずにテーブルデータを変更し、DML 操作がデータベースのパフォーマンスと領域に与える影響を軽減します。このトピックでは、DMS でロックレスデータ変更を実行する方法について説明します。
前提条件
サポートされているデータベースタイプ:
データベースエンジン サポートされているインスタンス 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 MySQL モードの ApsaraDB for OceanBase Oracle 互換 PolarDB for PostgreSQL (Compatible with Oracle) インスタンスは、安定的な変更またはセキュリティコラボレーションのいずれかのコントロールモードである必要があります。詳細については、「コントロールモードの表示」をご参照ください。
制限事項
UPDATE、DELETE、および INSERT...SELECT ステートメントのみがサポートされています。
UPDATE と DELETE
| 制約 | 詳細 |
|---|---|
| テーブルスコープ | 単一テーブルのみ |
| WHERE 句 | 必須です。すべての行を更新または削除するには、WHERE 1=1 |
| サブクエリ | サポートされていません |
| LIMIT 句 | サポートされていません — 手動ページネーションに LIMIT を使用すると、フルテーブルスキャンが強制され、この機能が防止しようとしているテーブルロックが発生します |
INSERT...SELECT
| 制約 | 詳細 |
|---|---|
| SELECT スコープ | 単一テーブルのみ |
| WHERE 句 | SELECT 句で必須です。すべての行を選択するには、WHERE 1=1 |
| 許可されていない句 | LIMIT、ORDER BY、および GROUP BY はサポートされていません |
操作手順
DMS 5.0 にログインします。
上部のナビゲーションバーで、 を選択します。
説明DMS コンソールをシンプルモードで使用している場合は、左上隅の
アイコンをクリックします。表示されるナビゲーションウィンドウで、 を選択します。ロックレス変更 チケットのパラメーターを設定し、[送信] をクリックします。次の表に、一部のパラメーターを示します。
説明この例は、セキュリティコラボレーションモードのインスタンスの設定を示しています。柔軟な管理または安定的な変更モードのインスタンスの場合、データベースと変更用 SQL ステートメントのパラメーターのみを設定する必要があります。
パラメーター
必須
説明
[データベース]
はい
対象のデータベースを検索して選択します。
説明ターゲットデータベースのデータを変更する権限が必要です。詳細については、「権限の表示」をご参照ください。
[ビジネスバックグラウンド]
いいえ
変更のコンテキストを提供することで、コミュニケーションのオーバーヘッドを削減します。
[実行メソッド]
はい
チケットの実行メソッドを選択します。
承認後にチケット申請者が実行
承認後に自動実行
最終承認者が実行
説明管理者は で実行メソッドのリストを編集できます。詳細については、「設定管理」をご参照ください。
[影響を受ける行数]
はい
影響を受ける行数を推定します。[SQL コンソール] で
COUNTクエリを実行して、この行数を取得できます。説明テーブルにデータが継続的に書き込まれる場合は、既存のデータ行数のみをカウントします。
[変更用 SQL ステートメント]
はい
UPDATE、DELETE、INSERT_SELECTなどの DML ステートメントを入力します。説明DDL ステートメントを入力した場合、DDL ロックフリーのスキーマ変更タスクを実行することになります。詳細については、「ロックフリー変更チケットを使用してロックフリーのスキーマ変更を実行する」をご参照ください。
[ロールバック用 SQL ステートメント]
いいえ
[変更用 SQL ステートメント] の逆のスクリプトです。スクリプトは実行可能である必要があります。
[SQL テキスト]
いいえ
このパラメーターは、[ロールバック SQL] パラメーターで [テキスト] を選択した場合にのみ表示されます。変更 SQL ステートメントの逆の処理となる、ロールバック SQL ステートメントを入力します。
[添付ファイル]
いいえ
このパラメーターは、[ロールバック用 SQL ステートメント] パラメーターで [添付ファイル] を選択した場合にのみ表示されます。[ファイル] をクリックして、ロールバック SQL の添付ファイルをアップロードします。
説明サポートされているファイル形式は .txt、.zip、.sql のみです。ファイルサイズは 15 MB を超えることはできません。
[変更関係者]
いいえ
指定された関係者は、チケットを表示して共同作業を行うことができます。関係者以外 (管理者と DBA を除く) は表示できません。
[添付ファイル]
いいえ
このチケットに関する追加のコンテキストを提供するために、添付ファイルをアップロードします。
チケットを送信した後、プライマリ/セカンダリレイテンシーチェックを有効にし、しきい値を設定し、SQL ステートメントを変更できます。
(任意) プライマリ/セカンダリレイテンシーチェックを有効にし、しきい値を設定します。これにより、過剰なプライマリ/セカンダリレイテンシーがインスタンスの切り替えに影響を与えるのを防ぎます。
[基本情報] セクションで [チャンクオプション] をクリックし、妥当なプライマリ/セカンダリレイテンシーのしきい値を秒単位で設定します。プライマリ/セカンダリレイテンシーがしきい値を超えると、SQL の実行は中断されます。
説明この機能は現在、ApsaraDB RDS for MySQL データベースでのみ利用可能です。
(任意) SQL ステートメントを変更します。
申請を送信すると、システムは自動的に SQL ステートメントを事前チェックします。事前チェックが失敗した場合は、[SQL の編集] をクリックし、失敗の理由に基づいてステートメントを編集してから、リトライできます。
[送信] をクリックします。セキュリティコラボレーションモードのインスタンスのチケットは、設定されたルールに基づいて承認が必要ですが、安定的な変更モードのインスタンスのチケットは自動的に承認されます。
チケットが承認された後、チケット詳細ページの [実行] セクションで [変更を実行] をクリックします。
説明チケット詳細ページの [承認] セクションで承認の進捗状況を確認できます。
タスク実行パラメーターを設定します。
設定項目
説明
実行戦略
[すぐに実行]:デフォルトのオプションです。[実行の確認] をクリックすると、タスクはすぐに実行されます。
[スケジュール]:タスクの開始時刻を選択します。[実行の確認] をクリックすると、タスクは指定された時刻に実行されます。
説明定期タスクの実際の実行時間には、±1 分の誤差が生じる場合があります。
[終了時刻の指定]
タスクの終了時刻を指定します。タスクが指定された終了時刻までに完了しない場合、システムは残りの SQL タスクの実行を停止します。これにより、タスクがピーク時間中に実行され、ビジネス運用に影響を与えるのを防ぎます。
説明タスクの実際の終了時間には、±1 分の誤差が生じる場合があります。
プライマリ/セカンダリノードのチェック
このチェックを有効にすると、プライマリインスタンスとスタンバイインスタンス間のリアルタイムデータ同期、高可用性、および障害からの迅速なリカバリが保証されます。
カナリアリリースタイプ
SQL ステートメントをバッチで実行するためのポリシーです。
[カナリアリリースなし]:DMS はタスク内のすべての SQL ステートメントを自動的に実行します。
[最初の SQL ステートメントの実行後に中断]:最初の SQL ステートメントが正常に実行されると、DMS はタスクを自動的に一時停止します。続行するには、[リトライ] をクリックします。残りの SQL ステートメントは、それ以上の一時停止なしで一度に実行されます。
[SQL ステートメントの実行後に中断]:各 SQL ステートメントが実行された後、タスクは自動的に一時停止します。次の SQL ステートメントを実行するには、手動で [リトライ] をクリックする必要があります。
[実行の確認] をクリックします。
説明一時停止したタスクを再開すると、最初からやり直します。
[実行] セクションでは、タスクの実行ステータス、タスク設定、詳細、および [スケジューリングログ] を表示できます。
関連ドキュメント
ロックレスデータ変更を実行した後、次の操作も必要になる場合があります:
SQL ウィンドウでテーブルデータをクエリします。詳細については、「データのクエリ」をご参照ください。
データベースからデータをエクスポートします。詳細については、「データベースのエクスポート」をご参照ください。
SQL 結果セットをエクスポートします。詳細については、「SQL 結果セットのエクスポート」をご参照ください。
以下の API オペレーションは、ロックレスデータ変更に関連しています:
よくある質問
Q:ロックレスデータ変更機能は、複雑な SQL 操作をサポートしていますか?
A:いいえ。たとえば、
CREATE_INDEXや、JOINを含むDELETEステートメントなどの複数テーブル操作はサポートしていません。サポートされている SQL タイプについての詳細は、「制限事項」をご参照ください。Q: DMS のロックレス変更は、テーブルロックとブロッキングを検出しますか?
A: DMS がロックレスデータ変更を実行すると、大きな SQL ステートメントを小さなバッチに分割し、各バッチの後に一時停止します。これにより、リソースを長時間占有することを回避します。実行中、DMS は事前に行ロック検出を実行しません。MySQL は変更された行をロックします。小さなバッチと一時停止のため、全体的な影響は最小限ですが、これによりテーブルがロックされないことを保証するものではありません。ロックフリーのスキーマ変更の場合、DMS は一時テーブルを使用して DDL ステートメントをシミュレートします。これにより、操作がテーブルロックやブロッキングを引き起こすかどうかを事前にチェックします。チェックによって操作がテーブルをロックすると判断された場合、検証は失敗し、メッセージが表示されます。
Q:DMS のロックレス変更タスクの増分再生検証は調整できますか?
A:はい。まず、 ページで、「ロックレス変更結果の再生データ検証比率の調整を許可する」機能を検索して有効にします。
コンソールで対応する DDL チケットに移動します。
実行セクションで、[詳細] をクリックします。
対応するスクリプトを見つけて、[実行の進行状況] をクリックします。
検証比率は下部に表示されます。必要に応じて比率を調整します。単位はパーミル (‰) です。