新DDL執行引擎引入了任務管理功能,外部行為與之前版本相比有所變化。本文將介紹相關的注意事項與使用限制。
注意事項
- DDL正常執行成功時,無需關注DDL任務的狀態,已成功完成執行的DDL任務會被自動清理。
- 建議DDL執行成功後,立即執行CHECK TABLE檢查邏輯表的一致性。
- 通過DDL任務管理語句恢複、復原或刪除DDL任務後,建議執行CHECK TABLE檢查邏輯表的一致性。
- DDL執行失敗時,會返回導致失敗的錯誤碼和錯誤資訊,您可以通過SHOW DDL查看處於PENDING狀態的DDL任務失敗的原因(即
REMARK欄位中記錄的資訊)。重要 建議您在找到並解決導致DDL任務失敗的因素後,再嘗試執行DDL任務管理語句進行恢複、復原或刪除操作,否則DDL執行可能仍會失敗。 - 若DDL執行失敗,對應的DDL任務處於PENDING狀態時,出於保護目的,目標表會處於不可訪問狀態(SHOW TABLES等操作無法顯示,DML等操作可能會收到
Unknown table或doesn't exist之類的報錯),直到DDL任務通過恢複或復原等方式使目標表達到一致性的狀態後,該表才可以被正常訪問。 - 當為CREATE TABLE指定
IF NOT EXISTS或者為DROP TABLE指定IF EXISTS條件時,一些執行過程中的錯誤不會導致 DDL失敗,但會記錄在warning警告中,請注意DDL執行後是否返回warning數量的訊息(例如1 warning),並用SHOW WARNINGS語句檢查警告,避免遺漏重要的資訊。 通過DMS等用戶端工具執行DDL時,若無法評估DDL需要的執行時間且用戶端工具本身帶有逾時中斷串連(用戶端與PolarDB-X 1.0之間的串連)的設定,為避免DDL由於逾時中斷串連而無法被繼續執行,您可以啟用
PURE_ASYNC_DDL_MODE非同步模式,執行DDL後立即返回,並繼續通過SHOW DDL查看DDL任務狀態。
使用限制
- 僅支援CREATE TABLE和RENAME TABLE兩種DDL復原操作。
- 不支援對處於PENDING狀態的任務執行恢複(RECOVER DDL)和復原(ROLLBACK DDL)的組合重複操作。例如,先復原失敗任務,復原失敗後再對任務進行恢複操作。
REMOVE DDL要在非常確定安全性的前提下謹慎使用,若不確定則不應執行REMOVE DDL,誤用可能造成DDL任務的中間狀態暴露,出現邏輯表不一致的情況。- 預設拆分表的單個物理庫允許建立最多128個分表,您也可以通過如下參數調整上限。
mysql> create table test_mdb_mtb (c1 int not null auto_increment primary key, c2 varchar(10), c3 date) dbpartition by hash(c1) tbpartition by hash(c1) tbpartitions 129; ERROR 4647 (HY000): [f5bd90594800000][30.25.86.55:8527][JICHEN_LOCAL_APP]ERR-CODE: [TDDL-4647][ERR_TABLE_PARTITIONS_EXCEED_LIMIT] The number of table partitions '129' exceeds the upper limit '128'. Please specify less table partitions or adjust the value of the parameter MAX_TABLE_PARTITIONS_PER_DB. mysql> /*+TDDL:cmd_extra(MAX_TABLE_PARTITIONS_PER_DB=400)*/create table test_mdb_mtb (c1 int not null auto_increment primary key, c2 varchar(10), c3 date) dbpartition by hash(c1) tbpartition by hash(c1) tbpartitions 129; Query OK, 0 rows affected (2.64 sec) - DDL執行引擎內部的任務隊列,最多允許堆積65535個PENDING狀態的DDL任務,超過此上限則無法執行DDL,需要通過
REMOVE DDL謹慎清理可刪除的遺留任務,該數量限制無法通過參數調整上限。