暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

OceanBase系统架构闪回查询

2024-02-23
190

undo retention 字面意思是 Undo 的保留位点,即从当前时间回溯多长时间的 Undo 日志是保留下来的。对于 OceanBase 数据库来说,是将该段时间的所有数据多版本保留下来。可以通过系统变量 undo_retention 进行设置,默认单位为秒。

Flashback Query

闪回查询(Flashback Query)允许用户查询某个历史版本的数据。社区版 OceanBase 数据库提供 AS OF SNAPSHOT 语法进行查询:

用户配置系统变量 undo_retention 后,可以使用 Flashback Query 查询当前时间 T 到 T - undo_retention 时间范围内的任意多版本。

查询副本选择

当用户指定查询某个历史版本数据时,并不会像普通查询一样总去查 Leader,而是优先查本地机器的副本,如果本地副本不存在,则优先查本 Zone 其他机器上的副本,最后再去查 Leader。

如下图所示,集群包含两个 Zone,数据分为三副本,其中副本 Replica 1 和 Replica 2 都在 Zone1,副本 Replica 3 在 Zone2,Leader 是 Replica 3。如果处理查询的 SQL 层在 server 1 上,则查询副本优先选择 Replica 1,其次选择 Replica 2,最后才会选择 Replica 3。

闪回

注意事项

如果在 T - undo_retention 时间段内有 DDL 操作,OceanBase 数据库会用最新的数据字典解释表的数据。对于 DDL 操作发生前产生的数据,删掉列的数据将变成删掉的状态,新添加列的数据则设为 Default 值。

闪回查询示例

前提条件

在通过租户级配置项 undo_retention 进行闪回查询前,需要先修改 undo_retention 的值。undo_retention 的默认值为 1800,单位为秒。

  1. 租户管理员登录到对应的租户。

  2. 执行以下语句,修改租户级配置项 undo_retention 的值。

    示例如下:

    obclient> ALTER SYSTEM SET undo_retention=900;
    

    更多租户级配置项 undo_retention 的说明信息请参见 undo_retention

闪回查询

假设,当前 undo_retention 变量设置的值为 900,用户有一个表 table1

通过 AS OF SNAPSHOT指定历史时间并闪回查询单表在该历史时间点的状态的数据的示例如下:

obclient> SELECT * FROM table1 AS OF SNAPSHOT 1582807800000000;

其中,1582807800000000 为时间戳,需要您根据待查询的时间自行转换,单位为微秒。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论