data Management (DMS) のロックフリーデータ操作言語 (DML) 機能を使用して、1つのSQL文を実行するデータを複数のバッチに分割し、バッチごとにSQL文を実行できます。 このようにして、実行パフォーマンスを保証することができ、データベースパフォーマンスまたはデータベースストレージに対するSQL文の影響を低減することができる。 この機能は、大量のデータを変更する必要がある場合に特に役立ちます。 たとえば、この機能を使用して、履歴データを消去したり、テーブル内のすべての行を更新したりできます。
背景情報
ビジネスが成長するにつれて、ビジネスデータが蓄積されます。 この場合、テーブルデータを定期的に消去するか、オンラインデータと履歴データを個別に管理する必要があります。 次の問題が発生する可能性があります。
1つのSQL文が多数のデータ行に影響します。 この場合、ログエントリの数が上限を超え、SQL文の実行に失敗します。
SQL文はインデックスを指定せずに実行されます。 これにより、テーブルのロック、データベースの負荷の増加、またはビジネスの障害が発生する可能性があります。
これらの問題を解決するには、影響を受けるデータを複数のバッチに分割し、各バッチでSQL文を実行します。 ただし、この方法にはリスクも伴います。
開発者はデータを分割するプログラムを作成します。
不適切な方法を使用してデータを分割した場合でも、テーブルはロックされている可能性があります。 たとえば、開発者は
LIMIT
句を使用してデータを分割することがありますが、これは不適切です。場合によっては、異なるバッチを実行する間隔が期待どおりに設定されていません。 これにより、データが変更されると、プライマリデータベースとセカンダリデータベース間の同期に大きな遅延が発生します。
データベース管理者 (DBA) は、データを手動で抽出して複数の部分に分割し、バッチ処理します。
このプロセスは複雑で労働集約的である。 さらに、このプロセスはエラーが発生しやすく、調整が困難です。
上記の問題を解決するには、DMSのロックフリーDML機能を使用します。 詳細については、「ロックフリーDML操作の実行」をご参照ください。
サポートされるソースデータベースタイプ
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データベース
ApsaraDB for OceanBaseのMySQLモード
PolarDB for PostgreSQL (Oracleと互換)
メリット
あなたのビジネスは影響を受けません。
データベースのパフォーマンスとデータベースストレージへの影響が軽減されます。
大量のデータ変更に対して実行効率が保証される。
制御ポリシー機能の動作
単一のSQL文は、異なるバッチのデータに対して実行されます。 強力なDMSエンジンは、単一のSQLステートメントを実行するデータを複数のバッチに分割できます。
各バッチでSQL文が実行された後、実行はバッファ期間に入ります。
制限事項
UPDATE、DELETE、およびINSERT SELECTステートメントのみがサポートされています。
ステートメントタイプ | 説明 |
更新と削除 |
|
INSERT_SELECT |
|
シナリオ
履歴データを消去します。
テーブル内のすべての行を更新します。