GBase 8a集群的表scn是如何使用的?

GBase 8a集群有一些全局ID信息,用于标记不同的用户、不同的表、不同的数据版本、不同的事务等。如:
tableid,每个表创建时都会分配一个tableid,在MPP数据库中,相同的tableid表示为同一个表。
scn,用于标记表的版本,通过scn来确定主备分片的数据是否一致。
GBase 8a集群中的每个数据节点都存储了表的一部分数据,称为分片表。每个分片表上都有scn号。通常用户无需关注分片表的scn。
但因为一些原因(如为紧急恢复任务,清理了FEVENTLOG事件记录),当主备分片出现不一致状态且无FEVENTLOG记录时,我们可以通过主备分片的scn号进行一致性判断。

SCN由gcware管理集群维护,当用户向GBase 8a集群下发一个写操作时,gcware为这个写操作分配一个集群中当前最大scn号,随写操作一起下发到gnode计算节点。计算节点完成写操作后,进行提交时,将该写操作带有的scn一并写入到表元数据中。即GBase 8a集群的表SCN具有如下特点:
(1)scn和其他ID一样是全局的,由gcware维护,可通过gcware的python接口查看当前最大scn取值,以及初始化集群的scn值。
(2)scn采用int64存储,是个超大值,正常使用不会出现越界;
(3)只在执行了写操作上修改分片表的scn,其他未进行写入的分片表不调整scn。如有M个分片,一个update操作只影响到_n1分片,_n1分片表的scn设置为最新值,则_n2分片~_nM分片的scn保持不变。如果一个写操作同时修改了多个分片表,则这些分片表的scn号就时一样的。

用户如何来利用GBase 8a集群的SCN呢?
通过scn可以人工判断GBase 8a集群主备分片的数据一致性,包括GBase 8a集群的双活集群中的主备集群的数据一致性。
表的scn的通过gnode数据库查询获取,SQL为:select TABLE_SCHEMA,TABLE_NAME,SCN from information_schema.tables where TABLE_SCHEMA=‘test’ and table_name=‘tt1_n1’ 。
在主备分片节点上,查询同一个分片表的scn,如不同,则表示主备分片表不一致;
在主备集群上,查询同一个表的所有分片的scn,所有分片的scn对应一致,则表示主备集群上该表的数据是一样的。为简化处理,可以找到scn最大的分片,如果分片编号一样、scn一样,则表示数据一致。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值