---
title: 数据删除后的空表查询耗时长-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 数据删除后的空表查询耗时长相关的常见问题和使用技巧，帮助您快速解决 数据删除后的空表查询耗时长的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 数据删除后的空表查询耗时长

更新时间：2024-01-22 01:56

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 适用版本

OceanBase 数据库 V3.x 版本。

## 问题现象

业务进行 TPS 性能压测时，发现一条 SQL 存在性能问题，即表数据为空，但是查询耗时久。在测试环境下进行复现，发现当表数据被删除的时候，确实会有这种情况发生。

## 问题原因

类似 Oracle 的 HWM 高水位线问题。OceanBase 数据库执行 Delete 操作时，并没有直接清空 SSTable/MemTable 里的记录，只是对数据做了删除标记，用于多版本查询使用。执行器在进行 table scan 时，即使是一个已经清空了的表，依然会读到已经被删除的记录，因此执行耗时较长。

当使用 truncate 清空表或分区时，因为是对表、分区进行了 drop、create 的重建，不会有残留的数据，因此不会有类似的问题。

在 OceanBase 数据库中，被删除的数据会在满足以下条件时被正在清空（空间回收）。

1. 当一条记录的多版本的数据过多，且超过了 `undo_retention` 的范围时，OceanBase 数据库会进行多版本数据的回收。
 2. 如果表的属性为 Queuing，则在转储时对删除的记录进行回收。
 3. 合并时，会对删除的记录进行回收。

## 解决办法

可以尝试使用 Queuing 表。

```shell
obclient> ALTER TABLE user_table TABLE_MODE = 'queuing';

```

Previous

[增量合并收集的统计信息偏差太大导致索引选错，SQL 执行计划突变，RT 飙升，CPU 使用率 100% 的原因及解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001260055)

Next

[使用临时表导致系统登录慢的问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207682) ![有帮助](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) 咨询热线
