---
title: 同结构分区表 join 时 merge group by 算子导致的正确性问题-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于同结构分区表 join 时 merge group by 算子导致的正确性问题相关的常见问题和使用技巧，帮助您快速解决同结构分区表 join 时 merge group by 算子导致的正确性问题的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# 同结构分区表 join 时 merge group by 算子导致的正确性问题

更新时间：2026-05-26 09:46

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

## 问题现象

问题的现象是生成如下的计划时，12 号 table scan 有数据但是输出了 0 行导致最终结果集为空。

```sql
| ===================================================================
|ID|OPERATOR                        |NAME          |EST. ROWS|COST|
-------------------------------------------------------------------
|0 |PX COORDINATOR MERGE SORT       |              |99       |1136|
|1 | EXCHANGE OUT DISTR             |:EX10001      |99       |1053|
|2 |  SORT                          |              |99       |1053|
|3 |   MERGE GROUP BY               |              |99       |937 |
|4 |    EXCHANGE IN MERGE SORT DISTR|              |99       |923 |
|5 |     EXCHANGE OUT DISTR (HASH)  |:EX10000      |99       |840 |
|6 |      PX PARTITION ITERATOR     |              |99       |840 |
|7 |       MERGE GROUP BY           |              |99       |840 |
|8 |        MERGE JOIN              |              |130      |825 |
|9 |         SORT                   |              |135      |214 |
|10|          TABLE SCAN            |a             |135      |53  |
|11|         SORT                   |              |297      |518 |
|12|          TABLE SCAN            |b(idx_sno_bno)|297      |115 |
===================================================================

Outputs & filters:
-------------------------------------
  6 - output([a.bill_no], [a.status], [a.create_time]), filter(nil),
      force partition granule.
  7 - output([a.bill_no], [a.status], [a.create_time]), filter(nil),
      group([a.bill_no]), agg_func(nil)

```

需满足如下条件：

1. 有一个下推的 `merge group by` 算子，该算子的子算子不是 `sort` 算子，并且该算子不计算 `distinct`，对应上面的 7 号算子。
 2. 这个 `merge group by` 算子的 `parent` 是一个 `granule iterator` 算子，对应上面的 6 号算子，并且该算子没有被标记为`partition wise`。explain extended 会展示 `granule iterator` 算子的标记，上面计划中可以看到 6 号算子打了 `force partition granule`的标记。
 3. `merge group by` 下面有一个 `partition-wise` 的 `join`，即 `join` 两侧都不存在 `exchange` 算子，对应上面的 8 号算子。

## 关键诊断信息

### 触发条件

要满足如下条件：

## 问题原因

这里为 `granule iterator` 少打了 `partition-wise` 的标记，导致该算子认为自己下面只有一个 table scan，没有为右侧的 12 号 table scan 算子设置扫描任务。 少打标记的原因是有一个 BUG，当 GI 被上提到一个下推的 merge group by 上面，这个 merge group by 不用计算 distinct 并且下面不是 sort 算子时，一定不会为 GI 打上 `partition-wise` 的标记。

## 问题的风险及影响

可能导致输出错误结果，预期结果集不为空，实际为空。

## 影响租户

影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户，对于 SYS 租户无影响。

## 影响版本

OceanBase 数据库企业版 V2.2.77 GA（oceanbase-2.2.77-20210508211731）及之后版本、V3.1.2 GA（oceanbase-3.1.2-20210618150922）及之后版本、V3.2.4 GA（oceanbase-3.2.4.0-100000072022102819）及之后版本、V4.1.0 GA（oceanbase-4.1.0.0-100001122023040322）及之后版本、

## 解决方法

- - 升级到问题已修复版本，目前已修复的版本包含 OceanBase 数据库企业版 V2.2.77 BP19（oceanbase-2.2.77-119000122024060513）及之后版本、V3.2.3 BP9（oceanbase-3.2.3.3-109000182023071410）及之后版本、V3.2.5 BP5（oceanbase-3.2.4.5-105000012023081513）及之后版本、V4.1.0 BP3（oceanbase-4.1.0.2-103000072023081111）及之后版本。
 - 应急办法：使用 `hint USE_HASH_AGGREGATION`，将 `merge group by` 改为 `hash group by`。

上一篇

[使用并行执行 group by 查询结果中出现重复行](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000089877)

下一篇

[低版本大查询死锁导致队列积压问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000763799) ![有帮助](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) 咨询热线
