---
title: 如何排查租户队列积压-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 如何排查租户队列积压相关的常见问题和使用技巧，帮助您快速解决 如何排查租户队列积压的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 如何排查租户队列积压

更新时间：2024-08-09 10:16

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x、V4.0.x、V4.1.x、V4.2.x 内容类型：How-to  

本文介绍如何排查租户队列积压。

## 租户队列积压的原因

在 OceanBase 数据库中，如果发现数据库响应缓慢或存在登录、执行操作超时等问题，可能是因为某个租户的请求队列发生了积压。租户队列积压意味着队列中的请求处理（消费）速度低于请求到达（生产）速度，导致队列中的请求堆积增多，本质原因是线程处理请求慢。

## 租户队列积压的现象与相关报错

下边列举了租户队列积压可能的现象和相关报错。

- 登录数据库卡住，MySQL 命令执行卡住或超时。
 - 报错日志中出现 recv_request 错误，指示请求推送到队列失败。

  ```shell
  recv_request (ob_tenant.cpp:1162) [48090][RpcIO][T0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=31] push request to queue fail(ret=-4019

  ```
 - 报错日志中出现 deliver_request_fail 错误，带有错误码 -4019。
 - 执行超时导致无主。
 - 客户端 RPC 报错，`execute rpc fail(ret=****, dst="*****")`。一般通过 dst=ip 找到 server 端地址，通过报错的前后文找到对应租户 tenant_id，然后到 server 端搜到对应租户队列看是否积压。
 - 通过监控发现某个租户的 CPU 使用率持续偏高。

## 租户队列积压的排查步骤

1. 确认积压情况。

   通过日志信息，确认是否存在队列积压，示例：

   ```shell
   grep ' dump tenant info(tenant={id:1004' observer.log

   ```

   输出结果如下：

   ![0op02-uiop02t-ki0937h-lo092h](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20240119dumptenantinfo.png)

   关键指标包括 req_queue:total_size、multi_level_queue:total_size 和 group_id = *, queue_size 等，如果这些值不为 0，则说明存在积压。

   如果想要知晓每个 queue 或其他字段具体信息，可以下来参考文档 [dump tenant info](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000819396)。

   #### 注意

   1004 换成实际 tenant_id 值。
 2. 抓取堆栈

   当确认有持续积压时，一定要在队列积压期间抓取堆栈信息。可以使用 pstack 或 obstack 工具进行抓取。

   如果在线上环境不方便进行堆栈抓取，可以通过监控 `recv_mysql_cnt`、 `recv_np_rpc_cnt` 等字段，判断是否由于请求量大导致线程处理不及时。
 3. 分析堆栈信息。

   在堆栈文件中搜索 `ObWorkerProcessor::process` 或 `ObWorkerProcessor::process_one`，这两个关键字表示工作线程在处理请求时的最外层接口，这样的堆栈大概率是处理请求卡住的线程。

   示例如下：

   ![0iou0-uju0iuy-jk09oi8-lo2o89](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20240119ObWorkerProcessor.png)

   找到后，可以通过线程名 T1004_TNT_LX_GX （V3.x 已简化为 TNT_LX_GX_1004，V4.x 已简化为 T1004_LX_GX），确认是 1004 租户的工作线程。

通过以上步骤，可以有效排查和解决 OceanBase 数据库中租户队列积压的问题。在实际操作中，每个步骤可能需要根据具体情况灵活调整，并结合具体的系统环境和应用场景进行分析。

## 队列爆但是很快恢复类问题如何排查

对于快速出现然后恢复的队列积压（特指队列爆了已经出现 4019 错误但 dump tenant info 没有看到积压的场景），可以设置日志探针，在队列失败时强制生成 core dump 文件，进而分析线程堆栈和队列状态。

## 适用版本

OceanBase 数据库所有版本。

Previous

[创建备租户的时候报：set tenant itself as log restore source is not allowed 的原因及解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001230109)

Next

[get_tenant 失败后重试无法退出](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000048154) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
