本文檔列出了PolarDB-X 1.0返回的常見(jiàn)錯(cuò)誤碼及解決方法。

TDDL-4006 ERR_TABLE_NOT_EXIST

數(shù)據(jù)表不存在。

示例:

ERR-CODE: [TDDL-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.
            

該錯(cuò)誤表示PolarDB-X 1.0數(shù)據(jù)表不存在,或者由于未知原因PolarDB-X 1.0無(wú)法加載數(shù)據(jù)表的元數(shù)據(jù)信息。

TDDL-4007 ERR_CANNOT_FETCH_TABLE_META

PolarDB-X 1.0無(wú)法加載數(shù)據(jù)表的元數(shù)據(jù)信息。

示例:

ERR-CODE: [TDDL-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata 
cannot be fetched because Table '*****.*****' doesn't exist.

該錯(cuò)誤表示PolarDB-X 1.0嘗試讀取數(shù)據(jù)表的元數(shù)據(jù)信息失敗。可能的錯(cuò)誤原因如下:

  • 未創(chuàng)建數(shù)據(jù)表。
  • 分庫(kù)上的表名被人為刪除或改名。
  • 無(wú)法連接RDS MySQL。

出現(xiàn)該錯(cuò)誤時(shí),首先請(qǐng)檢查表名是否存在,然后確認(rèn)PolarDB-X 1.0后端所有RDS MySQL狀態(tài)是否正常。

如果確定表名被人為刪除或改名,可以通過(guò)RDS MySQL的數(shù)據(jù)恢復(fù)功能修復(fù)。

TDDL-4100 ERR_ATOM_NOT_AVALILABLE

PolarDB-X 1.0后端RDS MySQL暫時(shí)不可用。

示例:

ERR-CODE: [TDDL-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable

如果PolarDB-X 1.0探測(cè)到后端某個(gè)RDS MySQL實(shí)例狀態(tài)異常,會(huì)臨時(shí)阻止訪問(wèn)該實(shí)例并提示TDDL-4100錯(cuò)誤。當(dāng)遇到該錯(cuò)誤,請(qǐng)檢查PolarDB-X 1.0后端所有RDS MySQL是否異常,并嘗試進(jìn)行恢復(fù)。

當(dāng)RDS MySQL實(shí)例從異常狀態(tài)恢復(fù)后,PolarDB-X 1.0將自動(dòng)解除不可用狀態(tài),恢復(fù)應(yīng)用正常訪問(wèn)。

TDDL-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON

未知原因的PolarDB-X 1.0后端連接獲取失敗。

示例:

ERR-CODE: [TDDL-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get 
connection for db '*****' from pool failed. AppName:*****, Env:*****, 
UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. 
You should look for the following logs which contains the real reason.

PolarDB-X 1.0在處理請(qǐng)求時(shí)會(huì)向后端RDS MySQL異步創(chuàng)建連接。如果無(wú)法在等待時(shí)間內(nèi)完成RDS MySQL連接創(chuàng)建,而異步任務(wù)又尚未返回錯(cuò)誤原因,PolarDB-X 1.0會(huì)向應(yīng)用返回TDDL-4101錯(cuò)誤。

該錯(cuò)誤通常是由后端RDS MySQL異常導(dǎo)致的。

TDDL-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON

已知原因的PolarDB-X 1.0后端連接獲取失敗。

示例:

ERR-CODE: [TDDL-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get 
connection for db '*****' failed because wait millis 5000, active 0, 
maxActive 5

PolarDB-X 1.0獲取后端RDS MySQL連接時(shí)出錯(cuò),錯(cuò)誤原因已經(jīng)在ERR-CODE消息中給出。

常見(jiàn)PolarDB-X 1.0后端連接失敗的原因如下:

  • 后端RDS MySQL連接數(shù)已滿;
  • RDS MySQL連接超時(shí);
  • RDS MySQL拒絕連接。

TDDL-4103 ERR_ATOM_CONNECTION_POOL_FULL

PolarDB-X 1.0后端RDS MySQL連接池已滿。

示例:

ERR-CODE: [TDDL-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is 
full. Message from pool: wait millis 5000, active 5, maxActive 5. 
AppName:*****, Env:*****, UnitName:null.

該錯(cuò)誤表示PolarDB-X 1.0后端連接池已滿。導(dǎo)致TDDL-4103錯(cuò)誤的常見(jiàn)原因如下:

  • 應(yīng)用SQL語(yǔ)句執(zhí)行比較慢,占用單個(gè)連接的時(shí)間過(guò)長(zhǎng),導(dǎo)致連接數(shù)不夠。
  • 應(yīng)用端沒(méi)有關(guān)閉數(shù)據(jù)庫(kù)連接,導(dǎo)致連接泄露。
  • 有很多跨庫(kù)查詢(例如聚合統(tǒng)計(jì)類查詢或未帶分庫(kù)條件的查詢)同時(shí)執(zhí)行,占用大量連接。

解決方法建議如下:

  • 盡量使用框架訪問(wèn)數(shù)據(jù)庫(kù),如Spring JDBC、MyBatis等。
  • 按RDS性能分析報(bào)告與DBA建議優(yōu)化業(yè)務(wù)SQL語(yǔ)句。
  • 使用PolarDB-X 1.0讀寫分離將跨庫(kù)查詢轉(zhuǎn)發(fā)至讀庫(kù)處理。
  • 升級(jí)更高規(guī)格的RDS實(shí)例,提升后端處理能力。

TDDL-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW

PolarDB-X 1.0后端RDS MySQL連接創(chuàng)建太慢。

示例:

ERR-CODE: [TDDL-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection 
for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. 
Message from pool: wait millis 5000, active 3, maxActive 5.

PolarDB-X 1.0向后端RDS MySQL異步創(chuàng)建連接時(shí),如果短時(shí)間內(nèi)創(chuàng)建大量連接,或者RDS MySQL建立連接速度太慢,會(huì)出現(xiàn)等待超時(shí)。

該問(wèn)題通常是由后端RDS MySQL壓力過(guò)大或異常導(dǎo)致的,建議使用PolarDB-X 1.0讀寫分離,或者升級(jí)更高規(guī)格的RDS實(shí)例,減輕后端處理壓力。

如果問(wèn)題是由于短時(shí)間內(nèi)創(chuàng)建大量連接導(dǎo)致,請(qǐng)調(diào)整PolarDB-X 1.0最小連接數(shù)。

TDDL-4105 ERR_ATOM_ACCESS_DENIED

PolarDB-X 1.0后端RDS MySQL拒絕創(chuàng)建連接。

示例:

ERR-CODE: [TDDL-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for 
user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please 
contact DBA to check.

該錯(cuò)誤表明PolarDB-X 1.0通過(guò)用戶名和密碼連接RDS MySQL時(shí)被拒絕訪問(wèn)。

如果不小心在后端RDS MySQL上修改了由PolarDB-X 1.0自動(dòng)創(chuàng)建的用戶名或密碼,就會(huì)導(dǎo)致PolarDB-X 1.0提示TDDL-4105錯(cuò)誤。修復(fù)該問(wèn)題需要手工訂正PolarDB-X 1.0的用戶名或密碼。

此外,后端RDS實(shí)例欠費(fèi)或到期后會(huì)拒絕所有訪問(wèn)請(qǐng)求,也會(huì)導(dǎo)致PolarDB-X 1.0產(chǎn)生TDDL-4105錯(cuò)誤。如果遇到這種情況,請(qǐng)及時(shí)給RDS實(shí)例續(xù)費(fèi)。

TDDL-4106 ERR_ATOM_DB_DOWN

PolarDB-X 1.0后端RDS MySQL無(wú)法連接。

示例:

ERR-CODE: [TDDL-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. 
AppName:*****, Env:*****, UnitName:null. It seems a very real possibility 
that this DB IS DOWN. Please contact DBA to check.

該錯(cuò)誤表示PolarDB-X 1.0向后端RDS MySQL創(chuàng)建連接超時(shí)或沒(méi)有響應(yīng)。

TDDL-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW

變量(variable)不允許被設(shè)置為NULL

示例:

ERR-CODE: [TDDL-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System 
variable ***** can''t set to null for now;

部分MySQL變量(variable)不允許用SET var = x語(yǔ)句設(shè)置成NULL值。遇到這種情況,PolarDB-X 1.0會(huì)提示TDDL-4108錯(cuò)誤。

如果遇到該錯(cuò)誤,請(qǐng)檢查傳遞的變量(variable)值,并參考MySQL官方文檔改正,詳情請(qǐng)參見(jiàn) MySQL官網(wǎng)

TDDL-4200 ERR_GROUP_NOT_AVALILABLE

PolarDB-X 1.0分庫(kù)暫時(shí)不可用。

示例:

ERR-CODE: [TDDL-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is 
running in fail-fast status, caused by this SQL:***** which threw a fatal 
exception as *****.

當(dāng)分庫(kù)包含的RDS MySQL實(shí)例出現(xiàn)訪問(wèn)異常,并且分庫(kù)下沒(méi)有其他可用實(shí)例時(shí),PolarDB-X 1.0會(huì)將分庫(kù)置于fail-fast狀態(tài)并提示TDDL-4200錯(cuò)誤。

通常該錯(cuò)誤是由于RDS MySQL故障導(dǎo)致的。請(qǐng)根據(jù)包含的RDS MySQL實(shí)例異常信息定位和解決問(wèn)題。當(dāng)故障RDS MySQL實(shí)例恢復(fù)后,PolarDB-X 1.0將自動(dòng)取消fail-fast狀態(tài)。

TDDL-4201 ERR_GROUP_NO_ATOM_AVALILABLE

PolarDB-X 1.0分庫(kù)內(nèi)暫時(shí)沒(méi)有可用RDS MySQL實(shí)例。

示例:

ERR-CODE: [TDDL-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in 
Group '*****' is 0. Weights is: *****.

當(dāng)分庫(kù)包含的RDS MySQL實(shí)例全都不可用,或者處于fail-fast狀態(tài)時(shí),PolarDB-X 1.0會(huì)提示TDDL-4201錯(cuò)誤。

通常該錯(cuò)誤是由于RDS MySQL故障導(dǎo)致。請(qǐng)檢查后端RDS MySQL實(shí)例狀態(tài)以定位和解決問(wèn)題。

TDDL-4202 ERR_SQL_QUERY_TIMEOUT

PolarDB-X 1.0查詢超時(shí)。

示例:

ERR-CODE: [TDDL-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout 
exception, please contact DBA to check slow sql. SocketTimout:*** ms, 
Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.

該錯(cuò)誤表示SQL語(yǔ)句在后端RDS MySQL實(shí)例上的執(zhí)行時(shí)間超過(guò)PolarDB-X 1.0設(shè)置的socketTimeout參數(shù)限制。默認(rèn)的PolarDB-X 1.0超時(shí)(socketTimeout)時(shí)間設(shè)置是900秒。

建議優(yōu)化SQL語(yǔ)句,以及在后端RDS MySQL上創(chuàng)建適合的索引以提升SQL語(yǔ)句的執(zhí)行性能。

如果優(yōu)化后的SQL語(yǔ)句仍然執(zhí)行較慢,可以參考如下PolarDB-X 1.0 Hint語(yǔ)法臨時(shí)設(shè)置超時(shí)時(shí)間:

/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;

其中SOCKET_TIMEOUT設(shè)置的單位是毫秒。

關(guān)于PolarDB-X 1.0 Hint,詳情請(qǐng)參見(jiàn)自定義SQL超時(shí)時(shí)間

TDDL-4203 ERR_SQL_QUERY_MERGE_TIMEOUT

分布式查詢超時(shí)。

示例:

ERR-CODE: [TDDL-4203][ERR_SQL_QUERY_MERGE_TIMEOUT] Slow sql query leads to 
a timeout exception during merging results, please optimize the slow sql. 
The the default timeout is *** ms. DB is *****

PolarDB-X 1.0執(zhí)行分布式查詢超時(shí),默認(rèn)的超時(shí)設(shè)置是900秒。

產(chǎn)生TDDL-4203錯(cuò)誤表示SQL語(yǔ)句掃描了多個(gè)分庫(kù)的數(shù)據(jù)并且執(zhí)行時(shí)間超過(guò)900秒,建議進(jìn)行如下優(yōu)化:

  • 盡量在WHERE條件中添加分庫(kù)鍵(Sharding key)條件,將SQL語(yǔ)句優(yōu)化成單庫(kù)執(zhí)行。
  • 檢查是否可以在后端RDS MySQL上創(chuàng)建適合的索引,提升掃描各個(gè)分庫(kù)數(shù)據(jù)的性能。
  • 設(shè)法消除分布式查詢中的跨庫(kù)JOIN,數(shù)據(jù)重排序等耗時(shí)操作,降低數(shù)據(jù)合并階段的消耗。

如果優(yōu)化后的SQL語(yǔ)句仍然執(zhí)行較慢,可以使用下面的Hint語(yǔ)法臨時(shí)設(shè)置PolarDB-X 1.0的超時(shí)時(shí)間:

/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;

其中SOCKET_TIMEOUT設(shè)置的單位是毫秒。

關(guān)于PolarDB-X 1.0 Hint,詳情請(qǐng)參見(jiàn)自定義SQL超時(shí)時(shí)間

TDDL-4400 ERR_SEQUENCE

處理Sequence(全局唯一序列)失敗。

示例:

ERR-CODE: [TDDL-4400][ERR_SEQUENCE] Sequence : All dataSource faild to get 
value!

該錯(cuò)誤表示處理Sequence出錯(cuò),錯(cuò)誤信息在Sequence :中給出。

導(dǎo)致該錯(cuò)誤的常見(jiàn)原因是RDS MySQL故障,無(wú)法訪問(wèn)Sequence有關(guān)的數(shù)據(jù)表。建議先檢查后端RDS MySQL狀態(tài)。

TDDL-4401 ERR_MISS_SEQUENCE

Sequence不存在。

示例:

ERR-CODE: [TDDL-4401][ERR_MISS_SEQUENCE] Sequence '*****' is not found

命令中使用的Sequence名稱不存在。建議用SHOW SEQUENCES命令檢查PolarDB-X 1.0中所有已創(chuàng)建的Sequence名稱,并且選擇正確的Sequence名稱。

如果使用的Sequence尚不存在,可以用CREATE SEQUENCE語(yǔ)法創(chuàng)建:

CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] 
[ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] 
[ CYCLE | NOCYCLE ]` 

關(guān)于Sequence,詳情請(qǐng)參見(jiàn)Sequence

TDDL-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB

Sequence使用的數(shù)據(jù)表不存在。

示例:

ERR-CODE: [TDDL-4403][ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB] Sequence table 
is not in default db.

無(wú)法在后端的數(shù)據(jù)庫(kù)里訪問(wèn)名稱為sequence或者sequence_opt的數(shù)據(jù)表。

TDDL-4404 ERR_SEQUENCE_TABLE_META

Sequence數(shù)據(jù)表結(jié)構(gòu)錯(cuò)誤。

示例:

ERR-CODE: [TDDL-4404][ERR_SEQUENCE_TABLE_META] the meta of sequence table 
is error, some columns missed

Sequence相關(guān)數(shù)據(jù)表(如sequencesequence_opt)中缺少相應(yīng)的字段。

TDDL-4405 ERR_INIT_SEQUENCE_FROM_DB

初始化Sequence錯(cuò)誤。

示例:

ERR-CODE: [TDDL-4405][ERR_INIT_SEQUENCE_FROM_DB] init sequence manager 
error: *****

在初始化需要訪問(wèn)的Sequence時(shí)出錯(cuò),錯(cuò)誤信息在init sequence manager error:后給出。

建議先檢查后端RDS MySQL狀態(tài)。

TDDL-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE

訪問(wèn)Sequence數(shù)據(jù)表出錯(cuò)。

示例:

ERR-CODE: [TDDL-4407][ERR_OTHER_WHEN_BUILD_SEQUENCE] error when build 
sequence: *****

在訪問(wèn)Sequence相關(guān)數(shù)據(jù)表(如sequencesequence_opt)時(shí)發(fā)生錯(cuò)誤。錯(cuò)誤信息在error when build sequence:后給出。

建議先檢查后端RDS MySQL狀態(tài)。

DDL-4408 ERR_SEQUENCE_NEXT_VALUE

獲取Sequence值出錯(cuò)。

示例:

ERR-CODE: [TDDL-4408][ERR_SEQUENCE_NEXT_VALUE] error when get sequence's 
next value, sequence is: *****, error: *****

使用PolarDB-X 1.0自增主鍵,或者使用<sequence name>.NEXTVAL語(yǔ)法手工獲取全局唯一ID時(shí)發(fā)生錯(cuò)誤。錯(cuò)誤原因在error:提示后給出。

產(chǎn)生TDDL-4408錯(cuò)誤的原因一般來(lái)自后端的RDS MySQL故障。建議先檢查后端RDS MySQL狀態(tài)和訪問(wèn)壓力。

TDDL-4500 ERR_PARSER

解析SQL語(yǔ)句失敗。

示例:

ERR-CODE: [TDDL-4500][ERR_PARSER] not support statement: '*****'

PolarDB-X 1.0支持符合SQL-92標(biāo)準(zhǔn)的SQL語(yǔ)法,以及MySQL支持的語(yǔ)法擴(kuò)展與函數(shù)。請(qǐng)檢查執(zhí)行的SQL語(yǔ)句是否符合PolarDB-X 1.0兼容的SQL語(yǔ)法標(biāo)準(zhǔn)及MySQL規(guī)范。

關(guān)于SQL標(biāo)準(zhǔn)語(yǔ)法,請(qǐng)參見(jiàn)SQL標(biāo)準(zhǔn)語(yǔ)法

關(guān)于PolarDB-X 1.0兼容的SQL語(yǔ)法,請(qǐng)參見(jiàn)SQL使用限制

TDDL-4501 ERR_OPTIMIZER

優(yōu)化器轉(zhuǎn)換SQL語(yǔ)句失敗。

示例:

ERR-CODE: [TDDL-4501][ERR_OPTIMIZER] optimize error by: Unknown column 
'*****' in 'order clause'

PolarDB-X 1.0優(yōu)化器的工作是轉(zhuǎn)換SQL語(yǔ)句到內(nèi)部語(yǔ)法樹(shù)。如果SQL語(yǔ)句中出現(xiàn)邏輯錯(cuò)誤,優(yōu)化器轉(zhuǎn)換就會(huì)失敗,產(chǎn)生TDDL-4501錯(cuò)誤。

建議按照optimize error by:后的提示檢查和調(diào)整您的SQL語(yǔ)句。

TDDL-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT

ORDER BY包含的函數(shù)列在SELECT子句中不存在。

示例:

ERR-CODE: [TDDL-4502][ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT] Syntax 
Error: orderBy/GroupBy Column ***** is not existed in select clause` 

當(dāng)SQL語(yǔ)句中的ORDER BY子句包含函數(shù)列(例如RAND())時(shí),PolarDB-X 1.0要求同樣的函數(shù)列必須也在SELECT子句中出現(xiàn),否則提示TDDL-4502錯(cuò)誤。

建議在SELECT子句中添加相應(yīng)的函數(shù)列。

TDDL-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN

相同表JOIN的條件不足。

示例:

ERR-CODE: [TDDL-4504][ERR_OPTIMIZER_SELF_CROSS_JOIN] self cross join case, 
add shard column filter on right table

PolarDB-X 1.0在執(zhí)行相同表的JOIN時(shí),如果WHERE子句只包含其中一張左表(或右表)的拆分字段(sharding column)條件,會(huì)提示TDDL-4504錯(cuò)誤。

建議調(diào)整SQL語(yǔ)句,在WHERE子句中補(bǔ)全JOIN左表(或右表)的拆分字段條件。

TDDL-4506 ERR_MODIFY_SHARD_COLUMN

禁止更新拆分鍵。

示例:

ERR-CODE: [TDDL-4506][ERR_MODIFY_SHARD_COLUMN] Column '*****' is a sharding 
key of table '*****', which is forbidden to be modified.

PolarDB-X 1.0禁止使用UPDATE語(yǔ)句修改拆分鍵(sharding key)的值。由于更新操作很可能會(huì)改變數(shù)據(jù)所在的分片,PolarDB-X 1.0無(wú)法保證操作的原子性與數(shù)據(jù)的一致性。

建議將對(duì)應(yīng)UPDATE語(yǔ)句修改為相同效果的INSERT+DELETE語(yǔ)句。

TDDL-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN

無(wú)法執(zhí)行合并排序JOIN。

示例:

ERR-CODE: [TDDL-4508][ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN] sort merge 
join is not allowed when missing equivalent filter

如果SQL語(yǔ)句中需要JOIN的數(shù)據(jù)表分別來(lái)自不同的RDS MySQL實(shí)例,PolarDB-X 1.0會(huì)優(yōu)先選擇合并排序(Sort-merge Join)算法。該算法要求JOIN的左表與右表必須包含字段相等的關(guān)聯(lián)條件,否則將提示TDDL-4508錯(cuò)誤。

建議調(diào)整SQL語(yǔ)句,在JOINWHERE部分添加相應(yīng)的關(guān)聯(lián)條件。

TDDL-4509 ERR_OPTIMIZER_ERROR_HINT

Hint語(yǔ)法錯(cuò)誤。

示例:

ERR-CODE: [TDDL-4509][ERR_OPTIMIZER_ERROR_HINT] Hint Syntax Error: 
unexpected operation: *****.

該錯(cuò)誤表示SQL語(yǔ)句中的Hint語(yǔ)法無(wú)法被PolarDB-X 1.0解析。更多關(guān)于Hint語(yǔ)法信息,請(qǐng)參見(jiàn)Hint簡(jiǎn)介

TDDL-4510 ERR_CONTAINS_NO_SHARDING_KEY

缺少拆分鍵(sharding key)條件。

示例:

ERR-CODE: [TDDL-4510][ERR_CONTAINS_NO_SHARDING_KEY] Your SQL contains NO 
SHARDING KEY '*****' for table '*****', which is not allowed in DEFAULT.

如果PolarDB-X 1.0拆分表沒(méi)有開(kāi)啟全表掃描(full-table scan)功能,則訪問(wèn)該表時(shí)必須在WHERE子句中包含拆分鍵條件。否則,將提示TDDL-4510錯(cuò)誤。

PolarDB-X 1.0在建表時(shí)默認(rèn)開(kāi)啟全表掃描功能。如果手工關(guān)閉全表掃描,建議確認(rèn)與該表有關(guān)的SQL語(yǔ)句都已添加拆分鍵條件。

TDDL-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY

INSERT語(yǔ)句缺少拆分鍵 (sharding key)。

示例:

ERR-CODE: [TDDL-4511][ERR_INSERT_CONTAINS_NO_SHARDING_KEY] Your INSERT SQL 
contains NO SHARDING KEY '*****' for table '*****'.

當(dāng)INSERT語(yǔ)句的目標(biāo)是一張PolarDB-X 1.0拆分表時(shí),必須在插入數(shù)據(jù)中包含拆分鍵的值(拆分鍵是自增主鍵例外)。否則,將提示TDDL-4511錯(cuò)誤。

如果遇到該錯(cuò)誤,建議修改INSERT語(yǔ)句補(bǔ)充缺少的拆分鍵值。

TDDL-4515 ERR_CONNECTION_CHARSET_NOT_MATCH

輸入字符集不匹配。

示例:

ERR-CODE: [TDDL-4515][ERR_CONNECTION_CHARSET_NOT_MATCH] Caused by MySQL's 
character_set_connection doesn't match your input charset. Partition DDL can 
only take ASCII or chinese column name. If you want use chinese table or 
column name, Make sure MySQL connection's charset support chinese character. 
Use "set names xxx" to set correct charset.

PolarDB-X 1.0支持用中文字符命名表名及字段名。在執(zhí)行含有中文字符的SQL語(yǔ)句時(shí),如果數(shù)據(jù)庫(kù)連接的字符集設(shè)置(character_set_connection)不支持中文(如 latin1),會(huì)提示TDDL-4515錯(cuò)誤。

您可以使用SHOW VARIABLES LIKE 'character_set_connection'查詢MySQL客戶端當(dāng)前的連接字符集,使用SET NAMES x命令修改當(dāng)前連接字符集。如果是Java程序JDBC方式連接PolarDB-X 1.0,請(qǐng)?jiān)O(shè)置數(shù)據(jù)庫(kù)連接參數(shù)characterEncoding

TDDL-4516 ERR_TRUNCATED_DOUBLE_VALUE_OVERFLOW

浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)溢出。

示例:

ERR-CODE: [TDDL-4516][ERR_TRUNCATED_DOUBLE_VALUE_OVERFLOW] Truncated 
incorrect DOUBLE value '*****' over column[*****]'s value range.

PolarDB-X 1.0將浮點(diǎn)數(shù)轉(zhuǎn)換成對(duì)應(yīng)類型的整數(shù)時(shí),結(jié)果超過(guò)了整數(shù)類型的取值范圍。建議檢查SQL語(yǔ)句中的字段類型和輸入?yún)?shù)。

TDDL-4517 ERR_MODIFY_SYSTEM_TABLE

禁止修改系統(tǒng)表。

示例:

ERR-CODE: [TDDL-4517][ERR_MODIFY_SYSTEM_TABLE] Table '*****' is PolarDB-XSYSTEM 
TABLE, which is forbidden to be modified.

PolarDB-X 1.0內(nèi)部維護(hù)了一些系統(tǒng)表,使用SQL語(yǔ)句更新其中的數(shù)據(jù)會(huì)提示TDDL-4517錯(cuò)誤。

限制的系統(tǒng)表包括sequencesequence_opttxc_undo_log__DRDS__SYSTEM__LOCK__,請(qǐng)避免在業(yè)務(wù)或數(shù)據(jù)庫(kù)設(shè)計(jì)中使用這些表名。

TDDL-4518 ERR_VALIDATE

元數(shù)據(jù)校驗(yàn)失敗。

示例:

ERR-CODE: [TDDL-4518][ERR_VALIDATE] Object 'optest1' not found

SQL發(fā)送到PolarDB-X 1.0計(jì)算節(jié)點(diǎn)上,會(huì)基于現(xiàn)有的元信息做校驗(yàn),這個(gè)異常說(shuō)明查詢的表或者列等信息不符合現(xiàn)有元信息要求。

TDDL-4600 ERR_FUNCTION

錯(cuò)誤的函數(shù)調(diào)用。

示例:

ERR-CODE: [TDDL-4600][ERR_FUNCTION] function compute error by Incorrect 
parameter count in the call to native function '*****'

該錯(cuò)誤表明在SQL語(yǔ)句中使用了錯(cuò)誤的語(yǔ)法或參數(shù)調(diào)用函數(shù)。建議仔細(xì)檢查SQL語(yǔ)句中的函數(shù)調(diào)用部分,并且使用正確的參數(shù)個(gè)數(shù)和類型調(diào)用函數(shù)。

TDDL-4601 ERR_EXECUTOR

SQL執(zhí)行過(guò)程出錯(cuò)。

示例:

ERR-CODE: [TDDL-4601][ERR_EXECUTOR] only one column is supported in 
distinct aggregate

該錯(cuò)誤代表PolarDB-X 1.0在執(zhí)行SQL語(yǔ)句過(guò)程中出現(xiàn)了意外錯(cuò)誤。這類錯(cuò)誤通常與后端RDS MySQL異常狀態(tài)有關(guān)。

TDDL-4602 ERR_CONVERTOR

錯(cuò)誤的類型轉(zhuǎn)換。

示例:

ERR-CODE: [TDDL-4602][ERR_CONVERTOR] convertor error by Unsupported convert: 
[*****]

該錯(cuò)誤表明PolarDB-X 1.0在執(zhí)行SQL時(shí)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換失敗。請(qǐng)檢查SQL語(yǔ)句中是否存在需要隱式類型轉(zhuǎn)換的數(shù)據(jù),并且盡量使用相同類型進(jìn)行比較和計(jì)算。

TDDL-4603 ERR_ACCROSS_DB_TRANSACTION

跨庫(kù)事務(wù)失敗。

示例:

ERR-CODE: [TDDL-4603][ERR_ACCROSS_DB_TRANSACTION] Transaction accross db is 
not supported in current transaction policy, transaction node is: {0}, but 
this sql execute on: *****.

PolarDB-X 1.0默認(rèn)僅支持單庫(kù)事務(wù),即事務(wù)中的所有SQL語(yǔ)句都必須按規(guī)則轉(zhuǎn)發(fā)到相同RDS MySQL分庫(kù)執(zhí)行。否則,將提示TDDL-4603錯(cuò)誤。

TDDL-4604 ERR_CONCURRENT_TRANSACTION

嵌套事務(wù)失敗。

示例:

ERR-CODE: [TDDL-4604][ERR_CONCURRENT_TRANSACTION] Concurrent query is not 
supported on transaction group, transaction group is: {0}.

PolarDB-X 1.0不支持嵌套事務(wù),如果在同一個(gè)數(shù)據(jù)庫(kù)連接里嘗試同時(shí)開(kāi)啟2個(gè)以上事務(wù),將提示TDDL-4604錯(cuò)誤。

建議在應(yīng)用開(kāi)發(fā)時(shí)避免使用嵌套事務(wù),或者使用應(yīng)用層的事務(wù)框架防止產(chǎn)生嵌套事務(wù)。

TDDL-4606 ERR_QUERY_C

當(dāng)前執(zhí)行的SQL被取消。

示例:

ERR-CODE: [TDDL-4606][ERR_QUERY_CANCLED] Getting connection is not allowed 
when query has been cancled, group is *****

使用KILL x取消某條正在執(zhí)行的SQL語(yǔ)句時(shí),被取消的SQL語(yǔ)句會(huì)返回該錯(cuò)誤。如果經(jīng)常出現(xiàn)這一情況,請(qǐng)排查是否有客戶端或程序在執(zhí)行KILL命令。

TDDL-4607 ERR_INSERT_WHEN_UPDATE

INSERT DELETE方式執(zhí)行UPDATE語(yǔ)句時(shí)出錯(cuò)。

示例:

ERR-CODE: [TDDL-4607][ERR_INSERT_WHEN_UPDATE] Insert new values error, 
table is: *****, old Values: *****, new Values: *****

開(kāi)啟允許更新分庫(kù)鍵(Sharding-key)功能后,PolarDB-X 1.0可以將UPDATE分庫(kù)鍵值的SQL語(yǔ)句按照INSERT+DELETE方式轉(zhuǎn)換執(zhí)行。如果執(zhí)行失敗,則提示TDDL-4607錯(cuò)誤。

該錯(cuò)誤通常是因?yàn)楹蠖薘DS MySQL故障導(dǎo)致的。建議首先檢查RDS MySQL狀態(tài)。

TDDL-4610 ERR_CONNECTION_CLOSED

連接已經(jīng)關(guān)閉。

示例:

ERR-CODE: [TDDL-4610][ERR_CONNECTION_CLOSED] connection has been closed

當(dāng)事務(wù)中的SQL語(yǔ)句執(zhí)行出錯(cuò),或者被KILL命令取消后,重復(fù)使用同一個(gè)數(shù)據(jù)庫(kù)連接執(zhí)行其他SQL語(yǔ)句會(huì)提示TDDL-4610錯(cuò)誤。

建議在該情況下關(guān)閉連接,重新獲取一個(gè)新的數(shù)據(jù)庫(kù)連接。

TDDL-4636 ERR_DDL_JOB_ERROR

DDL語(yǔ)句執(zhí)行失敗。

示例:

ERR-CODE: [PXC-4636][ERR_DDL_JOB_ERROR] xxxx

該錯(cuò)誤碼表示DDL語(yǔ)句執(zhí)行失敗,處理方法請(qǐng)參見(jiàn)如何處理DDL異常

TDDL-4642 ERR_UNKNOWN_TABLE

數(shù)據(jù)庫(kù)中不存在這張表。

示例:

ERR-CODE: [PXC-4642][ERR_UNKNOWN_TABLE] Unknown table XX.XX

請(qǐng)檢查當(dāng)前數(shù)據(jù)庫(kù)中是否有這張表。

TDDL-1305 ERR_UNKNOWN_SAVEPOINT

指定名稱的SAVEPOINT不存在。

示例:

ERR-CODE: [TDDL-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist

PolarDB-X 1.0上執(zhí)行ROLLBACK TO SAVEPOINT x或者RELEASE SAVEPOINT x命令時(shí),如果指定的SAVEPOINT名稱不存在,會(huì)提示TDDL-1305錯(cuò)誤。

建議檢查SAVEPOINT命令返回的名稱是否和使用的名稱一致。

TDDL-1094 ERR_UNKNOWN_THREAD_ID

KILL命令指定的會(huì)話ID不存在。

示例:

ERR-CODE: [TDDL-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****

PolarDB-X 1.0上執(zhí)行KILL x命令取消執(zhí)行的SQL語(yǔ)句時(shí),如果指定的會(huì)話ID不存在,或者對(duì)應(yīng)的SQL語(yǔ)句已經(jīng)結(jié)束執(zhí)行,會(huì)提示TDDL-1094錯(cuò)誤。

建議使用SHOW PROCESSLIST命令查看正在執(zhí)行的SQL語(yǔ)句會(huì)話ID,并只使用返回的ID執(zhí)行KILL操作。

TDDL-4612 ERR_CHECK_SQL_PRIV

由于權(quán)限不夠,SQL語(yǔ)句無(wú)法執(zhí)行。

示例:

ERR-CODE: [TDDL-4612][ERR_CHECK_SQL_PRIV] check user ***** on db ***** sql 
privileges failed.

PolarDB-X 1.0支持賬號(hào)和授權(quán),類似MySQL賬號(hào)權(quán)限體系,只有擁有對(duì)應(yīng)類型權(quán)限的賬號(hào)才能執(zhí)行該SQL語(yǔ)句。如果賬號(hào)權(quán)限不足,PolarDB-X 1.0將提示TDDL-4612錯(cuò)誤。

建議檢查用戶擁有的PolarDB-X 1.0權(quán)限。如果權(quán)限不足,請(qǐng)?jiān)?span id="z68uejxpaoma" class="ph" data-tag="ph" id="ph-b9x-uos-vwy">PolarDB-X 1.0控制臺(tái)設(shè)置。

TDDL-4613 ERR_INSERT_SELECT

執(zhí)行INSERT ... SELECT語(yǔ)句出錯(cuò)。

示例:

ERR-CODE: [TDDL-4613][ERR_INSERT_SELECT] insert error, table is: *****,
values: *****

PolarDB-X 1.0支持將跨庫(kù)的INSERT ... SELECT語(yǔ)句拆分成獨(dú)立的SELECT和INSERT語(yǔ)句批量執(zhí)行。如果執(zhí)行失敗,則提示TDDL-4613錯(cuò)誤。

該錯(cuò)誤通常是因?yàn)楹蠖薘DS MySQL故障導(dǎo)致的。建議首先檢查RDS MySQL狀態(tài)。

TDDL-4614 ERR_EXECUTE_ON_MYSQL

SQL語(yǔ)句在RDS MySQL上執(zhí)行報(bào)錯(cuò)。

示例:

ERR-CODE: [TDDL-4614][ERR_EXECUTE_ON_MYSQL] Error occurs when execute on GROUP '*****': Duplicate entry '*****' for key 'PRIMARY'
PolarDB-X 1.0在后端RDS MySQL數(shù)據(jù)庫(kù)上執(zhí)行SQL語(yǔ)句報(bào)錯(cuò),末尾包含了從RDS MySQL返回的原始錯(cuò)誤信息,例如:
  • Duplicate entry '*****' for key 'PRIMARY'表示寫入RDS MySQL數(shù)據(jù)表發(fā)生了主鍵沖突。
  • The table '*****' is full表示RDS MySQL使用的臨時(shí)表已滿,需要調(diào)整臨時(shí)表空間或優(yōu)化SQL語(yǔ)句。
  • Deadlock found when trying to get lock;表示在RDS MySQL中出現(xiàn)了死鎖,通常是數(shù)據(jù)寫入存在較多事務(wù)沖突導(dǎo)致的。

建議參考TDDL-4614提供的原始錯(cuò)誤信息排查問(wèn)題。更多關(guān)于SQL語(yǔ)句錯(cuò)誤信息請(qǐng)參見(jiàn)MySQL(5.6)文檔

TDDL-4615 ERR_CROSS_JOIN_SIZE_PROTECTION

分布式JOIN返回的數(shù)據(jù)行數(shù)超出限制。

示例:

ERR-CODE: [TDDL-4615][ERR_CROSS_JOIN_SIZE_PROTECTION] across join table size protection, check your sql or enlarge the limination size .

當(dāng)PolarDB-X 1.0以嵌套循環(huán)(Nested-loop)方式執(zhí)行分布式JOIN語(yǔ)句時(shí),如果從右表返回大量數(shù)據(jù),將嚴(yán)重占據(jù)內(nèi)存,影響PolarDB-X 1.0服務(wù)的穩(wěn)定性。因此,PolarDB-X 1.0限制這種情況下右表返回的數(shù)據(jù)行數(shù)最多不能超過(guò)5000。如果超出這一限制,PolarDB-X 1.0會(huì)提示TDDL-4615錯(cuò)誤。

建議優(yōu)化SQL語(yǔ)句避免從右表返回大量數(shù)據(jù),或者讓PolarDB-X 1.0能夠使用更好的算法(如合并排序Sort-merge Join)執(zhí)行分布式JOIN。

如果需要針對(duì)某個(gè)具體SQL調(diào)整該值,建議按以下原則操作:
  • 如果單條記錄超過(guò)100K,不建議調(diào)整該值。
  • 如果單條記錄不超過(guò)100K,可以適當(dāng)調(diào)整。建議不要設(shè)置太大的值,否則會(huì)有爆內(nèi)存的風(fēng)險(xiǎn)。
  • 假設(shè)單條記錄是100K,參與分布式JOIN計(jì)算的內(nèi)存就需要500M(100K*5000)。如果有多個(gè)連接都在運(yùn)行該SQL,很容易引起爆內(nèi)存,例如有5個(gè)連接同時(shí)在運(yùn)行該SQL,就需要2.5G(500M*5)的內(nèi)存。
  • 如果確實(shí)需要調(diào)整,請(qǐng)?jiān)谛枰{(diào)整的SQL前面加HINT,例如調(diào)整成5100:/*!TDDL:MAX_ROW_RETURN_FROM_RIGHT_INDEX_NESTED_LOOP=5100*/SQL

TDDL-4616 ERR_UNKNOWN_DATABASE

錯(cuò)誤的數(shù)據(jù)庫(kù)。

示例:

ERR-CODE: [TDDL-4616][ERR_UNKNOWN_DATABASE] Unknown database '*****'

PolarDB-X 1.0允許在DDL語(yǔ)句中指定數(shù)據(jù)庫(kù)名稱。如果指定的數(shù)據(jù)庫(kù)名稱與PolarDB-X 1.0提供的數(shù)據(jù)庫(kù)名稱不一致,將返回TDDL-4616錯(cuò)誤。

建議修改DDL語(yǔ)句中的數(shù)據(jù)庫(kù)名稱,確保與PolarDB-X 1.0數(shù)據(jù)庫(kù)名稱一致。

TDDL-4617 ERR_SUBQUERY_LIMIT_PROTECTION

子查詢返回的數(shù)據(jù)行數(shù)超出限制。

示例:

ERR-CODE: [TDDL-4617][ERR_SUBQUERY_LIMIT_PROTECTION] The number of rows returned by the subquery exceeds the maximum number of 20000.

當(dāng)PolarDB-X 1.0執(zhí)行含子查詢(Sub-query)的SQL語(yǔ)句時(shí),如果子查詢返回大量數(shù)據(jù),會(huì)嚴(yán)重占據(jù)內(nèi)存,影響PolarDB-X 1.0服務(wù)的穩(wěn)定性。因此,PolarDB-X 1.0限制這種情況下子查詢返回的數(shù)據(jù)行數(shù)最多不能超過(guò)20000。如果超出這一限制,PolarDB-X 1.0會(huì)返回TDDL-4617錯(cuò)誤。

建議優(yōu)化SQL語(yǔ)句中的子查詢避免返回大量數(shù)據(jù)。或者設(shè)法將子查詢改寫成JOIN形式,讓PolarDB-X 1.0能夠使用更好的算法(如合并排序Sort-merge Join)執(zhí)行。

TDDL-4800 ERR_SET_TXCID

執(zhí)行SET TXC_ID x命令失敗。

示例:

ERR-CODE: [TDDL-4800][ERR_SET_TXCID] set txc_id failed: *****

具體原因請(qǐng)參見(jiàn)GTS文檔什么是全局事務(wù)服務(wù)GTS

TDDL-4801 ERR_TXCID_NULL

執(zhí)行SELECT LAST_TXC_ID返回NULL。

示例:

ERR-CODE: [TDDL-4801][ERR_TXCID_NULL] txc_xid is null: *****

具體原因請(qǐng)參見(jiàn)GTS文檔什么是全局事務(wù)服務(wù)GTS

TDDL-4802 ERR_SELECT_LAST_TXCID

執(zhí)行SELECT LAST_TXC_ID命令失敗。

示例:

ERR-CODE: [TDDL-4802][ERR_SELECT_LAST_TXCID] select last_txc_xid failed: *****

具體原因請(qǐng)參見(jiàn)GTS文檔什么是全局事務(wù)服務(wù)GTS

TDDL-4994 ERR_FLOW_CONTROL

流量控制。

示例:

ERR-CODE: [TDDL-4994][ERR_FLOW_CONTROL] [*****] flow control by *****

該錯(cuò)誤代表PolarDB-X 1.0處理SQL請(qǐng)求已達(dá)到內(nèi)部流量上限,當(dāng)前請(qǐng)求被拒絕。

建議檢查SQL請(qǐng)求量是否存在異常峰值。

TDDL-4998 ERR_NOT_SUPPORT

不支持的特性。

示例:

ERR-CODE: [TDDL-4998][ERR_NOT_SUPPORT] ***** not support yet!

該錯(cuò)誤表示使用的SQL語(yǔ)法或者功能PolarDB-X 1.0尚不支持。

TDDL-5001 ERR_TRANS

一般性的事務(wù)錯(cuò)誤。

示例:

ERR-CODE: [TDDL-5001][ERR_TRANS] Too many lines updated in statement.

請(qǐng)參考錯(cuò)誤信息處理,Too many lines updated in statement表示事務(wù)中的UPDATE語(yǔ)句更新行數(shù)超出限制(1000),建議檢查UPDATE語(yǔ)句的WHERE條件。如果需要在事務(wù)中執(zhí)行大批量數(shù)據(jù)更新,可以使用PolarDB-X 1.0 Hint語(yǔ)句/*TDDL:UNDO_LOG_LIMIT={number}*/調(diào)整限制值。

Deferred execution is only supported in Flexible or XA Transaction表示后置執(zhí)行功能僅僅在柔性事務(wù)與XA事務(wù)策略下可用。在用PolarDB-X 1.0 Hint語(yǔ)句/*TDDL:DEFER*/提交后置執(zhí)行語(yǔ)句之前,請(qǐng)先用SET drds_transaction_policy = ***命令更改事務(wù)策略。

TDDL-5002 ERR_TRANS_UNSUPPORTED

事務(wù)中的語(yǔ)法或功能尚不支持。

示例:

ERR-CODE: [TDDL-5002][ERR_TRANS_UNSUPPORTED] Table without primary keys is not
supported.

TDDL-5003 ERR_TRANS_LOG

無(wú)法訪問(wèn)事務(wù)日志。

示例:

ERR-CODE: [TDDL-5003][ERR_TRANS_LOG] Failed to update transaction state: *****

為保證分布式事務(wù)的原子性,PolarDB-X 1.0在事務(wù)中會(huì)訪問(wèn)后端RDS MySQL上的事務(wù)日志。如果PolarDB-X 1.0在讀寫事務(wù)日志時(shí)出錯(cuò),將返回TDDL-5003錯(cuò)誤。

產(chǎn)生TDDL-5003錯(cuò)誤的原因通常來(lái)自后端的RDS MySQL故障。建議檢查PolarDB-X 1.0后端RDS MySQL狀態(tài)和訪問(wèn)壓力。

TDDL-5004 ERR_TRANS_NOT_FOUND

事務(wù)ID不存在。

示例:
ERR-CODE: [TDDL-5008][ERR_TRANS_TERMINATED] Current transaction was killed 
or timeout. You may need to set a longer timeout value.          

如果事務(wù)在執(zhí)行中被Kill或者超時(shí)(執(zhí)行時(shí)間超出drds_transaction_timeout值),則出現(xiàn)該錯(cuò)誤。

如果是事務(wù)超時(shí)導(dǎo)致報(bào)錯(cuò),建議使用SET drds_transaction_timeout = ***命令修改事務(wù)的執(zhí)行時(shí)間上限,單位是毫秒。

TDDL-5006 ERR_TRANS_COMMIT

事務(wù)提交過(guò)程中出錯(cuò)。

示例:
ERR-CODE: [TDDL-5006][ERR_TRANS_COMMIT] Failed to commit primary group *****: 
*****, TRANS_ID = ***** 

PolarDB-X 1.0在提交事務(wù)分支過(guò)程中出錯(cuò),TRANS_ID對(duì)應(yīng)的事務(wù)將被自動(dòng)回滾。

產(chǎn)生TDDL-5006錯(cuò)誤的原因通常來(lái)自后端的RDS MySQL故障。建議檢查PolarDB-X 1.0后端RDS MySQL狀態(tài)和訪問(wèn)壓力。

TDDL-5007 ERR_TRANS_PARAM

事務(wù)參數(shù)不正確。

示例:
ERR-CODE: [TDDL-5007][ERR_TRANS_PARAM] Illegal timeout value: ***** 

命令中指定事務(wù)參數(shù)不正確,例如SET drds_transaction_timeout = ***指定的參數(shù)值是負(fù)數(shù)。

TDDL-5008 ERR_TRANS_TERMINATED

事務(wù)已Kill或超時(shí)中止。

示例:
ERR-CODE: [TDDL-5008][ERR_TRANS_TERMINATED] Current transaction was killed 
or timeout. You may need to set a longer timeout value.             

如果事務(wù)在執(zhí)行中被Kill或者超時(shí)(執(zhí)行時(shí)間超出drds_transaction_timeout值),則出現(xiàn)該錯(cuò)誤。

如果是事務(wù)超時(shí)導(dǎo)致報(bào)錯(cuò),建議使用SET drds_transaction_timeout = ***事務(wù)的執(zhí)行時(shí)間上限,單位是毫秒。