BUILD ジョブは、データ書き込み後にパーティションを再構築し、インデックスを作成して冗長なデータを削除することで、読み取りパフォーマンスを向上させます。BUILD ジョブ実行中、システムはリアルタイムで書き込まれたデータと履歴パーティションをマージし、インデックスを作成するとともに、保留中の DDL 文を非同期で実行します。
仕組み
BUILD ジョブは、以下の 2 つのレベルで動作します。
テーブルレベル:異なるテーブルの BUILD ジョブは並列で実行されます。
シャードレベル:テーブルの BUILD ジョブが開始されると、各シャードに対してタスクが分割されます。各シャードの 3 つのレプリカは、それぞれ独立してタスクを実行します。すべてのシャードタスクが完了すると、BUILD ジョブ全体が完了します。
BUILD ジョブは、データ変更のあるパーティションのみを処理します。新しい INSERT、UPDATE、DELETE 操作が一切行われていないパーティションはスキップされます。
注意事項
BUILD ジョブ実行中は、
INSERT OVERWRITE SELECTがロックされます。代わりにINSERT INTOを使用してください。BUILD ジョブは、送信後にキャンセルできません。
同時実行可能な BUILD ジョブ数は
ceil(コア数 / 3)であり、変更できません。32 コアのクラスターの場合、同時実行数は 11 です。BUILD ジョブは CPU、メモリ、I/O リソースを消費します。ジョブ実行中は CPU 使用率およびディスク I/O 使用率が一時的に上昇し、完了後に通常値に戻ります。BUILD ジョブは、業務の非ピーク時間帯に実行してください。
自動で BUILD ジョブをトリガー
以下のいずれかの条件を満たすと、BUILD ジョブが自動的にトリガーされます。
条件 1:十分な新規データが蓄積された場合
前回の BUILD ジョブから経過した時間が最小間隔に達し、かつ 1 つのシャードに 50,000 行以上のデータが追加された場合です。
| エディション | 最小間隔 |
|---|---|
| Enterprise Edition | 1.5 時間 |
| Basic Edition | 1.5 時間 |
| Data Lakehouse Edition | 1.5 時間 |
| Data Warehouse Edition (elastic mode) | 1.5 時間 |
| Data Warehouse Edition (reserved mode) | 0.5 時間 |
条件 2:時刻ベースのフォールバック
前回の BUILD ジョブから 24 時間が経過し、かつ 1 行以上が変更された場合です。
手動で BUILD ジョブをトリガー
変更されたパーティションのみをビルド
デフォルトの動作です。データ変更のあるパーティションのみを再構築します。
XUANWU テーブル
BUILD TABLE <table_name>;XUANWU_V2 テーブル
説明テーブルエンジンの判定および指定方法については、「XUANWU_V2 エンジン」トピックの「テーブルエンジンの指定」セクションをご参照ください。
BUILD TABLE <table_name> [BUILD_OPTION];BUILD_OPTIONには、オプションのttlのみを指定できます。指定すると、BUILD ジョブ完了直後に期限切れのパーティションが削除されます。未指定の場合は、変更されたパーティションのみが再構築されます。
特定のパーティションをビルド
AnalyticDB for MySQL クラスターのバージョンが V3.1.6.0 以降の場合に利用可能です。
BUILD TABLE test force partitions='partition1,partition2';テーブルに大量のデータが含まれており、全テーブル対象の BUILD ジョブを実行するとリソース使用量が過大になる場合に、この方法をご利用ください。対象パーティションを限定することで、リソース使用量を削減し、ジョブの実行時間を短縮できます。
クラスターのマイナーバージョンを確認するには、「クラスターのマイナーバージョンを確認するには?」をご参照ください。マイナーバージョンを更新するには、テクニカルサポートまでお問い合わせください。
テーブル全体をビルド
この操作では、既存のすべてのデータに対するインデックスが再作成されるため、完了までに長い時間がかかる場合があります。実行前に影響およびリスクを十分に評価してください。本機能はデフォルトで無効化されています。有効化するには、チケットを送信してください。可能であれば、上記の「特定のパーティションをビルド」の方法をご利用ください。
BUILD TABLE <table_name> force = true;このコマンドは、データ変更の有無に関わらず、テーブル内のすべてのパーティションについてインデックスを再作成します。
BUILD ジョブのスケジュール設定
デフォルトでは、データの蓄積に応じて BUILD ジョブが自動実行されます。ただし、業務のピーク時間帯を避けるなど、特定の時間帯に実行を制限したい場合は、スケジュールを設定できます。
タイムウィンドウの設定
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;| パラメーター | 説明 | 有効値 |
|---|---|---|
start | スケジューリングウィンドウの開始時刻(時) | 0~24 |
end | スケジューリングウィンドウの終了時刻(時) | 0~24 |
複数のタイムウィンドウを指定する場合は、セミコロンで区切ります。すべての値はバックティックで囲んでください。
タイムウィンドウは、ジョブの*スケジュール開始時刻*を制御するものであり、ジョブの完了時刻ではありません。ウィンドウ終了時刻前にスケジュールされたジョブは、ウィンドウ終了後も実行が継続される場合があります。
例: BUILD ジョブを 00:00~06:59 および 18:00~22:59 の間に実行するようスケジュールします。
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,22`;スケジューリングの優先度設定
AnalyticDB for MySQL クラスターのバージョンが V3.1.5.0 以降の場合に利用可能です。
デフォルトでは、BUILD ジョブは、前回の BUILD ジョブ以降に各シャードに追加されたデータ量に基づいて優先順位付けされます。つまり、新規データの追加量が多いシャードほど優先してスケジュールされます。このデフォルト動作をオーバーライドするには、ヒントワードまたは SET ADB_CONFIG を使用してカスタム優先度を設定します。
task_priority パラメーターは整数値(デフォルト: 0)であり、値が大きいほど優先度が高くなります。負の値を設定すると、そのテーブルに対する自動スケジューリングが無効になります。
クラスターのマイナーバージョンを表示または更新するには、AnalyticDB for MySQL コンソールにログインし、[クラスター情報] ページで[構成情報] セクションに移動します。
ヒントワードを使用する場合(単一テーブル、現在のジョブのみに適用)
/*build_task_priority = <task_priority> */ BUILD TABLE <db_name>.<table_name>;例:データベース adb_demo 内のテーブル test の優先度を 30 に設定します。
/*build_task_priority = 30 */ Build TABLE adb_demo.test;SET ADB_CONFIG を使用する場合(永続的、複数テーブルに対応)
複数のデータベースにまたがる複数テーブルの優先度を設定する場合:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;例:
adb_demo1.test1の優先度を 30、adb_demo2.test2の優先度を 10 に設定します。SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.test1.30;adb_demo2.test2.10`;データベース内のすべてのテーブルに同一の優先度を設定する場合:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>`;例:
adb_demo1内のすべてのテーブルの優先度を 30 に設定します。SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.30`;データベース内で、特定のテーブルとそれ以外のテーブルに異なる優先度を設定する場合:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.*.<task_priority>;<db1_name>.<table_name>.<task_priority>`;例:
adb_demo1.test1の優先度を 30、adb_demo1内の他のすべてのテーブルの優先度を 10 に設定します。SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `adb_demo1.*.10;adb_demo1.test1.30`;
同一テーブルに対してヒントワードと SET ADB_CONFIG の両方が設定されている場合、現在のジョブについてはヒントワードが優先されます。
現在の優先度設定を確認するには、SHOW ADB_CONFIG を実行してください。
BUILD ジョブのステータス監視
過去 3 日間の BUILD ジョブのステータスを照会するには、以下のクエリを実行します。
SELECT table_name, schema_name, status
FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK
ORDER BY create_time DESC
LIMIT 10;| ステータス | 説明 |
|---|---|
INIT | ジョブが初期化中です。 |
RUNNING | ジョブが実行中です。 |
FINISH | ジョブが完了しました。 |
よくある質問
自動スケジューリングが有効になっていない
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD の時刻パラメーターは、必ずバックティックで囲む必要があります。バックティックが欠けていると、値の解析に失敗し、スケジューリングは無視されます。
正しい構文:
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6`;この設定により、BUILD ジョブは 00:00~06:59 の間にスケジュールされます。