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 | ジョブは実行中です。 |
仕上げ | ジョブが完了しました。 |