---
title: SQL 执行结束，临时文件没有释放-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 SQL 执行结束，临时文件没有释放相关的常见问题和使用技巧，帮助您快速解决 SQL 执行结束，临时文件没有释放的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# SQL 执行结束，临时文件没有释放

更新时间：2024-03-14 07:17

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

## 问题描述

在 OceanBase 数据库中，出现磁盘水位较高的情况，SQL 执行结束后，节点中存在大量临时文件，需要等待一个固定时间才会释放。

## 适用版本

适用于 OceanBase 数据库 V2.x 和 V3.x 版本。

## 问题原因

造成该问题的原因是在 OceanBase 数据库中，在一些异常场景中，SQL 执行结束后不会立即清理中间结果，需要等到超时时间（ob_query_timeout）才会清理。

本文的示例中，由于租户 `ob_query_timeout` 设置为 6 小时，即使 SQL 执行结束，临时文件仍然需要等待 6 小时后才会清理。

#### 说明

- SQL 执行过程中会写中间结果，结果集较大时会发生落盘，写入临时文件中。
 - 正常情况下，SQL 执行结束时会清理中间结果，对应的临时文件会被立即回收，但是空间释放需要等一轮宏块 mark sweep，OceanBase 数据库 V3.2.x 版本中是 5min, 在 OceanBase 数据库 V4.x 版本中是 30s。

## 解决方法

- 在 OceanBase 数据库 V3.2.4 BP7 (oceanbase-3.2.4.7-107000012023113010) 及以上版本中，无论是否发生异常，SQL 执行结束后都会立即清理临时文件。您可以升级到这些版本来规避本文中介绍的问题。
 - 在业务租户下，调小 `ob_query_timeout` （默认值 10000000 微妙）的值，通过 OBClient 客户端执行 SQL 语句修改 `ob_query_timeout` 的值。例如通过以下命令将 `ob_query_timeout` 的值调小为 20000000 微妙。

     - 在 MySQL 模式下：

      ```shell
      obclient> SET GLOBAL ob_query_timeout = 20000000;

      ```
     - 在 Oracle 模式下：

      ```shell
      obclient> ALTER SESSION SET ob_query_timeout = 20000000;

      ```

      或者

      ```shell
      obclient> ALTER SYSTEM SET ob_query_timeout = 20000000;

      ```

有关 `ob_query_timeout` 的详细信息，参见 [ob_query_timeout](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000220700)。

上一篇

[get_tenant 失败后重试无法退出](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000048154)

下一篇

[OceanBase 数据库中租户参数 open_cursors 的含义](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000639156) ![有帮助](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) 咨询热线
