SQL语句出错自动重试
DWS支持在SQL语句执行出错时自动重试(下文简称CN Retry)。对于来自gsql客户端、JDBC、ODBC驱动的SQL语句,在SQL语句执行失败时,CN端能够自动识别语句执行过程中的报错,并重新下发任务进行自动重试。
CN Retry功能的限制和约束
|
限制和约束项 |
详细内容 |
|---|---|
|
功能范围 |
|
|
错误类型 |
SQL语句出错时能够被识别和重试的错误,仅限在错误类型列表(请参考表2)中定义的错误。 |
|
语句类型 |
支持单语句CN Retry、存储过程、函数、匿名块。不支持事务块中的语句。 |
|
存储过程语句 |
|
|
集群状态 |
|
|
数据导入 |
|
CN Retry支持的错误类型列表
CN Retry支持的错误类型列表和对应的错误码信息见表2, 可以通过GUC参数retry_ecode_list设置CN Retry支持的错误类型列表,但不建议用户直接修改该参数,如有修改需求请联系技术工程师协助处理。
|
错误类型 |
错误码 |
备注 |
|---|---|---|
|
对端连接重置(CONNECTION_RESET_BY_PEER) |
YY001 |
TCP通信错误:Connection reset by peer(CN和DN间通信) |
|
对端流重置(STREAM_CONNECTION_RESET_BY_PEER) |
YY002 |
TCP通信错误:Stream connection reset by peer(DN和DN间通信) |
|
锁等待超时(LOCK_WAIT_TIMEOUT) |
YY003 |
锁超时,Lock wait timeout |
|
连接超时(CONNECTION_TIMED_OUT) |
YY004 |
TCP通信错误,Connection timed out |
|
查询设置错误(SET_QUERY_ERROR) |
YY005 |
SET命令发送失败,Set query |
|
超出逻辑内存(OUT_OF_LOGICAL_MEMORY) |
YY006 |
内存申请失败,Out of logical memory |
|
通信库内存分配(SCTP_MEMORY_ALLOC) |
YY007 |
SCTP通信错误,Memory allocate error |
|
无通信库缓存数据(SCTP_NO_DATA_IN_BUFFER) |
YY008 |
SCTP通信错误,SCTP no data in buffer |
|
通信库释放内存关闭(SCTP_RELEASE_MEMORY_CLOSE) |
YY009 |
SCTP通信错误,Release memory close |
|
SCTP、TCP断开(SCTP_TCP_DISCONNECT) |
YY010 |
SCTP通信错误,TCP disconnect |
|
通信库断开(SCTP_DISCONNECT) |
YY011 |
SCTP通信错误,SCTP disconnect |
|
通信库远程关闭(SCTP_REMOTE_CLOSE) |
YY012 |
SCTP通信错误,Stream closed by remote |
|
等待未知通信库通信(SCTP_WAIT_POLL_UNKNOWN) |
YY013 |
等待未知通信库通信,SCTP wait poll unknown |
|
无效快照(SNAPSHOT_INVALID) |
YY014 |
快照非法,Snapshot invalid |
|
通讯接收信息错误(ERRCODE_CONNECTION_RECEIVE_WRONG) |
YY015 |
连接获取错误,Connection receive wrong |
|
内存耗尽(OUT_OF_MEMORY) |
53200 |
内存耗尽,Out of memory |
|
连接失败(CONNECTION_FAILURE) |
08006 |
GTM出错,Connection failure |
|
连接异常(CONNECTION_EXCEPTION) |
08000 |
连接出现错误,和DN的通讯失败,Connection exception |
|
管理员关闭系统(ADMIN_SHUTDOWN) |
57P01 |
管理员关闭系统,Admin shutdown |
|
关闭远程流接口(STREAM_REMOTE_CLOSE_SOCKET) |
XX003 |
关闭远程套接字,Stream remote close socket |
|
重复查询编号(ERRCODE_STREAM_DUPLICATE_QUERY_ID) |
XX009 |
重复查询,Duplicate query id |
|
stream查询并发更新同一行(ERRCODE_STREAM_CONCURRENT_UPDATE) |
YY016 |
stream查询并发更新同一行,Stream concurrent update |
|
LLVM内存分配错误(ERRCODE_LLVM_BAD_ALLOC_ERROR ) |
CG003 |
内存分配错误, Allocate error |
|
LLVM致命错误(ERRCODE_LLVM_FATAL_ERROR) |
CG004 |
致命错误,Fatal error |
|
HashJoin临时文件读取错误(ERRCODE_HASHJOIN_TEMP_FILE_ERROR) |
F0011 |
临时文件读取错误,File error |
|
Buffer文件读取错误(ERRCODE_BUFFER_FILE_ERROR) |
F0012 |
文件读取错误,File error |
|
分区个数发生变化(ERRCODE_PARTITION_NUM_CHANGED) |
45003 |
在扫描LIST分区表时,发现此时的分区个数和优化阶段的分区个数不一致,一般出现在查询和ADD/DROP分区并发时。(此错误类型仅8.1.3及以上集群版本支持) |
|
节点间对象SCHEMA名称不一致(ERRCODE_UNMATCH_OBJECT_SCHEMA) |
42P30 |
对象SCHEMA名称不一致,Unmatched schema name |
开启CN Retry功能
- 必选GUC参数(CN和DN都需设置)
max_query_retry_times,指定SQL语句出错自动重试功能的最大重跑次数,目前支持重跑的错误类型为“Connection reset by peer”、“Lock wait timeout”和“Connection timed out”等,默认值为6。
CN Retry功能开启时会为临时表数据记录日志,为保证数据一致性,在使用临时表时不能切换CN Retry开关状态,保持使用临时表的会话中CN Retry开关始终处于打开状态或者关闭状态。
- 可选的GUC参数(如需修改请联系技术支持)
- cn_send_buffer_size,指定CN端数据发送数据缓存区的大小。默认值为8KB。
- max_cn_temp_file_size,指定SQL语句出错自动重试功能中CN端使用临时文件的最大值。默认值为5GB。