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

AnalyticDB for MySQL:ビルド

最終更新日:Jun 07, 2024

BUILDジョブは、新しくデータが書き込まれたパーティションを再構築するために使用されます。 これにより、読み取りパフォーマンスが向上します。 再構築プロセス中、システムはインデックスを作成し、冗長データをクリアし、DDLステートメントを非同期で実行します。

使用上の注意

BUILDジョブ中は、BUILDジョブが完了するまで、INSERT OVERWRITE SELECTステートメントを実行できません。

概要

BUILDジョブ中に、システムはリアルタイムで書き込まれたデータとそのデータに関連する履歴パーティションをマージし、インデックスを作成し、DDLステートメントを非同期で実行します。 パーティション内のデータに対してINSERT、UPDATE、またはDELETEステートメントが実行された後、BUILDジョブを実行してパーティションを再構築できます。 BUILDジョブは、データが変更されていないパーティションを再構築しません。

BUILDジョブの開始後、ジョブを停止することはできません。

ビルドジョブはテーブルレベルで実行されます。 BUILDジョブがテーブルで開始されると、ジョブはシャードレベルでサブタスクに分割されます。 シャードの3つのレプリカはそれぞれサブタスクを実行します。 すべてのサブタスクが完了すると、BUILDジョブが完了します。 最大3つのBUILDジョブをそれぞれ異なるテーブルで並行して実行できます。

ビルドジョブの自動トリガー

次のいずれかの条件が満たされると、ビルドジョブが自動的にトリガーされます。

  • 最新のBUILDジョブがBUILDジョブ間の最小時間間隔に達し、少なくとも50,000行のデータがテーブルのシャードに追加されてから経過した期間。 最小時間間隔は、予約モードのData Warehouse Edition (V3.0) クラスターの場合は0.5時間、エラスティックモードのData Warehouse Edition (V3.0) クラスターおよびData Lakehouse Edition (V3.0) クラスターの場合は1.5時間です。

  • 最新のBUILDジョブから24時間が経過し、少なくとも1行のデータが変更されました。

ビルドジョブを手動でトリガーする

次のいずれかの方法を使用して、BUILDジョブを手動でトリガーできます。

  • ビルド

    ビルドテーブル <table_name>;

    このメソッドは、データが変更されたパーティションでのみBUILDジョブをトリガーします。

  • テーブル全体でBUILDステートメントを実行する

    BUILD TABLE <table_name> force = true;

    このメソッドは、テーブルのすべてのパーティションでBUILDジョブをトリガーします。

  • 指定されたパーティションでBUILDステートメントを実行する

    BUILD TABLEテストforce=true partitions='partition1,partition2';
    重要

    V3.1.6.0以降のAnalyticDB for MySQLクラスターに対してのみ、指定されたパーティションに対してBUILDステートメントを実行できます。 AnalyticDB For MySQLクラスターのマイナーバージョンを照会する方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

    テーブルに大量のデータが含まれている場合、BUILD table <table_name> force = true; ステートメントの実行に長時間がかかる場合があります。 AnalyticDB for MySQLでは、BUILDジョブを実行するパーティションを指定できます。 これにより、リソースの使用量を削減し、BUILDジョブのパフォーマンスを向上させます。

BUILDジョブの自動スケジューリングの設定

  • 設定方法

    SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD='<start >,< end>';

    BUILDジョブは、startパラメーターとendパラメーターで指定された時間範囲内の時間にスケジュールされます。 開始パラメーターと終了パラメーターの値を0〜24の範囲の整数に設定します。 複数の時間範囲を設定できます。 複数の時間範囲をセミコロン (;) で区切ります。

    重要

    指定された時間範囲は、ジョブの実行ではなく、ジョブのスケジューリングに使用されます。 したがって、ジョブがスケジュールされた後、システムは、時間範囲が終了したときにジョブの実行を完了しない場合がある。

  • 次の時間範囲内でスケジュールされるようにビルドジョブを設定します: 00:00:00から06:00:00および18:00:00から24:00:00。

    SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD='0,6;18,24 ';

BUILDジョブのスケジューリング優先度の設定

BUILDジョブがスケジュールされる順序は、テーブルの個々のシャードに追加されるデータの量に基づいています。 テーブルのシャードに追加されるデータの量が多いほど、ジョブは早くスケジュールされ、実行されます。 ヒントを使用するか、SET ADB_CONFIGステートメントを実行して、テーブルのBUILDジョブのスケジューリング優先順位を設定することもできます。

重要
  • BUILDジョブのスケジューリング優先順位は、V3.1.5.0以降のAnalyticDB for MySQLクラスターに対してのみ設定できます。 AnalyticDB For MySQLクラスターのマイナーバージョンを照会する方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

  • ヒントは1つのテーブルのみをサポートします。 設定された優先度は、現在のビルドジョブにのみ有効です。

  • SET ADB_CONFIGステートメントは、1つ以上のテーブルをサポートします。 設定された優先順位は、テーブルのBUILDジョブの新しいスケジューリング優先順位を設定するまで有効です。

  • ヒントとSET ADB_CONFIGステートメントを使用して、テーブルのBUILDジョブの異なるスケジューリング優先順位を設定すると、ヒントベースのスケジューリング優先順位が現在のジョブで優先されます。

task_priorityパラメーターは、BUILDジョブのスケジューリング優先度を指定します。 値は整数でなければなりません。 デフォルト値は 0 です。 値が大きいほど、高いスケジューリング優先度を指定します。 BUILDジョブの優先順位を設定すると、フロントエンドノードはその優先順位に基づいてBUILDジョブをスケジュールします。 テーブルに対してtask_priorityパラメーターを0未満の値に設定した場合、テーブルのBUILDタスクの自動スケジューリングは無効になり、フロントエンドノードはテーブルのBUILDタスクをスケジュールしません。

設定方法:

  • ヒントを使う

    /* + build_task_priority = <task_priority> */ BUILD TABLE <db_name> 。<table_name>;

    たとえば、adb_demoデータベースのtestテーブルのBUILDジョブのスケジューリング優先度を30に設定します。

    /* + build_task_priority = 30 */ Build TABLE adb_demo.test;
  • SET ADB_CONFIGステートメントの使用

    • 異なるデータベース内の複数のテーブルのBUILDジョブのスケジューリング優先度を設定します。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = '<db1_name>.<table1_name>.<task_priority >;< db2_name>.<table2_name>.<task_priority>';
      説明

      複数のテーブルはセミコロン (;) で区切ります。

      たとえば、BUILDジョブのスケジューリング優先度をadb_demo1データベースのtest1テーブルで30に設定し、adb_demo2データベースのtest2テーブルで10に設定します。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = 'adb_demo1.test1.30;adb_demo2.test2.10 ';
    • データベース内のすべてのテーブルに対して、BUILDジョブの同じスケジューリング優先度を設定します。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = '<db1_name>.*.<task_priority>';

      たとえば、adb_demo1データベースのすべてのテーブルに対して、BUILDジョブのスケジューリング優先度を30に設定します。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = 'adb_demo1. *.30 ';
    • 同じデータベース内のテーブルと他のテーブルの間で、BUILDジョブの異なるスケジューリング優先度を設定します。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = '<db1_name>.*.<task_priority >;< db1_name>.<table_name>.<task_priority>';

      たとえば、adb_demo1データベースのtest1テーブルではBUILDジョブのスケジューリング優先度を30に設定し、データベース内の他のすべてのテーブルでは10に設定します。

      SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = 'adb_demo1 *.10;adb_demo1.test1.30 ';

SHOW ADB_CONFIG文を実行して、BUILDジョブの現在のスケジューリング優先度を照会できます。

ビルドジョブのステータスの照会

BUILDジョブが自動または手動でトリガーされた後、次のSQL文を実行して、過去3日間のBUILDジョブのステータスを照会できます。

SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DECC LIMIT 10;

次の表に、statusのさまざまな値に対応するBUILDジョブのステータスを示します。

ステータスの値

説明

INIT

ジョブは初期化中です。

RUNNING

ジョブは実行中です。

仕上げ

ジョブが完了しました。