すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:BUILD

最終更新日:Mar 29, 2026

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 Edition1.5 時間
Basic Edition1.5 時間
Data Lakehouse Edition1.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 の間にスケジュールされます。