OceanBase可能错误分为三大类:

    • SQL执行较慢: SQL执行速度不符合预期,SQL RT过长或吞吐量过低

    • SQL执行出错: 执行SQL返回预期外的错误号

    • 系统故障: SQL执行大量报错,甚至不能登录等针对每类问题,可分别按以下流程处理。

    SQL执行较慢

    这类问题一般来说都是SQL调优问题,可按以下流程排查:

    1. 确认租户涉及的 Server。可通过以下 SQL 查看执行 SQL 的 Server 和 Zone。

      1. select u.zone, u.svr_ip from __all_unit u, __all_resource_pool r, __all_tenant t where u.resource_pool_id = r.resource_pool_id and r.tenant_id = t.tenant_id and t.tenant_name = 'tenant_name' order by 1;

      再结合租户的 Primary Zone设置,以及 SQL 是否为弱一致性读可得知可能执行 SQL 的 Server。

    2. 慢 SQL。

    3. 通过 OCP 的 top sql 或 SQL Audit 找到执行时间较长不符全预期的 SQL

    4. 通过 explan 该 SQL 或查 (g)v$plan_cache_plan_explain 表,查看 SQL 执行计划。确认表访问路径和执行计划是否符全预期,具体可参考《OceanBase SQL调优指南》。

    5. 如果是 SQL 或索引不够优则相应调整。如果是执行计划不符合预期,可在SQL中加 hint 生成正确执行计划或通过 Outline 绑定执行计划。

    6. 资源不够或不合理。如果没有发现慢 SQL 影响,则一般来说是租户资源不够或配置不合理。

    7. 在 OCP 中查看 Server 租户级别的 CPU_INFO中CPU 利用率是否接近100%,或 Server 级别 CPU/IO/NET 等达到瓶颈。此类情况可增加租户资源解决。

    8. 检查 OCP 中 QPS RT/TPS RT 与 client 端 RT 是否一致,如果相关较大,可能是 client 与执行 SQL 的 Server 网络延迟较大。可修改租户的 Primary Zone 设置合理的 Primary Zone。

    9. 检查租户同一个 Zone 中 Server 上 QPS、RT,租户 CPU 使用率是否相差较大,相差较大说明数据有倾斜,可考虑调整数据分区方法和均衡策略

    SQL执行出错

    SQL执行出错时,OceanBase 会返回一个错误码和出错信息,可根据错误码判断出错类型,见:系统错误码。部分错误码OceanBase特有,常见的有以下几类:

    • 超时:-4012OceanBase 给每条 SQL 限定了执行时长,执行超此时长则返回此错误。可修改 ob_query_timeout/ob_trx_timeout 系统变量,或在 SQL 中加 TIMEOUT hint 解决。

    • 内存: -4013, -4030

    1. 检查 memstore 内存是否达到上限(__all_virtual_tenant_memstore_info),合并是否超时。如 memstore 已到内存上限且合并未超时,说明资源未正确配置,需重新评估租户资源使用,可考虑增大租户内存或增加转储次(minor_freeze_times 配置项)。

    2. 如果只是部分查询操作报错,如涉及较多行的排序或涉及较多行的分布式查询。则可能是SQL执行模块内存不够,可尝试调整 ob_sql_work_area_percentage 系统变量的值。

    • 事务被kill: -6002OceanBase 在轮转合并和 Server 维护时会切主,切主会主动 kill 执行时间较长的事务。查__all_rootservice_event_history表检查是否在合并,可考虑关闭轮转合并(enable_merge_by_turn配置项)。

    • 其它情况可在 SQL Audit 中找到 TRACE_ID,或直接在租户所有 Server 上根据 sql 和错误码从系统日志中找到TRACE_ID。然后根据 TRACE_ID 在租户所有 Server 的系统日志中过虑,收集此 SQL 执行的所有日志。根据日志信息判断出错原因或将错误日志提交给 OceanBase 支持。

    系统故障

    常见系统故障如下:

    1. 排查是否有多数派的 serve r宕机或 observer 进程退出。系统租户可登录时可查__all_server表,不能登录时可检查 observer 进程是否正常。同时还应该检查机房间网络,确认是否出现多个网络分区,导致每个分区都达不到多数派。

    2. 检查 Partition 是否无主(__all_virtual_clog_stat),如果在 Server 数满足多数派情况下出现 Partition 无主,常见原因如下:

    • 时钟不同步: 需检查 Server 间时钟同步是否达到要求

    • clog 磁盘空间不够: clog 所在磁盘空间使用率达到95% (clog_disk_usage_limit_percentage配置项)后会停写,可能导致无主。检查 clog 所在磁盘是否有其它程序占用空间,或考虑调整 clog 目录。

    1. 合并超时(__all_zone),检查磁盘空间是否足够 (__all_virtual_disk_stat),可考虑给租启增加 unit 或加 Server。其它故障请收集集群信息发送给 OceanBase 支持人员处理。