异常现象
当集群中出现租户内存使用超限或异常时,OCP 中收到如下图所示的日志告警:
收到相关告警后,管理员需要登录对应告警对象的 OceanBase 集群的 sys 租户,进行具体原因定位。
原因定位
通常租户内存使用问题跟用户使用行为相关,故需要使用 OCP 性能趋势和 SQL 监控两个监控功能排查定位。
租户性能趋势排查
在使用 OCP 租户级别性能监控前,需要先登录 sys 租户,根据报错日志中的 tenant_id
信息,使用下面的 SQL 查询到具体告警租户名称。如上图的日志告警中 tenant_id
为 1006,示例 SQL 语句如下所示:
obclient> SELECT tenant_name FROM __all_tenant WHERE tenant_id IN (1006);
查询到对应租户名后,在 OCP 监控菜单中进入 OceanBase 数据趋势界面找到对应集群租户的性能监控展示界面,详细操作信息,请参见 性能监控。
在租户性能趋势界面中主要关注指标 QPS、QPS_RT、TPS、TPS_RT 和 ACTIVE_MEMSTORE_PERCENT,并找到告警对应时间点,确认是否符合预期。一般在告警时间点附近,以上监控指标变化情况可能包括以下几种情况:
QPS_RT 突然明显升高,其他指标无明显变化趋势,同时 ACTIVE_MEMSTORE_PERCENT 指标未达到合并阈值。这种情况说明查询中存在大查询,且大查询消耗内存超过阈值触发了日志告警。
TPS_RT 突然明显升高,同时 QPS_RT 也有升高趋势但是其他指标变化不明显,且ACTIVE_MEMSTORE_PERCENT 指标未达到合并阈值。这种情况说明租户执行了一些大事务,事务消耗内存超过阈值触发了日志告警,同时对查询性能也造成了一定影响。
QPS 和 TPS 同时有下降趋势,且 TPS_RT 有升高趋势,而 ACTIVE_MEMSTORE_PERCENT 指标已经达到合并阈值但未出现下降。这种情况说明租户可用内存无法通过转储或合并进行释放,很有可能与转储或合并异常有关,详细操作信息,请参见 合并异常处理。
用户 SQL 监控排查
在排查完性能趋势变化后,除发生合并异常的情况外,由于大查询或大事务引起的租户内存使用超限问题,均需要通过 OCP 监控中的 SlowSQL 监控功能进行慢查询定位。详细操作信息,请参见 SQL 监控。
解决办法
针对排查过程中遇到的不同情况,本文档将根据问题解决的推荐度及收益从高到低的顺序依次进行介绍;
大查询。由大查询或者烂 SQL 引起的租户内存超限问题,在定位到问题 SQL 后,可进行 SQL 优化达到减小查询内存消耗的目标,从而避免出现租户内存使用日志告警。
大事务。由于大事务或者批量导数引起的租户报内存不足的情况,通过定位到具体事务内容后,进行事务处理优化最终达到大事务变为小事务的目标,避免发生内存使用超限。
租户变量配置。当 SQL 调优到极限或事务大小已经到最小业务许可范围时,通过增大目标业务租户的
ob_sql_work_area_percentage
变量(默认值为 5,即租户单个资源单元内存规格的 5%)可增加 Session 使用内存量,此变量可配置为 Session 级别或 Global 级别,推荐值域为 [5,80]。示例语句如下所示:--Session 级别:
SET ob_sql_work_area_percentage = xxx;
--Global 级别:
SET GLOBAL ob_sql_work_area_percentage = xxx;
租户内存扩容。当以上方法均尝试后仍有租户内存超限告警的,可考虑对租户进行扩容,详细操作信息,请参见 租户管理 章节。如果最终定位异常原因与转储、合并异常有关,详细操作信息请参见 合并异常处理。