大規模なテーブルに対して UPDATE または DELETE を実行すると、標準トランザクションでは操作完了までテーブル全体がロックされ、読み取りおよび書き込みがブロックされるほか、タイムアウトが発生して本番トラフィックに支障をきたすリスクがあります。ロックレスデータ変更は、対象となる行を小規模なバッチに分割し、各バッチを独立した短時間のトランザクションとして処理することで、この問題を回避します。各バッチは即時にコミット・ロックを解放するため、テーブルは処理中も応答性を維持します。
仕組み
DMS は、対象テーブルのプライマリキーまたは一意キーに基づいて、影響を受ける行をチャンク単位に分割します。各チャンクについて、DMS は変更を適用・コミットし、次のチャンクへと移行します。いずれのトランザクションも、同時実行中の読み取りや書き込みをブロックするほど長時間ロックを保持しません。
前提条件
対象テーブルには、以下のいずれかが必要です:
プライマリキー、または
NULL 値を許容しない一意キー
制限事項
単一テーブルのみ対応
シンプルな SQL ステートメントのみサポート:SELECT、UPDATE、DELETE
複数テーブルを対象とするステートメント(例:JOIN を含む DELETE)はサポートされません
ロックレス変更の申請
この例では、big_table</code> の <code class="inline-code___exakR" data-tag="code" id="code_66451971">id < 1,000,000</code> を満たすすべての行を更新し、<code class="inline-code___exakR" data-tag="code" id="3acef533c6rwj">long_text_b</code> を <code class="inline-code___exakR" data-tag="code" id="091e5ccda1ovj">'random long text'</code> に設定します。
このプロセスには、以下の 2 つのロールが関与します:
一般ユーザが変更チケットを申請
DMS 管理者が承認・実行
チケットの申請(一般ユーザ)
一般ユーザとして、DMS コンソール V5.0 にログインします。
トップナビゲーションバーから、データベース開発 > データ変更 > ロックレス変更 の順に選択します。
シンプルモードでは、左上隅の
アイコンにカーソルを合わせ、すべての機能 > データベース開発 > データ変更 > ロックレス変更 を選択します。以下のパラメーターを設定し、申請 をクリックします。この例では、「変更用 SQL ステートメント」欄に次のステートメントを入力します:
パラメーター 必須 説明 データベース はい poc_dev<\/code> を選択します。<\/code>業務背景 いいえ 承認担当者とのやり取りを最小限に抑えるため、業務要件を明確に記述してください。 影響を受ける行数 はい この変更によって影響を受ける行数を推定します。SQL コンソールで COUNT<\/code> クエリを実行して、該当する行数を取得してください。<\/code>変更用 SQL ステートメント はい 実行する UPDATE または DELETE ステートメントを入力します。 UPDATE `big_table` SET `long_text_b` = 'random long text' WHERE id < 1000000;<\/code><\/code></codeblock></li><li><p>チケット詳細ページで、チャンクオプション変更の申請事前チェック項目検証内容構文検証ステートメントの種別権限行スキャン推定承認依頼OK保留中のチケットマイチケットマイチケットチケット番号チケット詳細承認申請実行変更の実行実行戦略即時実行実行の確定- 実行戦略 はデフォルトで 即時実行 に設定されています。[スケジュール] を選択して、特定の実行時刻を設定します。 - [終了時刻の指定] を有効化すると、設定した時刻に自動的に実行が停止され、ピーク時間帯に変更が実行されるのを防ぐことができます。
チケット詳細ページで、[チャンクオプション] をクリックします。表示されるダイアログで、バッチ実行設定を構成し、[変更を送信] をクリックします。

チケットの詳細を確認します。実行前に、DMS は SQL ステートメントに対して以下の項目を含む事前チェックを実行します。
事前チェック項目 検証内容 構文検証 変更の実行前に SQL エラーを検出します ステートメントの種類 ステートメントの種類がセキュリティルールの構成と一致していることを確認します 権限 提出ユーザーが必要な権限を持っていることを検証します 行スキャン数の推定 スキャン対象となる行数を推定します 事前チェックに合格すると、[承認申請] をクリックし、確認ダイアログで [OK] をクリックします。
重要チケットは承認申請する前にのみ編集できます。
チケットの承認と実行 (DMS 管理者)
DMS 管理者として、Data Management Service (DMS) コンソール V5.0 にログインします。
DMS コンソールのホームページで、[マイチケット] セクションにある [保留中のチケット] をクリックします。
[マイチケット] ページで、[チケット番号] 列にあるチケット番号をクリックして、チケットを開きます。
[チケット詳細] パネルで、変更の詳細を確認し、[承認] をクリックします。
承認ダイアログで、コメントを入力し、[提出] をクリックします。
[実行] ステップで、[変更を実行] をクリックします。[実行戦略] を [即時実行] に設定し、[実行の確認] をクリックします。
- [実行戦略] はデフォルトで [即時実行] です。特定の実行時間を設定するには、[スケジュール] を選択します。 - [終了時刻を指定] を有効にすると、設定された時刻に実行が自動的に停止され、ピーク時間中の変更実行を防ぐことができます。
進捗をモニターするには、[実行] ステップで [詳細] をクリックし、次に [実行進捗] を選択します。
変更の確認
変更が完了したら、SELECT クエリを実行してデータが正しく更新されたことを確認してください。
DMS 管理者として DMS コンソール V5.0 にログインします。
インスタンスリストで
POC_dev<\/code>インスタンスを展開し、poc_dev<\/code>データベースをダブルクリックして SQL コンソールを開きます。次のクエリを実行し、
long_text_b<\/code> フィールドに更新された値が表示されることを確認します:<\/code>SELECT * FROM `big_table`;<\/code>
<\/code>