---
title: 什么是渐进合并-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于什么是渐进合并相关的常见问题和使用技巧，帮助您快速解决什么是渐进合并的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# 什么是渐进合并

更新时间：2026-06-15 09:16

适用版本： V1.4.x、V2.1.x、V2.2.x、V3.1.x、V3.2.x、V4.0.x、V4.1.x、V4.2.x 内容类型：TechNote  

本文主要介绍什么是渐进合并以及控制渐进合并的一些参数。

## 适用版本

OceanBase 数据库所有版本。

## 渐进合并是什么

为了支持业务的快速发展，我们不可避免地要做加列、减列、建索引等诸多 DDL 变更。这些 DDL 变更对于数据库来说通常是很昂贵的操作。MySQL 在很长一段时间内都不能支持在线的 DDL 变更（直到 5.6 版本才开始对 Online DDL 有比较好的支持），而即使到今天，对于 DBA 来说，在 MySQL 5.7 中做 Online DDL 仍然是一件比较有风险的操作，因为一个大的 DDL 变更就会导致 MySQL 主备间的 replication lag。OceanBase 数据库在设计之初就考虑到了 Online DDL 的需求，目前在OceanBase 数据库中加列、减列、建索引等 DDL 操作都是不阻塞读写的，也不会影响到多副本间的 Paxos 同步。加减列的 DDL 变更是实时生效的，我们将对存储数据的变更延后到每日合并的时候来做。和 MySQL 一样，对于某些 DDL 操作如加减列等，我们是需要将所有数据重写一遍的，如果在一次每日合并过程中完成对所有数据的重写，那么对存储空间和合并时间都会是一个比较大的考验。为了解决这个问题，我们引入了渐进合并，既然一次合并做代价太大，那就搞多次。我们会将 DDL 变更造成的数据重写分散到多次每日合并中去做，假设我们把渐进轮次设置为 60，那么一次合并就只会重写 60 分之一的数据，在 60 轮合并过后，数据就被整体重写了一遍。渐进合并减轻了 DBA 做 DDL 操作的负担，同时也使得 DDL 变更更加平滑。

## 渐进合并的参数

- schema 中的 `progressive_merge_num` 属性来决定渐进的轮次，假设 `progressive_merge_num=5`，表示 5 轮合并重写完 major SSTable。
 - schema 中的 `progressive_merge_round` 表示本次合并所处的渐进合并轮次。

## 如何指定全量合并

当 `progressive_merge_num=1` 时会发生全量合并，另外如果发生了 DDL 对于存储层列类型的变更，也会在下一轮合并中重写掉 major SSTable。

## 全量合并与非全量合并

- 全量合并：所有宏块不重用，全部打开重写。
 - 非全量合并：宏块会重用，只打开有数据变更的宏块。
 - 当执行渐进合并时，只有本次渐进轮次相关的宏块会做全量合并，其他部分做非全量合并。

上一篇

[什么是并行合并](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209931)

下一篇

[OceanBase 数据库合并的常见问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000112) ![有帮助](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) 咨询热线
