DRDS 错误代码如何解决?

猫饭先生

2017-10-30 14:19:20

13731

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

TDDL-4006 ERR_TABLE_NOT_EXIST

TDDL-4007 ERR_CANNOT_FETCH_TABLE_META

TDDL-4100 ERR_ATOM_NOT_AVALILABLE

TDDL-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON

TDDL-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON

TDDL-4103 ERR_ATOM_CONNECTION_POOL_FULL

TDDL-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW

TDDL-4105 ERR_ATOM_ACCESS_DENIED

TDDL-4106 ERR_ATOM_DB_DOWN

TDDL-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW

TDDL-4200 ERR_GROUP_NOT_AVALILABLE

TDDL-4201 ERR_GROUP_NO_ATOM_AVALILABLE

TDDL-4202 ERR_SQL_QUERY_TIMEOUT

TDDL-4203 ERR_SQL_QUERY_MERGE_TIMEOUT

TDDL-4400 ERR_SEQUENCE

TDDL-4401 ERR_MISS_SEQUENCE

TDDL-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB

TDDL-4404 ERR_SEQUENCE_TABLE_META

TDDL-4405 ERR_INIT_SEQUENCE_FROM_DB

TDDL-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE

TDDL-4408 ERR_SEQUENCE_NEXT_VALUE

TDDL-4500 ERR_PARSER

TDDL-4501 ERR_OPTIMIZER

TDDL-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT

TDDL-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN

TDDL-4506 ERR_MODIFY_SHARD_COLUMN

TDDL-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN

TDDL-4509 ERR_OPTIMIZER_ERROR_HINT

TDDL-4510 ERR_CONTAINS_NO_SHARDING_KEY

TDDL-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY

TDDL-4515 ERR_CONNECTION_CHARSET_NOT_MATCH

TDDL-4516 ERR_TRUNCATED_DOUBLE_VALUE_OVERFLOW

TDDL-4517 ERR_MODIFY_SYSTEM_TABLE

TDDL-4600 ERR_FUNCTION

TDDL-4601 ERR_EXECUTOR

TDDL-4602 ERR_CONVERTOR

TDDL-4603 ERR_ACCROSS_DB_TRANSACTION

TDDL-4604 ERR_CONCURRENT_TRANSACTION

TDDL-4606 ERR_QUERY_CANCLED

TDDL-4607 ERR_INSERT_WHEN_UPDATE

TDDL-4610 ERR_CONNECTION_CLOSED

TDDL-1305 ERR_UNKNOWN_SAVEPOINT

TDDL-1094 ERR_UNKNOWN_THREAD_ID

TDDL-4612 ERR_CHECK_SQL_PRIV

TDDL-4613 ERR_INSERT_SELECT

TDDL-4614 ERR_EXECUTE_ON_MYSQL

TDDL-4615 ERR_CROSS_JOIN_SIZE_PROTECTION

TDDL-4616 ERR_UNKNOWN_DATABASE

TDDL-4800 ERR_SET_TXCID

TDDL-4801 ERR_TXCID_NULL

TDDL-4802 ERR_SELECT_LAST_TXCID

TDDL-4994 ERR_FLOW_CONTROL

TDDL-4998 ERR_NOT_SUPPORT

TDDL-4006 ERR_TABLE_NOT_EXIST

DRDS 数据表不存在。

示例:

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

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

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

TDDL-4007 ERR_CANNOT_FETCH_TABLE_META

DRDS 无法加载数据表的元数据信息。

示例:

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

cannot be fetched because Table '*****.*****' doesn't exist.

该错误表示 DRDS 尝试读取数据表的元数据信息失败。错误原因可能是:

数据表未创建。

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

RDS/MySQL 无法连接。

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

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

TDDL-4100 ERR_ATOM_NOT_AVALILABLE

DRDS 后端 RDS/MySQL 暂时不可用。

示例:

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

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

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

TDDL-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON

未知原因的 DRDS 后端连接获取失败。

示例:

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.

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

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

TDDL-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON

已知原因的 DRDS 后端连接获取失败。

示例:

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

connection for db '*****' failed because wait millis 5000, active 0,

maxActive 5

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

常见 DRDS 后端连接失败的原因有:

后端 RDS/MySQL 连接数已满

RDS/MySQL 连接超时

RDS/MySQL 拒绝连接

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

TDDL-4103 ERR_ATOM_CONNECTION_POOL_FULL

DRDS 后端 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.

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

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

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

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

解决方法建议:

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

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

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

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

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

TDDL-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW

DRDS 后端 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.

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

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

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

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

TDDL-4105 ERR_ATOM_ACCESS_DENIED

DRDS 后端 RDS/MySQL 拒绝创建连接。

示例:

ERR-CODE: [TDDL-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for

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

contact DBA to check.

该错误表明 DRDS 通过用户名/密码连接 RDS/MySQL 时被拒绝访问。

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

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

TDDL-4106 ERR_ATOM_DB_DOWN

DRDS 后端 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.

该错误表示 DRDS 向后端 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''t set to null for now;

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

如果遇到该错误,请检查传递的变量 (variable) 值,并参考 MySQL 官方文档改正:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html

TDDL-4200 ERR_GROUP_NOT_AVALILABLE

DRDS 分库暂时不可用。

示例:

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 实例出现访问异常,并且分库下没有其他可用实例时,DRDS 会将分库置于 fail-fast 状态并提示 TDDL-4200 错误。

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

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

TDDL-4201 ERR_GROUP_NO_ATOM_AVALILABLE

DRDS 分库内暂时没有可用 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 状态时,DRDS 会提示 TDDL-4201 错误。

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

TDDL-4202 ERR_SQL_QUERY_TIMEOUT

DRDS 查询超时。

示例:

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 实例上的执行时间超过 DRDS 设置的 socketTimeout 参数限制。默认的 DRDS 超时(socketTimeout)时间设置是 900 秒。

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

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

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

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

有关 DRDS Hint 请参考文档:

https://help.aliyun.com/document_detail/51246.html

如果需要永久调整 DRDS 超时(socketTimeout)设置,请联系客服或 提工单。

TDDL-4203 ERR_SQL_QUERY_MERGE_TIMEOUT

DRDS 分布式查询超时。

示例:

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

该错误表示 DRDS 执行分布式查询超时,默认的超时设置是 900 秒(15 分钟)。

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

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

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

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

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

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

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

有关 DRDS Hint 请参考文档:

https://help.aliyun.com/document_detail/51246.html

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

TDDL-4400 ERR_SEQUENCE

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

示例:

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

value!

处理 DRDS 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 '*****' is not found

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

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

CREATE SEQUENCE [ START WITH ]

[ INCREMENT BY ] [ MAXVALUE ]

[ CYCLE | NOCYCLE ]`

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

有关 DRDS Sequence,请参考:

https://help.aliyun.com/document_detail/29675.html

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.

无法在 DRDS 后端的数据库里访问名称叫 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 相关数据表(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: 后给出。

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

TDDL-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE

访问 Sequence 数据表出错。

示例:

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

sequence: *****

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

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

TDDL-4408 ERR_SEQUENCE_NEXT_VALUE

获取 Sequence 值出错。

示例:

ERR-CODE: [TDDL-4408][ERR_SEQUENCE_NEXT_VALUE] error when get sequence's

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

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

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

TDDL-4500 ERR_PARSER

解析 SQL 语句失败。

示例:

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

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

SQL 标准语法请参考:https://www.w3schools.com/sql/

DRDS 兼容的 SQL 语法请参考:

https://help.aliyun.com/document_detail/49249.html

MySQL(5.6) SQL 语法请参考:https://dev.mysql.com/doc/refman/5.6/en/sql-syntax.html

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

TDDL-4501 ERR_OPTIMIZER

优化器转换 SQL 语句失败。

示例:

ERR-CODE: [TDDL-4501][ERR_OPTIMIZER] optimize error by: Unknown column

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

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

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

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()) 时,DRDS 要求同样的函数列必须也在 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

DRDS 在执行相同表的 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.

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

建议将对应 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 实例,DRDS 会优先选择合并排序算法(Sort-merge Join)。该算法要求 JOIN 的左表与右表必须包含字段相等的关联条件,否则 DRDS 将提示 TDDL-4508 错误。

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

TDDL-4509 ERR_OPTIMIZER_ERROR_HINT

Hint 语法错误。

示例:

ERR-CODE: [TDDL-4509][ERR_OPTIMIZER_ERROR_HINT] Hint Syntax Error:

unexpected operation: *****.

该错误表示 SQL 语句中的 Hint 语法无法被 DRDS 解析。请参考阿里云 DRDS 文档调整您的 Hint 语法:

https://help.aliyun.com/document_detail/51242.html

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.

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

DRDS 在建表时默认开启 “全表扫描” 功能。如果手工关闭 “全表扫描” ,建议确认与该表有关的 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 语句的目标是一张 DRDS 拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,DRDS 将提示 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.

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

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

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

TDDL-4517 ERR_MODIFY_SYSTEM_TABLE

禁止修改系统表。

示例:

ERR-CODE: [TDDL-4617][ERR_MODIFY_SYSTEM_TABLE] Table '*****' is DRDS SYSTEM

TABLE, which is forbidden to be modified.

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

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

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

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

TDDL-4602 ERR_CONVERTOR

错误的类型转换。

示例:

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

[*****]

该错误表明 DRDS 在执行 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: *****.

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

如果您的业务需要用分布式事务功能,即事务中的 SQL 语句需要被转发到不同的 RDS/MySQL 分库下执行,建议使用 GTS 分布式事务框架。GTS 可以很好与 DRDS 协同工作,确保跨越不同数据库,或者不同服务的事务原子性和一致性。

GTS 产品的文档:

https://help.aliyun.com/product/48444.html

TDDL-4604 ERR_CONCURRENT_TRANSACTION

嵌套事务失败。

示例:

ERR-CODE: [TDDL-4604][ERR_CONCURRENT_TRANSACTION] Concurrent query is not

supported on transaction group, transaction group is: {0}.

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

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

TDDL-4606 ERR_QUERY_CANCLED

当前执行的 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)功能后,DRDS 可以将 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 ***** does not exist

在 DRDS 上执行 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: *****

在 DRDS 上执行 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.

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

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

DRDS 账号与权限设置请参考:

https://help.aliyun.com/document_detail/50890.html

TDDL-4613 ERR_INSERT_SELECT

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

示例:

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

values: *****

DRDS 支持将跨库的 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] Error occurs when execute on

GROUP '*****': Duplicate entry '*****' for key 'PRIMARY'

DRDS 在后端 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 提供的原始错误信息排查问题。更多的错误信息请参考 MySQL(5.6) 文档:

https://dev.mysql.com/doc/refman/5.6/en/error-handling.html

如果排除应用或 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 sql or enlarge the limination size .

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

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

如果需要针对某个具体 SQL 调整该值,建议按以下原则操作:

如果单条记录超过 100K,不建议调整该值。

如果单条记录不超过 100K,可以适当调整。建议不要设置太大的值,否则会有爆内存的风险。

假设单条记录是 100K,参与分布式 JOIN 计算的内存就需要 100K * 5000 = 500M。如果有多个连接都在运行该 SQL,很容易引起爆内存,例如有 5 个连接同时在运行该 SQL,就需要 500M * 5 = 2500M = 2.5G。

如果确实需要调整,请在需要调整的 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 '*****'

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

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

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.

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

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

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

TDDL-4800 ERR_SET_TXCID

执行 SET TXC_XID x 命令失败。

示例:

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

原因请参考 GTS 文档:

https://help.aliyun.com/document_detail/48726.html

TDDL-4801 ERR_TXCID_NULL

执行 SELECT LAST_TXC_ID 命令返回 null。

示例:

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

原因请参考 GTS 文档:

https://help.aliyun.com/document_detail/48726.html

TDDL-4802 ERR_SELECT_LAST_TXCID

执行 SELECT LAST_TXC_ID 命令失败。

示例:

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

*****

原因请参考 GTS 文档:

https://help.aliyun.com/document_detail/48726.html

TDDL-4994 ERR_FLOW_CONTROL

流量控制。

示例:

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

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

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

TDDL-4998 ERR_NOT_SUPPORT

不支持的特性。

示例:

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

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

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

SQL

算法

关系型数据库

MySQL

数据库连接

分布式数据库

数据库

数据安全/隐私保护

数据库管理

RDS

添加回答

分享到

drds 解决问题_DRDS 错误代码如何解决?-问答-阿里云开发者社区-阿里云相关推荐

  1. mysql大表join小表速度很慢_mysql多表join中,为什么子查询会那么慢,怎么解决-问答-阿里云开发者社区-阿里云...

    下面的sql执行后cpu100%,但是这三张join的表数据量都在2W左右,不应该啊,是不是数据库服务器配置出了问题啊.sql如下:select a.excel_id, a.rpt_id, a.acc ...

  2. python列表索引超出范围 等于啥_python如何解决IndexError:列表索引超出范围?-问答-阿里云开发者社区-阿里云...

    我正在尝试为ucf101数据集生成密集流,但我不断收到以下错误: 我尝试在第68行中将video_name.split('')[1]更改为video_name.split('')[0],已编译代码,但 ...

  3. mysql云上迁移_自建mysql 迁移到云上-问答-阿里云开发者社区-阿里云

    详细解答可以参考官方帮助文档 使用 数据传输服务 DTS 可以将本地 MySQL 实例的数据迁移到 RDS for MySQL 实例.数据传输服务 DTS (以下简称 DTS) 提供的增量数据同步功能 ...

  4. slb健康检查方式_SLB健康检查也是“正常”-问答-阿里云开发者社区-阿里云

    负载均衡通过健康检查来判断后端服务器(ECS实例)的业务可用性.健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响. 开启健康检查功能后,当后端某台ECS健康检查出现异常时,负 ...

  5. mysql数据库div函数_关于使用mysql中的div函数报错?报错-问答-阿里云开发者社区-阿里云...

    数据库MySQL 5.5.27 jar包:mysql-connector-java-5.1.21.jar mybatis-spring-1.1.1.jar druid-0.2.10.jar 集成myb ...

  6. mongodb一致性协议_mongo的怎么保持事物的一致性-问答-阿里云开发者社区-阿里云...

    http://docs.mongoing.com/manual-zh/tutorial/perform-two-phase-commits.html 要么操作全都执行,要么都不执行,不能执行一半,改了 ...

  7. mysql的程序怎么升级成mysqli_如何将mysql更改为mysqli?-问答-阿里云开发者社区-阿里云...

    首先要做的可能是将每个mysql_函数调用都替换为等效函数mysqli_,至少在您愿意使用过程式API的情况下-考虑到您已经有一些基于MySQL API的代码,这将是更简单的方法是一种程序性的. 为了 ...

  8. poi的sax模式读取xls_POI SAX 如何修改大excel 文件内容-问答-阿里云开发者社区-阿里云...

    I think POI is using too much memory! What can I do?This one comes up quite a lot, but often the rea ...

  9. mysql 时间戳 2038_mysql数据库的timestamp为什么从1970到2038的某一时间?某一时间是指什么时间?过了这个时间之后怎么办?-问答-阿里云开发者社区-阿里云...

    首先你要理解什么是时间戳.时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至某一时间点的总秒数. 例如北京时间2015-12-31 ...

最新文章

  1. CVPR 2022 | 阿里达摩院新技术,美体塑形一键就成
  2. System.Transactions深入了解
  3. Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
  4. python 基础教程:字符串内建函数之大小写的区别
  5. 二 用标准c语言实现hanoi塔问题,天大2016年1二月《数据结构》期末大作业考核要求.doc...
  6. MySQL存储过程之事务管理
  7. 如何将h5网页改成微信网页
  8. python开发应用程序错误_Python 程序员经常犯的 10 个错误
  9. 基础算法 —— 模拟思维
  10. 目录遍历漏洞和文件读取漏洞的区别
  11. 分布式缓存系统 Memcached 【转载】
  12. Hibernate讲解(三)-类映射文件中常用属性的了解
  13. CCF201709-1 打酱油(100分)【水题】
  14. openwrt MT7621 支持512M内存
  15. 确定有限状态自动机(deterministic finite automaton --> DFA)
  16. android PIN码解锁流程
  17. 计算机桌面底边出现库如何去掉,桌面图标有蓝底怎么去掉? 去掉桌面图标阴影技巧...
  18. 成都VS上海,先锋设计机构与未来建筑的“双城battle”
  19. 使用vue扫描扫描仪图像
  20. matlab里面求出两条曲线的交点问题

热门文章

  1. 微信小程序开发(一)
  2. 殊途同归的CVE-2012-0774 TrueType字体整数溢出漏洞分析
  3. 解析针对 HTTP/2 协议的不同步攻击
  4. PE学习(六)第六章 栈与重定位表 实例栈溢出、模拟加载器加载DLL、遍历重定位表
  5. 【shell】 初次接触shell编程,记录一下遇到的问题
  6. 22、Java Swing JTable:表格
  7. 111. 畜栏预定【贪心】
  8. Acwing第 38 场周赛【完结】
  9. Acwing第 32 场周赛【完结】
  10. 【AC Saber】离散化