当前位置: 首页 > 工具软件 > db-meta > 使用案例 >

mysql的错误码4506_错误代码_常见问题_PolarDB-X 云原生分布式数据库 - 阿里云

赫连方伟
2023-12-01

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

TDDL-4006 ERR_TABLE_NOT_EXIST

PolarDB-X数据表不存在。

示例:

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

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

如果出现该错误,请联系客服或提工单。

TDDL-4007 ERR_CANNOT_FETCH_TABLE_META

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

示例:

ERR-CODE:[TDDL-4007][ERR_CANNOT_FETCH_TABLE_META]Table'*****'metadata

cannot be fetched becauseTable'*****.*****'doesn't exist.

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

数据表未创建。

分库上的表名被人为删除或改名。

RDS MySQL无法连接。

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

如果确定表名被人为删除或改名,可以通过RDS MySQL的数据恢复功能修复。如果仍无法修复,请联系客服或提工单解决此问题。

TDDL-4100 ERR_ATOM_NOT_AVALILABLE

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

示例:

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

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

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

TDDL-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON

未知原因的PolarDB-X后端连接获取失败。

示例:

ERR-CODE:[TDDL-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON]Get

connectionfordb'*****'frompool failed.AppName:*****,Env:*****,

UnitName:null.Messagefrompool:wait millis5000,active0,maxActive5.

Youshould lookforthe following logs which contains the real reason.

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

该错误通常是由后端RDS MySQL异常导致的。如果排除RDS MySQL问题后仍然出现该错误,请联系客服或提工单。

TDDL-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON

已知原因的PolarDB-X后端连接获取失败。

示例:

ERR-CODE:[TDDL-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON]Get

connectionfordb'*****'failed because wait millis5000,active0,

maxActive5

PolarDB-X获取后端RDS MySQL连接时出错,错误原因已经在ERR-CODE:消息中给出。

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

后端RDS MySQL连接数已满

RDS MySQL连接超时

RDS MySQL拒绝连接

如果排除后端RDS MySQL问题后仍然出现该错误,请联系客服或提工单。

TDDL-4103 ERR_ATOM_CONNECTION_POOL_FULL

PolarDB-X后端RDS MySQL连接池已满。

示例:

ERR-CODE:[TDDL-4103][ERR_ATOM_CONNECTION_POOL_FULL]Poolof DB'*****'is

full.Messagefrompool:wait millis5000,active5,maxActive5.

AppName:*****,Env:*****,UnitName:null.

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

应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够。

应用端没有关闭数据库连接,导致连接泄露。

有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。

解决方法建议如下:

尽量使用框架访问数据库,如Spring JDBC、MyBatis等。

按RDS性能分析报告与DBA建议优化业务SQL语句。

使用PolarDB-X读写分离将跨库查询转发至读库处理。

升级更高规格的RDS实例,提升后端处理能力。

联系客服或提工单调整PolarDB-X后端连接数。

TDDL-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW

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

示例:

ERR-CODE:[TDDL-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW]Getconnection

fordb'*****'frompool timeout.AppName:*****,Env:*****,UnitName:null.

Messagefrompool:wait millis5000,active3,maxActive5.

PolarDB-X向后端RDS MySQL异步创建连接时,如果在短时间创建大量连接,或者RDS MySQL建立连接速度太慢,会出现等待超时。

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

如果排除RDS MySQL问题后仍然出现该错误,请联系客服或提工单。

如果问题是由短时间创建大量连接导致,考虑联系客服或提工单调整PolarDB-X最小连接数。

TDDL-4105 ERR_ATOM_ACCESS_DENIED

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

示例:

ERR-CODE:[TDDL-4105][ERR_ATOM_ACCESS_DENIED]DB'*****'Accessdeniedfor

user'*****'@'*****'.AppName:*****,Env:*****,UnitName:null.Please

contact DBA to check.

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

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

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

TDDL-4106 ERR_ATOM_DB_DOWN

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

示例:

ERR-CODE:[TDDL-4106][ERR_ATOM_DB_DOWN]DB'*****'cannot be connected.

AppName:*****,Env:*****,UnitName:null.Itseems a very real possibility

thatthisDB IS DOWN.Pleasecontact DBA to check.

该错误表示PolarDB-X向后端RDS MySQL创建连接超时或没有响应。遇到该错误的通常原因是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''tsettonullfornow;

有些MySQL变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示TDDL-4108错误。

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

TDDL-4200 ERR_GROUP_NOT_AVALILABLE

PolarDB-X分库暂时不可用。

示例:

ERR-CODE:[TDDL-4200][ERR_GROUP_NOT_AVALILABLE]TheTDDLGroup*****is

runninginfail-fast status,causedbythisSQL:*****which threw a fatal

exceptionas*****.

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

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

如果RDS MySQL故障解决后仍然出现TDDL-4200错误,请联系客服或提工单。

TDDL-4201 ERR_GROUP_NO_ATOM_AVALILABLE

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

示例:

ERR-CODE:[TDDL-4201][ERR_GROUP_NO_ATOM_AVALILABLE]Allweights ofDBsin

Group'*****'is0.Weightsis:*****.

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

通常该错误是由于RDS MySQL故障导致的。请检查后端RDS MySQL实例状态以定位和解决问题。如果故障解决后仍然出现TDDL-4201错误,请联系客服或提工单。

TDDL-4202 ERR_SQL_QUERY_TIMEOUT

PolarDB-X查询超时。

示例:

ERR-CODE:[TDDL-4202][ERR_SQL_QUERY_TIMEOUT]Slowquery 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设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。

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

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

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

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

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

如果需要永久调整PolarDB-X超时设置,请联系客服或提工单。

TDDL-4203 ERR_SQL_QUERY_MERGE_TIMEOUT

PolarDB-X分布式查询超时。

示例:

ERR-CODE:[TDDL-4203][ERR_SQL_QUERY_MERGE_TIMEOUT]Slowsql query leads to

a timeout exception during merging results,please optimize the slow sql.

Thethedefaulttimeoutis***ms.DBis*****

该错误表示PolarDB-X执行分布式查询超时,默认的超时设置是900秒。

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

尽量在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行。

检查是否可以在后端RDS MySQL上创建适合的索引,提升扫描各个分库数据的性能。

设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。

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

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

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

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

如果仍然出现TDDL-4203错误,请联系客服或提工单。

TDDL-4400 ERR_SEQUENCE

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

示例:

ERR-CODE:[TDDL-4400][ERR_SEQUENCE]Sequence:AlldataSource faild toget

value!

处理PolarDB-X Sequence出错,错误信息在Sequence :中给出。

导致TDDL-4400的常见原因是RDS MySQL故障,无法访问Sequence有关的数据表。建议先检查后端RDS MySQL状态。如果排除RDS MySQL故障后仍然发生错误,请联系客服或提工单。

TDDL-4401 ERR_MISS_SEQUENCE

Sequence不存在。

示例:

ERR-CODE:[TDDL-4401][ERR_MISS_SEQUENCE]Sequence'*****'isnotfound

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

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

CREATE SEQUENCE[START WITH]

[INCREMENT BY][MAXVALUE]

[CYCLE|NOCYCLE]`

如果使用的Sequence已经存在,但是仍然提示TDDL-4401错误,请联系客服或提工单。

关于PolarDB-X Sequence,详情请参见PolarDB-X Sequence介绍。

TDDL-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB

Sequence使用的数据表不存在。

示例:

ERR-CODE:[TDDL-4403][ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB]Sequencetable

isnotindefaultdb.

无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表。请联系客服或者提工单解决此问题。

TDDL-4404 ERR_SEQUENCE_TABLE_META

Sequence数据表结构错误。

示例:

ERR-CODE:[TDDL-4404][ERR_SEQUENCE_TABLE_META]the meta of sequence table

iserror,some columns missed

Sequence相关数据表(如sequence或sequence_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:后给出。

建议先检查PolarDB-X后端RDS MySQL状态。如果排除RDS MySQL故障后仍然提示TDDL-4405错误,请联系客服或提工单。

TDDL-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE

访问Sequence数据表出错。

示例:

ERR-CODE:[TDDL-4407][ERR_OTHER_WHEN_BUILD_SEQUENCE]errorwhenbuild

sequence:*****

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

建议先检查PolarDB-X后端RDS MySQL状态。如果排除RDS MySQL故障后仍然提示TDDL-4407错误,请联系客服或提工单。

TDDL-4408 ERR_SEQUENCE_NEXT_VALUE

获取Sequence值出错。

示例:

ERR-CODE:[TDDL-4408][ERR_SEQUENCE_NEXT_VALUE]errorwhengetsequence's

next value, sequence is: *****, error: *****

使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。

通常产生TDDL-4408错误的原因来自后端的RDS MySQL故障。建议先检查PolarDB-X后端RDS MySQL状态和访问压力。如果排除RDS MySQL故障后仍然提示TDDL-4408错误,请联系客服或提工单。

TDDL-4500 ERR_PARSER

解析SQL语句失败。

示例:

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

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

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

关于PolarDB-X兼容的SQL语法,请参见SQL兼容性。

关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。

如果您的SQL语句符合上述语法仍然提示TDDL-4500错误,请联系客服或提工单。

TDDL-4501 ERR_OPTIMIZER

优化器转换SQL语句失败。

示例:

ERR-CODE:[TDDL-4501][ERR_OPTIMIZER]optimize errorby:Unknowncolumn

'*****'in'order clause'

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

建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示TDDL-4501错误,请联系客服或提工单。

TDDL-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT

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

示例:

ERR-CODE:[TDDL-4502][ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT]Syntax

Error:orderBy/GroupByColumn*****isnotexistedinselectclause`

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

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

TDDL-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN

相同表JOIN的条件不足。

示例:

ERR-CODE:[TDDL-4504][ERR_OPTIMIZER_SELF_CROSS_JOIN]selfcross joincase,

add shard column filter on right table

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

建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。

TDDL-4506 ERR_MODIFY_SHARD_COLUMN

禁止更新拆分键。

示例:

ERR-CODE:[TDDL-4506][ERR_MODIFY_SHARD_COLUMN]Column'*****'isa sharding

key of table'*****',whichisforbidden to be modified.

PolarDB-X禁止使用UPDATE语句修改拆分键(sharding key)的值。由于这一操作很可能会改变数据所在的分片,PolarDB-X无法保证操作的原子性与数据的一致性。

建议将对应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

joinisnotallowedwhenmissing equivalent filter

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

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

TDDL-4509 ERR_OPTIMIZER_ERROR_HINT

Hint语法错误。

示例:

ERR-CODE:[TDDL-4509][ERR_OPTIMIZER_ERROR_HINT]HintSyntaxError:

unexpected operation:*****.

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

TDDL-4510 ERR_CONTAINS_NO_SHARDING_KEY

缺少拆分键(sharding key)条件。

示例:

ERR-CODE:[TDDL-4510][ERR_CONTAINS_NO_SHARDING_KEY]YourSQL contains NO

SHARDING KEY'*****'fortable'*****',whichisnotallowedinDEFAULT.

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

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

TDDL-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY

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

示例:

ERR-CODE:[TDDL-4511][ERR_INSERT_CONTAINS_NO_SHARDING_KEY]YourINSERT SQL

contains NO SHARDING KEY'*****'fortable'*****'.

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

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

TDDL-4515 ERR_CONNECTION_CHARSET_NOT_MATCH

输入字符集不匹配。

示例:

ERR-CODE:[TDDL-4515][ERR_CONNECTION_CHARSET_NOT_MATCH]CausedbyMySQL's

character_set_connection doesn't match your input charset.PartitionDDL can

only take ASCIIorchinese column name.Ifyou wantusechinese tableor

column name,MakesureMySQLconnection's charset support chinese character.

Use "set names xxx" to set correct charset.

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

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

TDDL-4516 ERR_TRUNCATED_DOUBLE_VALUE_OVERFLOW

浮点数转换为整数溢出。

示例:

ERR-CODE:[TDDL-4616][ERR_TRUNCATED_DOUBLE_VALUE_OVERFLOW]Truncated

incorrect DOUBLE value'*****'over column[*****]'s value range.

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

TDDL-4517 ERR_MODIFY_SYSTEM_TABLE

禁止修改系统表。

示例:

ERR-CODE:[TDDL-4617][ERR_MODIFY_SYSTEM_TABLE]Table'*****'isPolarDB-XSYSTEM

TABLE,whichisforbidden to be modified.

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

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

TDDL-4600 ERR_FUNCTION

错误的函数调用。

示例:

ERR-CODE:[TDDL-4600][ERR_FUNCTION]functioncompute errorbyIncorrect

parameter countinthe call tonativefunction'*****'

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

TDDL-4601 ERR_EXECUTOR

SQL执行过程出错。

示例:

ERR-CODE:[TDDL-4601][ERR_EXECUTOR]only one columnissupportedin

distinct aggregate

该错误代表PolarDB-X在执行SQL语句过程中出现了意外错误。这类错误通常与后端RDS MySQL异常状态有关。建议先检查后端RDS MySQL,如果排除RDS MySQL故障后仍然发生此类错误,请联系客服或提工单。

TDDL-4602 ERR_CONVERTOR

错误的类型转换。

示例:

ERR-CODE:[TDDL-4602][ERR_CONVERTOR]convertor errorbyUnsupportedconvert:

[*****]

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

TDDL-4603 ERR_ACCROSS_DB_TRANSACTION

跨库事务失败。

示例:

ERR-CODE:[TDDL-4603][ERR_ACCROSS_DB_TRANSACTION]Transactionaccross dbis

notsupportedincurrent transaction policy,transaction nodeis:{0},but

thissql execute on:*****.

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

TDDL-4604 ERR_CONCURRENT_TRANSACTION

嵌套事务失败。

示例:

ERR-CODE:[TDDL-4604][ERR_CONCURRENT_TRANSACTION]Concurrentqueryisnot

supported on transactiongroup,transactiongroupis:{0}.

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

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

TDDL-4606 ERR_QUERY_CANCLED

当前执行的SQL被取消。

示例:

ERR-CODE:[TDDL-4606][ERR_QUERY_CANCLED]Gettingconnectionisnotallowed

whenquery has been cancled,groupis*****

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

TDDL-4607 ERR_INSERT_WHEN_UPDATE

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

示例:

ERR-CODE:[TDDL-4607][ERR_INSERT_WHEN_UPDATE]Insertnewvalues error,

tableis:*****,oldValues:*****,newValues:*****

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

该错误通常是因为后端RDS MySQL故障导致的。建议首先检查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-1305 ERR_UNKNOWN_SAVEPOINT

指定名称的SAVEPOINT不存在。

示例:

ERR-CODE:[TDDL-1305][ERR_UNKNOWN_SAVEPOINT]SAVEPOINT*****doesnotexist

在PolarDB-X上执行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]Unknownthread id:*****

在PolarDB-X上执行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的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示TDDL-4612错误。

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

关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统。

TDDL-4613 ERR_INSERT_SELECT

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

示例:

ERR-CODE:[TDDL-4613][ERR_INSERT_SELECT]insert error,tableis:*****,

values:*****

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

该错误通常是因为后端RDS MySQL故障导致的。建议首先检查RDS MySQL状态,如果排除RDS MySQL故障后仍然发生错误,请联系客服或提工单。

TDDL-4614 ERR_EXECUTE_ON_MYSQL

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

示例:

ERR-CODE:[TDDL-4614][ERR_EXECUTE_ON_MYSQL]Erroroccurswhenexecute on

GROUP'*****':Duplicateentry'*****'forkey'PRIMARY'

PolarDB-X在后端RDS MySQL数据库上执行SQL语句报错,末尾包含了从RDS MySQL返回的原始错误信息,例如:

Duplicateentry'*****'forkey'PRIMARY'

代表写入RDS MySQL数据表发生了主键冲突。

Thetable'*****'isfull

表示RDS MySQL使用的临时表已满,需要调整临时表空间或优化SQL语句。

Deadlockfoundwhentrying togetlock;

代表在RDS MySQL中出现了死锁,通常是数据写入存在较多事务冲突导致的。

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

如果排除应用或RDS MySQL问题后仍然发生TDDL-4614错误,请联系客服或提工单。

TDDL-4615 ERR_CROSS_JOIN_SIZE_PROTECTION

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

示例:

ERR-CODE:[TDDL-4615][ERR_CROSS_JOIN_SIZE_PROTECTION]across join table

size protection,check your sqlorenlarge the limination size.

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

建议优化SQL语句避免从右表返回大量数据,或者让PolarDB-X能够使用更好的算法(如合并排序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]Unknowndatabase'*****'

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

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

TDDL-4617 ERR_SUBQUERY_LIMIT_PROTECTION

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

示例:

ERR-CODE:[TDDL-4617][ERR_SUBQUERY_LIMIT_PROTECTION]Thenumber of rows

returnedbythe subquery exceeds the maximum number of20000.

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

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

如果需要修改这一限制,可以联系客服或者提工单。

TDDL-4800 ERR_SET_TXCID

执行SET TXC_XID x命令失败。

示例:

ERR-CODE:[TDDL-4800][ERR_SET_TXCID]settxc_id failed:*****

具体原因请参见GTS文档产品概述。

TDDL-4801 ERR_TXCID_NULL

执行SELECT LAST_TXC_ID命令返回null。

示例:

ERR-CODE:[TDDL-4801][ERR_TXCID_NULL]txc_xidisnull:*****

具体原因请参见GTS文档产品概述。

TDDL-4802 ERR_SELECT_LAST_TXCID

执行SELECT LAST_TXC_ID命令失败。

示例:

ERR-CODE:[TDDL-4802][ERR_SELECT_LAST_TXCID]selectlast_txc_xid failed:

*****

具体原因请参见GTS文档产品概述。

TDDL-4994 ERR_FLOW_CONTROL

流量控制。

示例:

ERR-CODE:[TDDL-4994][ERR_FLOW_CONTROL][*****]flow controlby*****

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

建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示TDDL-4994错误,请联系客服或提工单。

TDDL-4998 ERR_NOT_SUPPORT

不支持的特性。

示例:

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

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

如果这些SQL语法或者功能对您十分重要,欢迎联系客服或者提工单给出建议。

TDDL-5001 ERR_TRANS

一般性的事务错误。

示例:

ERR-CODE:[TDDL-5001][ERR_TRANS]Toomany lines updatedinstatement.

请参见错误信息处理,例如:

Toomany lines updatedinstatement

事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-X Hint/*TDDL:UNDO_LOG_LIMIT={number}*/调整限制值。

Deferredexecutionisonly supportedinFlexibleorXATransaction

后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X Hint/*TDDL:DEFER*/提交后置执行语句之前,请先用SET drds_transaction_policy = ***命令更改PolarDB-X事务策略。

其他错误信息,请联系客服或者提工单。

TDDL-5002 ERR_TRANS_UNSUPPORTED

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

示例:

ERR-CODE:[TDDL-5002][ERR_TRANS_UNSUPPORTED]Tablewithout primary keysisnot

supported.

功能在PolarDB-X事务中尚不支持。

如果此功能很重要,请联系客服或者提工单给我们建议。

TDDL-5003 ERR_TRANS_LOG

无法访问事务日志。

示例:

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

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

产生TDDL-5003错误的原因通常来自后端的RDS MySQL故障。建议检查PolarDB-X后端RDS MySQL状态和访问压力。如果排除RDS MySQL问题后仍然产生TDDL-5003错误,请联系客服或提工单。

TDDL-5004 ERR_TRANS_NOT_FOUND

事务ID不存在。

示例:

ERR-CODE:[TDDL-5004][ERR_TRANS_NOT_FOUND]Transactionnotfound.

在KILL TRANS 或者RECOVER 命令中指定的事务ID不存在。

TDDL-5005 ERR_TRANS_FINISHED

事务已结束。

示例:

ERR-CODE:[TDDL-5005][ERR_TRANS_FINISHED]Operationnotallowed.Transaction

finished.

在KILL TRANS 或者RECOVER 命令中指定的事务ID已经结束提交或者回滚,无法继续执行管理操作。

TDDL-5006 ERR_TRANS_COMMIT

事务提交过程中出错。

示例:

ERR-CODE:[TDDL-5006][ERR_TRANS_COMMIT]Failedto commit primarygroup*****:

*****,TRANS_ID=*****

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

产生TDDL-5006错误的原因通常来自后端的RDS MySQL故障。建议检查PolarDB-X后端RDS MySQL状态和访问压力。如果排除RDS MySQL问题后仍然产生TDDL-5006错误,请联系客服或提工单。

TDDL-5007 ERR_TRANS_PARAM

事务参数不正确。

示例:

ERR-CODE:[TDDL-5007][ERR_TRANS_PARAM]Illegaltimeout value:*****

命令中指定的PolarDB-X事务参数不正确。

例如SET drds_transaction_timeout = ***指定的参数值是负数。

TDDL-5008 ERR_TRANS_TERMINATED

事务已被Kill或超时中止。

示例:

ERR-CODE:[TDDL-5008][ERR_TRANS_TERMINATED]Currenttransaction was killed

ortimeout.Youmay need toseta longer timeout value.

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

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

 类似资料: