BUILD任務用於將即時寫入的資料轉換為歷史資料格式。在該過程中會構建索引、清理冗餘資料、執行非同步DDL任務等,將資料從寫最佳化轉變為讀取最佳化。
功能說明
BUILD命令可以對即時寫入的資料及其涉及到的歷史分區執行合并、構建索引、執行非同步DDL等操作。如果使用者通過INSERT、UPDATE、DELETE等修改分區的資料,那麼該分區需要執行BUILD,與即時資料結合後,產生新的分區。如果使用者沒有修改分區的資料,則該分區不會被BUILD任務修改。
當前BUILD任務調度是以表為粒度的,不同表的BUILD任務可以並存執行。當BUILD任務開始執行後,表級的BUILD任務會切分為以Shard為粒度的BUILD子任務,每個Shard的3個副本都有一個BUILD子任務,當所有的子任務都執行完成後,BUILD任務完成。
注意事項
BUILD期間,該表不能執行
INSERT OVERWRITE SELECT匯入任務,需等待BUILD任務結束才能執行。如果有寫入需求,可以使用INSERT INTO匯入。BUILD任務提交後,不支援取消。
BUILD任務的並發數預設為
核心數(Core)/3,向上取整。不支援修改BUILD任務的並發數。例如,叢集規格為32核128 GB,則BUILD任務的並發數為
32/3向上取整,即並發數為11。BUILD期間可能會消耗CPU、記憶體和IO資源,CPU使用率和磁碟IO使用率等磁碟相關指標均會增加,在BUILD任務結束後,這些指標會迴歸業務正常值。建議您在業務低峰期執行BUILD任務。
自動觸發BUILD任務
若叢集滿足以下條件中的任意一條,會立即觸發BUILD任務:
達到最小BUILD時間間隔,且單表的某個一級分區滿足新增資料達到5萬條。
企業版、基礎版或湖倉版BUILD時間間隔:1.5小時。
數倉版彈性模式BUILD時間間隔:1.5小時。
數倉版預留模式BUILD時間間隔:0.5小時。
距離上次BUILD,時間已過去24小時且至少修改1行資料。
手動觸發BUILD任務
變動分區BUILD
XUANWU表
BUILD TABLE <table_name>;只對變動的分區執行BUILD。
XUANWU_V2表
BUILD TABLE <table_name> [BUILD_OPTION];BUILD_OPTION:選擇性參數,僅支援ttl。在未指定該參數的情況下,預設只對變動的分區執行BUILD。如果指定了該參數,那麼會在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任務。可以配置多個時間段,多個時間段以英文分號(;)隔開。例如,
start和end分別配置為0和6,則表明在0:00~6:59時間段內調度BUILD任務。重要該配置只限制任務調度時間段,不限任務執行時間段。即某任務在該時間內調度,會出現因執行時間較長,超出該時間段的情況。
樣本
配置0~6點和18~22點調度BUILD任務。
SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6;18,22`;執行上述SQL後,叢集會在0:00~6:59和18:00~22:59時間段調度BUILD任務。
配置BUILD調度優先順序
BUILD調度是按照單表某個一級分區新增資料量排序下發任務,新增資料量大的分區先下發任務,根據下發時間的先後排序執行任務。當需要按業務緊急程度調度BUILD任務時,可以通過Hint或者SET ADB_CONFIG調整單表或多表BUILD調度的優先順序。
僅3.1.5.0及以上版本的叢集支援配置BUILD調度的優先順序。
請在雲原生資料倉儲AnalyticDB MySQL控制台集群資訊頁面的配寘資訊地區,查看和升級核心版本。
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 | 任務已完成。 |
常見問題
為什麼BUILD自動調度時間的配置沒有生效?
原因:可能在配置參數時將反引號寫成了正引號,導致參數解析錯誤。
解決方案:使用SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD命令配置調度參數時,需要將start和end參數用反引號(``)引起來。例如SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`0,6`;,表示在0:00~6:59時間段內調度BUILD任務。