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

openGauss列存储的持久化设计

openGauss小助手 2021-10-11
276

上面章节列存储的组织结构在MVCC机制中提到,列存的存储单位由CUDesc和CU文件共同组成,其中CUDesc记录了CU相关的元信息,控制其可见性,实际上充当了一个“代理”的角色。但是CUDesc和CU,实质上还是分离的文件状态。CUDesc表,本质上还是行存储表,其持久化流程遵从行存储的共享缓冲区脏页与Redo日志的持久化流程,在事务提交前,CUDesc的改动会被记录在Redo日志中进行持久化。单个CU文件本身,由于含有大量的数据,使用正常的事务日志进行持久化会需要消耗大量的事务日志,引入非常大的性能开销,并且恢复也十分缓慢。因此根据其应用场景,append-only(仅允许追加)的属性,以及与CUDesc的对应关系,列存储的CU文件,为了确保CUDesc和CU持久化状态的一致,在事务提交、CUDesc对应事务日志持久化前,会先行强制刷盘(Fsync),来确保事务改动的持久化。

由于数据库主备机例的同步也依赖事务日志,而CU文件并不包含在事务日志内,因此在与列存储同步时,主备实例之间除去正常的日志通道外,还有连接的数据通道,用于传输列存储文件。CUDesc的改动会通过日志进行同步,而CU文件则会被直接通过数据通道传输到备机实例,并通过bit change map(BCM)文件来记录主备机例之间文件的同步状态。

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

评论