oceanbase 闪回查询

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】4.2.1社区版
【问题描述】




如上三张图,我设置undo_retention=120s, 按官网所述应该只能闪回查询到当前时间T到T-120 秒这两分钟之内版本的数据,但是我却闪回查询到了4分钟之前那个版本的数据,请问这是怎么回事

设置的undo_retention是系统尽量保证的undo保留时间,如果数据库产生的undo比较少,undo记录应该会保留更长的时间。

OB 是没有undo日志的,多版本数据也是保存在sstable中的

OceanBase 数据库转储的数据会保留多个版本的历史数据行,您可以通过 undo_retention 来控制转储中保留的多版本数据范围。

其中:

  • undo_retention 的值为 0 时,表示未开启多版本转储,即转储文件仅保留当前最新版本的行数据。
  • undo_retention 的值大于 0 时,表示开启多版本转储,并且转储文件保留这段时间(单位为秒)以内的多版本行数据。
    前面说的不太准确,这个多版本历史记录其实是可以看作是undo

嗯,这个没问题,但是这样又回到了我当初的疑问,闪回查询应该只能查到当前时间T 到T - undo_retention 这段时间范围内的任意版本数据,但是我却查到了T - undo_retention 时间点之前的版本数据,若是按照你上一条所说那样,应该还有个控制多版本数据所占磁盘空间的参数才对

ob中历史版本的数据是在合并过程中清理的,数据一经合并之前的数据就会删除,参考这个文档。OceanBase分布式数据库-海量数据 笔笔算数

  • undo_retention 的值为 0 时,表示未开启多版本转储,即转储文件仅保留当前最新版本的行数据。
  • undo_retention 的值大于 0 时,表示开启多版本转储,并且转储文件保留这段时间(单位为秒)以内的多版本行数据。

假如undo_retention设置为120M,就会保留120M以内的数据。