BUILD任務用於將即時寫入的資料轉換為歷史資料格式。在該過程中會構建索引、清理冗餘資料、執行非同步DDL任務等,將資料從寫最佳化轉變為讀取最佳化。
注意事項
BUILD期間,不能執行INSERT OVERWRITE SELECT
匯入任務,需等待BUILD任務結束才能執行。
功能說明
BUILD
命令可以對即時寫入的資料及其涉及到的歷史分區,進行合并、構建索引、執行非同步DDL等操作。如果使用者通過INSERT/UPDATE/DELETE等修改分區的資料,那麼該分區需要執行BUILD,與即時資料結合後,產生新的分區。如果使用者沒有修改分區的資料,則該分區不會被BUILD任務修改。
BUILD任務開始後,不能停止任務。
當前BUILD任務是以表為粒度進行調度的。BUILD任務開始執行後,表級的BUILD任務會切分為以Shard為粒度的BUILD子任務,每個Shard的3個副本都有一個BUILD子任務,當所有的子任務都執行完成後,BUILD任務完成。不同表的BUILD任務可以並存執行,並行度預設為3。
自動觸發BUILD任務
自動觸發BUILD任務需要滿足以下其中一個條件:
達到最小BUILD時間間隔(數倉版(3.0)預留模式:0.5小時,數倉版(3.0)彈性模式:1.5小時,湖倉版(3.0):1.5小時),且單表的某個一級分區滿足新增資料達到5萬條。
距離上次BUILD,時間已過去24小時且至少修改1行資料。
手動觸發BUILD任務
可通過以下方式手動觸發不同的BUILD任務:
變動分區BUILD
BUILD TABLE <table_name>;
只會對變動的分區進行BUILD。
指定分區BUILD
BUILD TABLE test force partitions='partition1,partition2';
重要僅3.1.6.0及以上版本的叢集支援指定分區BUILD。如何查看叢集核心版本,請參見如何查看執行個體版本資訊。如需升級核心版本,請聯絡支援人員。
當表較大時,
BUILD TABLE <table_name> force = true;
的執行時間會很長。AnalyticDB for MySQL支援通過partitions
指定需要BUILD的分區,減少長時間的BUILD資源佔用,儘快完成BUILD任務。強制全表BUILD
BUILD TABLE <table_name> force = true;
強制全表BUILD將對全表所有分區的資料重新構建索引。該功能預設關閉。
重要強制全表BUILD將對全表所有存量資料重新構建索引,耗時久,建議您使用指定分區BUILD功能。若需使用強制全表BUILD功能,請謹慎評估系統風險後提交工單開啟該功能。
配置BUILD自動調度時間
配置方法
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`<start>,<end>`;
start
和end
取0~24之間的整數,表示在start~end整點時間段內可以調度BUILD任務。可以配置多個時間段,以英文分號(;)隔開。重要該配置只限制任務調度時間段,不限任務執行時間段。即某任務在該時間內調度,會出現因執行時間較長,超出該時間段的情況。
樣本
配置0~6點和18~24點調度BUILD任務。
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,24`;
配置BUILD調度優先順序
BUILD調度是按照單表某個一級分區新增資料量排序下發任務,新增資料量大的分區先下發任務,根據下發時間的先後排序執行任務。當需要按業務緊急程度調度BUILD任務時,可以通過Hint或者SET ADB_CONFIG
調整單表或多表BUILD調度的優先順序。
僅3.1.5.0及以上版本的叢集支援配置BUILD調度的優先順序。如何查看叢集核心版本,請參見如何查看執行個體版本資訊。如需升級核心版本,請聯絡支援人員。
Hint僅支援對單張表配置優先順序,且調度優先順序僅針對當前提交的任務生效。
SET ADB_CONFIG
既支援對單張表配置優先順序,也支援對多張表配置優先順序,且優先順序一直生效,直至再次配置該表優先順序時,才會改變。如果同時使用Hint和
SET ADB_CONFIG
為同一個表配置了不同的優先順序,在當前提交的任務中,該表的BUILD調度優先順序採納Hint方式配置的優先順序。
BUILD調度的優先順序由參數task_priority
控制,取值為整數,預設值為0。數值越大,下發調度的優先順序越高。配置優先順序後,前端節點在調度BUILD任務時會自動加上優先順序。若task_priority
取值小於0,則表示關閉該表自動調度BUILD任務,前端節點不再對該表發起BUILD任務。
配置方法如下:
通過Hint配置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;
通過Config配置BUILD調度的優先順序
配置不同資料庫中多張表的BUILD調度優先順序:
SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;
說明不同的表使用英文分號(;)隔開。
例如,設定資料庫
adb_demo1
中表test1
的BUILD調度優先順序為30,資料庫adb_demo2
中表test2
的BUILD調度優先順序為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任務的狀態
自動或手動觸發BUILD任務後,執行如下SQL,查看最近3天BUILD任務的狀態。
SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;
根據status
的值,判斷BUILD任務狀態。狀態說明如下。
| 說明 |
INIT | 任務初始化。 |
RUNNING | 任務運行中。 |
FINISH | 任務已完成。 |