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

0070.O oceanbase常见错误“ERROR 4012 (HY000) Timeout”处理记录

rundba 2021-07-18
11130

“ERROR 4012 (HY000): Timeout”在oceanbase使用中,出现频率较高,进行参数设置后,该问题会得到有效解决,下面以停止服务报错处理过程进行展示。

0. ENV

CentOS7.6;

OceanBase 2.2.75

1. 现象

执行停止服务报错:"ERROR 4012 (HY000): Timeout"

    obclient> alter system stop server "192.168.80.20:5882" zone "zone1";
    ERROR 4012 (HY000): Timeout
    obclient> select svr_ip,svr_port, id,zone,inner_port,status,usec_to_time(stop_time),usec_to_time(start_service_time),usec_to_time(last_offline_time) from __all_server;
    +---------------+----------+----+-------+------------+--------+----------------------------+----------------------------------+---------------------------------+
    | svr_ip | svr_port | id | zone | inner_port | status | usec_to_time(stop_time) | usec_to_time(start_service_time) | usec_to_time(last_offline_time) |
    +---------------+----------+----+-------+------------+--------+----------------------------+----------------------------------+---------------------------------+
    | 192.168.80.20 | 2882 | 1 | zone1 | 2881 | active | 1970-01-01 08:00:00.000000 | 2021-07-13 15:50:00.398462 | 1970-01-01 08:00:00.000000 |
    | 192.168.80.20 | 3882 | 2 | zone2 | 3881 | active | 1970-01-01 08:00:00.000000 | 2021-07-13 15:49:58.450628 | 1970-01-01 08:00:00.000000 |
    | 192.168.80.20 | 4882 | 3 | zone3 | 4881 | active | 1970-01-01 08:00:00.000000 | 2021-07-13 15:49:59.927852 | 1970-01-01 08:00:00.000000 |
    | 192.168.80.20 | 5882 | 7 | zone1 | 5881 | active | 2021-07-15 16:52:11.684498 | 2021-07-15 08:53:26.672946 | 1970-01-01 08:00:00.000000 |
    | 192.168.80.20 | 6882 | 8 | zone2 | 6881 | active | 1970-01-01 08:00:00.000000 | 2021-07-15 08:53:51.181616 | 1970-01-01 08:00:00.000000 |
    | 192.168.80.20 | 7882 | 9 | zone3 | 7881 | active | 1970-01-01 08:00:00.000000 | 2021-07-15 08:53:58.629463 | 1970-01-01 08:00:00.000000 |
    +---------------+----------+----+-------+------------+--------+----------------------------+----------------------------------+---------------------------------+
    6 rows in set (0.00 sec)
    复制

    当前已经执行,usec_to_time(stop_time)中时间已经更新,只是timeout设置时间较短。

    2. 原因

    sql响应超时时间设置太短了,所以当sql执行需要一定时间时就会报错4012

    查看参数:

      obclient> show variables like '%timeout%';
      +---------------------+---------------------+
      | Variable_name | Value |
      +---------------------+---------------------+
      | connect_timeout | 10 |
      | interactive_timeout | 28800 |
      | lock_wait_timeout | 31536000 |
      | net_read_timeout | 30 |
      | net_write_timeout | 60 |
      | ob_pl_block_timeout | 9223372036854775807 |
      | ob_query_timeout | 10000000 |
      | ob_trx_idle_timeout | 120000000 |
      | ob_trx_lock_timeout | -1 |
      | ob_trx_timeout | 100000000 |
      | wait_timeout | 28800 |
      +---------------------+---------------------+
      11 rows in set (0.00 sec)
      复制

      3. 解决方法

      1) 租户下设置全局变量

      # 租户下设置,防止超时

        obclient> set global ob_query_timeout=36000000000;
        obclient> set global ob_trx_timeout=36000000000;
        复制

        ob_query_timeout用于设置查询超时时间,单位是微秒;

        ob_trx_timeout用于设置事务超时时间,单位为微秒。

        两个参数有GLOBAL和SESSION两种级别:

        global参数的话是对全局session生效,但是不包括本次链接,重新登录生效;

        如果不加global,就是仅对本次session生效,退出登录还是原来的值。


        2) 退出重新登录

          [admin@ob6 ~]$ mysql -h127.1 -uroot@sys -P2881 oceanbase -A
          复制


          3) 再次执行其它stop server正常

            obclient> alter system stop server "192.168.80.20:6882" zone "zone2";
            复制


            4. 小结

            执行stop server操作时,当前已经执行,usec_to_time(stop_time)中时间已经更新,只是timeout设置时间较短,通过设置全局超时参数ob_query_timeout、ob_trx_timeout,重新登录会话后,再次执行语句不会再报错。


            -  完 -

            不足之处,还望抛砖。

            作者:王坤,微信公众号:rundba,欢迎转载,转载请注明出处。

            如需公众号转发,请联系wx: landnow。


            文章转载自rundba,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论