---
title: 应用 SQL 在 OceanBase 侧执行耗时抖动-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 应用 SQL 在 OceanBase 侧执行耗时抖动相关的常见问题和使用技巧，帮助您快速解决 应用 SQL 在 OceanBase 侧执行耗时抖动的难题。
---
切换语言

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

划线反馈

# 应用 SQL 在 OceanBase 侧执行耗时抖动

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

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

## 问题现象

应用 SQL 偶发性执行耗时长，常见的有几个特征。

- SQL 语句整体相同，但是使用不同的查询条件过滤时，耗时抖动尤其明显。
 - 人工执行正常，无法人工复现，一般是结合业务逻辑偶发出现。
 - 如果是 java 应用，可能会出现 read time out 异常。

## 问题原因

一般是执行计划复用导致。

执行计划复用是指两条 SQL 如果只有过滤条件里面的常量值不同，数据库会使用同一个计划执行两条 SQL。由于不同参数过滤的数据量不同，会导致相同执行计划在不同过滤参数下执行时间不同，这是应用 SQL 偶发性执行耗时长的主要原因。要判断是否是执行计划复用引起，请按照如下步骤确认。

#### 注意

请在问题发生后及时保存下面的信息，防止元数据表的数据被覆盖。

1. root 登录 sys 租户，执行如下 SQL 找到耗时抖动的 SQL 语句以及其 `plan_id`。

   ```shell
   select * from oceanbase.gv$sql_audit where query_sql like '%SQL语句关键字%' and query_sql not like '%sql_audit%' and elapsed_time>异常SQL执行耗时 order by request_time desc limit 4;

   ```
 2. 根据 `plan_id` 继续执行如下 SQL 过滤。

   ```shell
   select * from oceanbase.gv$sql_audit where plan_id=第一步的plan_id order by request_time desc;

   ```

   如果此条 SQL 的结果为多行返回，且异常 SQL 的 `request_time` 并不是最小，可以定位是执行计划重用导致此类问题。
 3. 根据 `plan_id` 继续执行如下 SQL 查看执行计划相关信息。

   ```shell
   select * from oceanbase.gv$plan_cache_plan_stat WHERE plan_id=第一步的plan_id;

   ```

   关注 `first_load_time` 列的时间，如果 `first_load_time` 早于异常 SQL 的 `request_time`，也可以进一步确定执行计划重用导致此类问题。

## 解决方法

- 业务代码中使用 Hint 固定执行计划，推荐使用 Hint。
 - OceanBase 数据库中使用 Outline 固定执行计划。

## 适用版本

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

上一篇

[统计信息自动收集超时导致的估行不准 SQL 选择错索引](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001810132)

下一篇

[关向量化 2.0 后，topn filter 下压结果不对](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002763114) ![有帮助](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) 咨询热线
