暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB A SQL语句出错自动重试

墨天轮 2019-10-12
1402

SQL语句出错自动重试

GaussDB 200支持在SQL语句执行出错时的自动重试功能(下文简称CN Retry)。对于来自gsql客户端、JDBC、ODBC驱动的SQL语句,在SQL语句执行失败时,CN端能够自动识别语句执行过程中的报错,并重新下发任务进行自动重试。

该功能的限制和约束如下:

  • 功能范围限制:
    • 仅能提高故障发生时SQL语句执行成功率,不能保证100%的执行成功。
    • CN Retry默认开启,开启后temp表会记录日志,关闭CN Retry后,temp表即不会记录日志,因此不能在使用temp表时反复打开/关闭CN Retry开关,否则主备切换后再CN Retry会造成数据不一致。
    • CN Retry默认开启,开启后新创建的unlogged表会忽视unlogged关键字,建成普通表。关闭CN Retry后,unlogged表不会记录日志,因此不能在使用unlogged表时反复打开/关闭CN Retry开关,否则主备切换后再CN Retry会造成数据不一致。
    • 在使用gds进行数据导出时,不支持CN Retry。
  • 错误类型约束:SQL语句出错时能够被识别和重试的错误,仅限在错误类型列表(请参考表1)中定义的错误。
  • 语句类型约束:
    • 仅支持单语句CN Retry,不支持事务块中的语句,不支持存储过程、函数和游标。
  • 集群状态约束:
    • 仅支持DN、GTM实例故障。
    • CN Retry有次数限制,如果在CN Retry达到最大尝试次数(最大次数由max_query_retry_times控制)之前,集群状态无法从故障状态恢复到正常状态,CN Retry不能保证执行成功。
    • 扩容时不支持CN Retry。

CN Retry支持的错误类型列表和对应的错误码信息见表1, 可以通过GUC参数retry_ecode_list设置CN Retry支持的错误类型列表,但不建议用户直接修改该参数,如有修改需求请联系华为技术工程师协助处理。

表1 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_UNKNOW)

YY013

等待未知通信库通信,SCTP wait poll unknow

无效快照(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

开启CN Retry功能需要设置如下GUC参数:
  • 必选的GUC参数(CN和DN都需设置)

    max_query_retry_times,具体的参数信息请参考max_query_retry_times。

    CN Retry功能开启时会为临时表数据记录日志,为保证数据一致性,在使用临时表时不能切换CN Retry开关状态(参考max_query_retry_times),保持使用临时表的会话中CN Retry开关始终处于打开状态或者关闭状态。

  • 可选的GUC参数

    cn_send_buffer_size,具体的参数信息请参考cn_send_buffer_size。

    max_cn_temp_file_size,具体的参数信息请参考max_cn_temp_file_size。


查看更多:华为GaussDB 200 集群HA介绍
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论