本文档列出了PolarDB-X 1.0返回的常见错误码及解决方法。

TDDL-4006 ERR_TABLE_NOT_EXIST

数据表不存在。

示例:

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

该错误表示PolarDB-X 1.0数据表不存在,或者由于未知原因PolarDB-X 1.0无法加载数据表的元数据信息。

TDDL-4007 ERR_CANNOT_FETCH_TABLE_META

PolarDB-X 1.0无法加载数据表的元数据信息。

示例:

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

该错误表示PolarDB-X 1.0尝试读取数据表的元数据信息失败。可能的错误原因如下:

  • 未创建数据表。
  • 分库上的表名被人为删除或改名。
  • 无法连接RDS MySQL。

出现该错误时,首先请检查表名是否存在,然后确认PolarDB-X 1.0后端所有RDS MySQL状态是否正常。

如果确定表名被人为删除或改名,可以通过RDS MySQL的数据恢复功能修复。

TDDL-4100 ERR_ATOM_NOT_AVALILABLE

PolarDB-X 1.0后端RDS MySQL暂时不可用。

示例:

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

如果PolarDB-X 1.0探测到后端某个RDS MySQL实例状态异常,会临时阻止访问该实例并提示TDDL-4100错误。当遇到该错误,请检查PolarDB-X 1.0后端所有RDS MySQL是否异常,并尝试进行恢复。

当RDS MySQL实例从异常状态恢复后,PolarDB-X 1.0将自动解除不可用状态,恢复应用正常访问。

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在处理请求时会向后端RDS MySQL异步创建连接。如果无法在等待时间内完成RDS MySQL连接创建,而异步任务又尚未返回错误原因,PolarDB-X 1.0会向应用返回TDDL-4101错误。

该错误通常是由后端RDS MySQL异常导致的。

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连接时出错,错误原因已经在ERR-CODE消息中给出。

常见PolarDB-X 1.0后端连接失败的原因如下:

  • 后端RDS MySQL连接数已满;
  • RDS MySQL连接超时;
  • 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.

该错误表示PolarDB-X 1.0后端连接池已满。导致TDDL-4103错误的常见原因如下:

  • 应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够。
  • 应用端没有关闭数据库连接,导致连接泄露。
  • 有很多跨库查询(例如聚合统计类查询或未带分库条件的查询)同时执行,占用大量连接。

解决方法建议如下:

  • 尽量使用框架访问数据库,如Spring JDBC、MyBatis等。
  • 按RDS性能分析报告与DBA建议优化业务SQL语句。
  • 使用PolarDB-X 1.0读写分离将跨库查询转发至读库处理。
  • 升级更高规格的RDS实例,提升后端处理能力。

TDDL-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW

PolarDB-X 1.0后端RDS MySQL连接创建太慢。

示例:

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异步创建连接时,如果短时间内创建大量连接,或者RDS MySQL建立连接速度太慢,会出现等待超时。

该问题通常是由后端RDS MySQL压力过大或异常导致的,建议使用PolarDB-X 1.0读写分离,或者升级更高规格的RDS实例,减轻后端处理压力。

如果问题是由于短时间内创建大量连接导致,请调整PolarDB-X 1.0最小连接数。

TDDL-4105 ERR_ATOM_ACCESS_DENIED

PolarDB-X 1.0后端RDS MySQL拒绝创建连接。

示例:

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

该错误表明PolarDB-X 1.0通过用户名和密码连接RDS MySQL时被拒绝访问。

如果不小心在后端RDS MySQL上修改了由PolarDB-X 1.0自动创建的用户名或密码,就会导致PolarDB-X 1.0提示TDDL-4105错误。修复该问题需要手工订正PolarDB-X 1.0的用户名或密码。

此外,后端RDS实例欠费或到期后会拒绝所有访问请求,也会导致PolarDB-X 1.0产生TDDL-4105错误。如果遇到这种情况,请及时给RDS实例续费。

TDDL-4106 ERR_ATOM_DB_DOWN

PolarDB-X 1.0后端RDS MySQL无法连接。

示例:

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.

该错误表示PolarDB-X 1.0向后端RDS MySQL创建连接超时或没有响应。

TDDL-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW

变量(variable)不允许被设置为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语句设置成NULL值。遇到这种情况,PolarDB-X 1.0会提示TDDL-4108错误。

如果遇到该错误,请检查传递的变量(variable)值,并参考MySQL官方文档改正,详情请参见 MySQL官网

TDDL-4200 ERR_GROUP_NOT_AVALILABLE

PolarDB-X 1.0分库暂时不可用。

示例:

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 *****.

当分库包含的RDS MySQL实例出现访问异常,并且分库下没有其他可用实例时,PolarDB-X 1.0会将分库置于fail-fast状态并提示TDDL-4200错误。

通常该错误是由于RDS MySQL故障导致的。请根据包含的RDS MySQL实例异常信息定位和解决问题。当故障RDS MySQL实例恢复后,PolarDB-X 1.0将自动取消fail-fast状态。

TDDL-4201 ERR_GROUP_NO_ATOM_AVALILABLE

PolarDB-X 1.0分库内暂时没有可用RDS MySQL实例。

示例:

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

当分库包含的RDS MySQL实例全都不可用,或者处于fail-fast状态时,PolarDB-X 1.0会提示TDDL-4201错误。

通常该错误是由于RDS MySQL故障导致。请检查后端RDS MySQL实例状态以定位和解决问题。

TDDL-4202 ERR_SQL_QUERY_TIMEOUT

PolarDB-X 1.0查询超时。

示例:

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.

该错误表示SQL语句在后端RDS MySQL实例上的执行时间超过PolarDB-X 1.0设置的socketTimeout参数限制。默认的PolarDB-X 1.0超时(socketTimeout)时间设置是900秒。

建议优化SQL语句,以及在后端RDS MySQL上创建适合的索引以提升SQL语句的执行性能。

如果优化后的SQL语句仍然执行较慢,可以参考如下PolarDB-X 1.0 Hint语法临时设置超时时间:

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

其中SOCKET_TIMEOUT设置的单位是毫秒。

关于PolarDB-X 1.0 Hint,详情请参见自定义SQL超时时间

TDDL-4203 ERR_SQL_QUERY_MERGE_TIMEOUT

分布式查询超时。

示例:

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执行分布式查询超时,默认的超时设置是900秒。

产生TDDL-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒,建议进行如下优化:

  • 尽量在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行。
  • 检查是否可以在后端RDS MySQL上创建适合的索引,提升扫描各个分库数据的性能。
  • 设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低数据合并阶段的消耗。

如果优化后的SQL语句仍然执行较慢,可以使用下面的Hint语法临时设置PolarDB-X 1.0的超时时间:

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

其中SOCKET_TIMEOUT设置的单位是毫秒。

关于PolarDB-X 1.0 Hint,详情请参见自定义SQL超时时间

TDDL-4400 ERR_SEQUENCE

处理Sequence(全局唯一序列)失败。

示例:

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

该错误表示处理Sequence出错,错误信息在Sequence :中给出。

导致该错误的常见原因是RDS MySQL故障,无法访问Sequence有关的数据表。建议先检查后端RDS MySQL状态。

TDDL-4401 ERR_MISS_SEQUENCE

Sequence不存在。

示例:

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

命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X 1.0中所有已创建的Sequence名称,并且选择正确的Sequence名称。

如果使用的Sequence尚不存在,可以用CREATE SEQUENCE语法创建:

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

关于Sequence,详情请参见Sequence

TDDL-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB

Sequence使用的数据表不存在。

示例:

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

无法在后端的数据库里访问名称为sequence或者sequence_opt的数据表。

TDDL-4404 ERR_SEQUENCE_TABLE_META

Sequence数据表结构错误。

示例:

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

Sequence相关数据表(如sequencesequence_opt)中缺少相应的字段。

TDDL-4405 ERR_INIT_SEQUENCE_FROM_DB

初始化Sequence错误。

示例:

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

在初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。

建议先检查后端RDS MySQL状态。

TDDL-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE

访问Sequence数据表出错。

示例:

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

在访问Sequence相关数据表(如sequencesequence_opt)时发生错误。错误信息在error when build sequence:后给出。

建议先检查后端RDS MySQL状态。

DDL-4408 ERR_SEQUENCE_NEXT_VALUE

获取Sequence值出错。

示例:

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语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。

产生TDDL-4408错误的原因一般来自后端的RDS MySQL故障。建议先检查后端RDS MySQL状态和访问压力。

TDDL-4500 ERR_PARSER

解析SQL语句失败。

示例:

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

PolarDB-X 1.0支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X 1.0兼容的SQL语法标准及MySQL规范。

关于SQL标准语法,请参见SQL标准语法

关于PolarDB-X 1.0兼容的SQL语法,请参见SQL使用限制

TDDL-4501 ERR_OPTIMIZER

优化器转换SQL语句失败。

示例:

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

PolarDB-X 1.0优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生TDDL-4501错误。

建议按照optimize error by:后的提示检查和调整您的SQL语句。

TDDL-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT

ORDER BY包含的函数列在SELECT子句中不存在。

示例:

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

当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X 1.0要求同样的函数列必须也在SELECT子句中出现,否则提示TDDL-4502错误。

建议在SELECT子句中添加相应的函数列。

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在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示TDDL-4504错误。

建议调整SQL语句,在WHERE子句中补全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语句修改拆分键(sharding key)的值。由于更新操作很可能会改变数据所在的分片,PolarDB-X 1.0无法保证操作的原子性与数据的一致性。

建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。

TDDL-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN

无法执行合并排序JOIN。

示例:

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

如果SQL语句中需要JOIN的数据表分别来自不同的RDS MySQL实例,PolarDB-X 1.0会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则将提示TDDL-4508错误。

建议调整SQL语句,在JOINWHERE部分添加相应的关联条件。

TDDL-4509 ERR_OPTIMIZER_ERROR_HINT

Hint语法错误。

示例:

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

该错误表示SQL语句中的Hint语法无法被PolarDB-X 1.0解析。更多关于Hint语法信息,请参见Hint简介

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拆分表没有开启全表扫描(full-table scan)功能,则访问该表时必须在WHERE子句中包含拆分键条件。否则,将提示TDDL-4510错误。

PolarDB-X 1.0在建表时默认开启全表扫描功能。如果手工关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。

TDDL-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY

INSERT语句缺少拆分键 (sharding key)。

示例:

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

当INSERT语句的目标是一张PolarDB-X 1.0拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,将提示TDDL-4511错误。

如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。

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支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示TDDL-4515错误。

您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES x命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X 1.0,请设置数据库连接参数characterEncoding

TDDL-4516 ERR_TRUNCATED_DOUBLE_VALUE_OVERFLOW

浮点数转换为整数溢出。

示例:

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

PolarDB-X 1.0将浮点数转换成对应类型的整数时,结果超过了整数类型的取值范围。建议检查SQL语句中的字段类型和输入参数。

TDDL-4517 ERR_MODIFY_SYSTEM_TABLE

禁止修改系统表。

示例:

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

PolarDB-X 1.0内部维护了一些系统表,使用SQL语句更新其中的数据会提示TDDL-4517错误。

限制的系统表包括sequencesequence_opttxc_undo_log__DRDS__SYSTEM__LOCK__,请避免在业务或数据库设计中使用这些表名。

TDDL-4518 ERR_VALIDATE

元数据校验失败。

示例:

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

SQL发送到PolarDB-X 1.0计算节点上,会基于现有的元信息做校验,这个异常说明查询的表或者列等信息不符合现有元信息要求。

TDDL-4600 ERR_FUNCTION

错误的函数调用。

示例:

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

该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,并且使用正确的参数个数和类型调用函数。

TDDL-4601 ERR_EXECUTOR

SQL执行过程出错。

示例:

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

该错误代表PolarDB-X 1.0在执行SQL语句过程中出现了意外错误。这类错误通常与后端RDS MySQL异常状态有关。

TDDL-4602 ERR_CONVERTOR

错误的类型转换。

示例:

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

该错误表明PolarDB-X 1.0在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。

TDDL-4603 ERR_ACCROSS_DB_TRANSACTION

跨库事务失败。

示例:

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默认仅支持单库事务,即事务中的所有SQL语句都必须按规则转发到相同RDS MySQL分库执行。否则,将提示TDDL-4603错误。

TDDL-4604 ERR_CONCURRENT_TRANSACTION

嵌套事务失败。

示例:

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

PolarDB-X 1.0不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示TDDL-4604错误。

建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。

TDDL-4606 ERR_QUERY_C

当前执行的SQL被取消。

示例:

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

使用KILL x取消某条正在执行的SQL语句时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。

TDDL-4607 ERR_INSERT_WHEN_UPDATE

INSERT DELETE方式执行UPDATE语句时出错。

示例:

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

开启允许更新分库键(Sharding-key)功能后,PolarDB-X 1.0可以将UPDATE分库键值的SQL语句按照INSERT+DELETE方式转换执行。如果执行失败,则提示TDDL-4607错误。

该错误通常是因为后端RDS MySQL故障导致的。建议首先检查RDS MySQL状态。

TDDL-4610 ERR_CONNECTION_CLOSED

连接已经关闭。

示例:

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

当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示TDDL-4610错误。

建议在该情况下关闭连接,重新获取一个新的数据库连接。

TDDL-4636 ERR_DDL_JOB_ERROR

DDL语句执行失败。

示例:

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

该错误码表示DDL语句执行失败,处理方法请参见如何处理DDL异常

TDDL-4642 ERR_UNKNOWN_TABLE

数据库中不存在这张表。

示例:

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

请检查当前数据库中是否有这张表。

TDDL-1305 ERR_UNKNOWN_SAVEPOINT

指定名称的SAVEPOINT不存在。

示例:

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

PolarDB-X 1.0上执行ROLLBACK TO SAVEPOINT x或者RELEASE SAVEPOINT x命令时,如果指定的SAVEPOINT名称不存在,会提示TDDL-1305错误。

建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。

TDDL-1094 ERR_UNKNOWN_THREAD_ID

KILL命令指定的会话ID不存在。

示例:

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

PolarDB-X 1.0上执行KILL x命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示TDDL-1094错误。

建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只使用返回的ID执行KILL操作。

TDDL-4612 ERR_CHECK_SQL_PRIV

由于权限不够,SQL语句无法执行。

示例:

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

PolarDB-X 1.0支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X 1.0将提示TDDL-4612错误。

建议检查用户拥有的PolarDB-X 1.0权限。如果权限不足,请在PolarDB-X 1.0控制台设置。

TDDL-4613 ERR_INSERT_SELECT

执行INSERT ... SELECT语句出错。

示例:

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

PolarDB-X 1.0支持将跨库的INSERT ... SELECT语句拆分成独立的SELECT和INSERT语句批量执行。如果执行失败,则提示TDDL-4613错误。

该错误通常是因为后端RDS MySQL故障导致的。建议首先检查RDS MySQL状态。

TDDL-4614 ERR_EXECUTE_ON_MYSQL

SQL语句在RDS MySQL上执行报错。

示例:

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数据库上执行SQL语句报错,末尾包含了从RDS MySQL返回的原始错误信息,例如:
  • Duplicate entry '*****' for key 'PRIMARY'表示写入RDS MySQL数据表发生了主键冲突。
  • The table '*****' is full表示RDS MySQL使用的临时表已满,需要调整临时表空间或优化SQL语句。
  • Deadlock found when trying to get lock;表示在RDS MySQL中出现了死锁,通常是数据写入存在较多事务冲突导致的。

建议参考TDDL-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL(5.6)文档

TDDL-4615 ERR_CROSS_JOIN_SIZE_PROTECTION

分布式JOIN返回的数据行数超出限制。

示例:

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

PolarDB-X 1.0以嵌套循环(Nested-loop)方式执行分布式JOIN语句时,如果从右表返回大量数据,将严重占据内存,影响PolarDB-X 1.0服务的稳定性。因此,PolarDB-X 1.0限制这种情况下右表返回的数据行数最多不能超过5000。如果超出这一限制,PolarDB-X 1.0会提示TDDL-4615错误。

建议优化SQL语句避免从右表返回大量数据,或者让PolarDB-X 1.0能够使用更好的算法(如合并排序Sort-merge Join)执行分布式JOIN。

如果需要针对某个具体SQL调整该值,建议按以下原则操作:
  • 如果单条记录超过100K,不建议调整该值。
  • 如果单条记录不超过100K,可以适当调整。建议不要设置太大的值,否则会有爆内存的风险。
  • 假设单条记录是100K,参与分布式JOIN计算的内存就需要500M(100K*5000)。如果有多个连接都在运行该SQL,很容易引起爆内存,例如有5个连接同时在运行该SQL,就需要2.5G(500M*5)的内存。
  • 如果确实需要调整,请在需要调整的SQL前面加HINT,例如调整成5100:/*!TDDL:MAX_ROW_RETURN_FROM_RIGHT_INDEX_NESTED_LOOP=5100*/SQL

TDDL-4616 ERR_UNKNOWN_DATABASE

错误的数据库。

示例:

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

PolarDB-X 1.0允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X 1.0提供的数据库名称不一致,将返回TDDL-4616错误。

建议修改DDL语句中的数据库名称,确保与PolarDB-X 1.0数据库名称一致。

TDDL-4617 ERR_SUBQUERY_LIMIT_PROTECTION

子查询返回的数据行数超出限制。

示例:

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

PolarDB-X 1.0执行含子查询(Sub-query)的SQL语句时,如果子查询返回大量数据,会严重占据内存,影响PolarDB-X 1.0服务的稳定性。因此,PolarDB-X 1.0限制这种情况下子查询返回的数据行数最多不能超过20000。如果超出这一限制,PolarDB-X 1.0会返回TDDL-4617错误。

建议优化SQL语句中的子查询避免返回大量数据。或者设法将子查询改写成JOIN形式,让PolarDB-X 1.0能够使用更好的算法(如合并排序Sort-merge Join)执行。

TDDL-4800 ERR_SET_TXCID

执行SET TXC_ID x命令失败。

示例:

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

TDDL-4801 ERR_TXCID_NULL

执行SELECT LAST_TXC_ID返回NULL。

示例:

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

TDDL-4802 ERR_SELECT_LAST_TXCID

执行SELECT LAST_TXC_ID命令失败。

示例:

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

TDDL-4994 ERR_FLOW_CONTROL

流量控制。

示例:

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

该错误代表PolarDB-X 1.0处理SQL请求已达到内部流量上限,当前请求被拒绝。

建议检查SQL请求量是否存在异常峰值。

TDDL-4998 ERR_NOT_SUPPORT

不支持的特性。

示例:

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

该错误表示使用的SQL语法或者功能PolarDB-X 1.0尚不支持。

TDDL-5001 ERR_TRANS

一般性的事务错误。

示例:

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

请参考错误信息处理,Too many lines updated in statement表示事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-X 1.0 Hint语句/*TDDL:UNDO_LOG_LIMIT={number}*/调整限制值。

Deferred execution is only supported in Flexible or XA Transaction表示后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X 1.0 Hint语句/*TDDL:DEFER*/提交后置执行语句之前,请先用SET drds_transaction_policy = ***命令更改事务策略。

TDDL-5002 ERR_TRANS_UNSUPPORTED

事务中的语法或功能尚不支持。

示例:

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

TDDL-5003 ERR_TRANS_LOG

无法访问事务日志。

示例:

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

为保证分布式事务的原子性,PolarDB-X 1.0在事务中会访问后端RDS MySQL上的事务日志。如果PolarDB-X 1.0在读写事务日志时出错,将返回TDDL-5003错误。

产生TDDL-5003错误的原因通常来自后端的RDS MySQL故障。建议检查PolarDB-X 1.0后端RDS MySQL状态和访问压力。

TDDL-5004 ERR_TRANS_NOT_FOUND

事务ID不存在。

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

如果事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。

如果是事务超时导致报错,建议使用SET drds_transaction_timeout = ***命令修改事务的执行时间上限,单位是毫秒。

TDDL-5006 ERR_TRANS_COMMIT

事务提交过程中出错。

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

PolarDB-X 1.0在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。

产生TDDL-5006错误的原因通常来自后端的RDS MySQL故障。建议检查PolarDB-X 1.0后端RDS MySQL状态和访问压力。

TDDL-5007 ERR_TRANS_PARAM

事务参数不正确。

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

命令中指定事务参数不正确,例如SET drds_transaction_timeout = ***指定的参数值是负数。

TDDL-5008 ERR_TRANS_TERMINATED

事务已Kill或超时中止。

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

如果事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。

如果是事务超时导致报错,建议使用SET drds_transaction_timeout = ***事务的执行时间上限,单位是毫秒。