首批通过分布式安全可靠测评,为关键业务系统打造
使用列存副本
更新时间:2026-04-10 12:01:00
为满足对 TP 增强混合负载(准实时决策分析)场景的支持,OceanBase 数据库提供了对列存副本的支持。用户可以将列存副本部署在独立的 Zone 上。在列存副本上,所有的用户表(包括复制表、不包括索引表、内部表、系统表)均为列存格式存储。OLAP 业务通过独立的 proxy 入口访问列存副本,并以弱读方式执行决策分析类业务。
本文主要介绍如何在 OceanBase 集群中部署并配置 ODP,以访问列存副本。
注意
列存副本目前处于实验阶段,不推荐在生产环境中使用,以免影响系统稳定性。
注意事项
在使用列存副本时,需要注意以下事项:
不建议部署 2 个及以上数目的列存副本。
列存副本与 F 或 R 副本之间不支持相互转换。
由于访问列存副本需要部署独立的 ODP,建议对存在列存副本的 Zone 上只部署列存副本。同时,部署 ODP 时,要求其版本必须为 ODP V4.3.2 及以上版本。
全功能型副本/只读型副本上的查询不允许转发到列存副本。反之,列存副本上的用户表查询也不允许转发到全功能型副本/只读型副本,否则会报错。
部署了列存副本的集群,在执行 DDL 操作时,会对 CPU、内存、磁盘以及 IO 等资源的使用产生影响。
列存副本的合并比全功能型副本/只读型副本的合并慢。如果列存副本未合并完成,将无法发起新一轮的租户级合并。手动触发合并前,建议通过查看 CDB_OB_ZONE_MAJOR_COMPACTION 或 DBA_OB_ZONE_MAJOR_COMPACTION 视图来确认上一轮所有副本是否都已完成合并。
有关查看合并情况的详细操作,参见 查看合并信息。
物理恢复不支持恢复列存副本,指定租户的 Locality 时,如果指定了列存副本,恢复操作将会执行失败。
如果主库未部署列存副本,备库也不建议部署列存副本。
步骤一:部署列存副本
要在集群中部署列存副本,只需要在租户的 Locality 中指定列存副本即可。主要有以下两种场景:
创建租户时指定列存副本
通过修改租户的 Locality 来增加列存副本
创建租户时指定列存副本
假设当前有一个已部署好的集群,且集群的部署模式为 2F1A(两副本+ 1 个仲裁服务)。集群中的 3 个 Zone 分别为 zone1、zone2、zone3,仲裁服务部署在 zone3 上。需要在该集群上创建一个含有列存副本的租户,步骤如下:
找到一台能够与当前集群网络互通的机器,并在该机器上部署 ODP。
为防止资源争抢,建议 ODP 单独部署在一台机器上。部署 ODP 时,要求其版本必须为 ODP V4.3.2 及以上版本。有关部署 ODP 的详细操作,参见 部署 ODP。
为租户创建资源单元
unit1。obclient [oceanbase]> CREATE RESOURCE UNIT unit1, MAX_CPU=5, MIN_CPU=5, MEMORY_SIZE= '32G', MAX_IOPS=10000, MIN_IOPS=5000, LOG_DISK_SIZE=5301023539200;为租户创建资源池
pool1,指定资源单元为unit1。obclient [oceanbase]> CREATE RESOURCE POOL pool1 UNIT='unit1', UNIT_NUM = 1, ZONE_LIST = ('zone1','zone2','zone3');创建一个租户
tenant_c,指定其 Locality 为F@zone1,F@zone2,C@zone3。obclient [oceanbase]> CREATE TENANT tenant_c LOCALITY = 'F@zone1,F@zone2,C@zone3', primary_zone='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes = '%';本示例中,创建的租户默认为 MySQL 兼容模式租户,如果需要创建 Oracle 兼容模式租户,需要通过系统变量 ob_compatibility_mode 显式指定
ob_compatibility_mode='oracle'。
通过修改租户的 Locality 来增加列存副本
假设当前集群中有一个名为 tenant_c 的租户,其 Locality 为 F@zone1,F@zone2,F@zone3,租户的资源池为 pool1,其 ZONE_LIST 范围为 'zone1','zone2','zone3'。现在需要为租户增加列存副本,可以增加一个 Zone4,然后修改租户的 Locality 为 F@zone1,F@zone2,F@zone3,C@zone4,步骤如下:
在集群中添加新的 Zone
zone4。添加 Zone 的详细操作,参见 添加 Zone。向
zone4内增加节点。添加节点的详细操作,参见 添加节点。找到一台能够与当前集群网络互通的机器,并在该机器上部署 ODP。
为防止资源争抢,建议 ODP 单独部署在一台机器上。部署 ODP 时,要求其版本必须为 ODP V4.3.2 及以上版本。有关部署 ODP 的详细操作,参见 部署 ODP。
创建资源单元
unit2。obclient [oceanbase]> CREATE RESOURCE UNIT unit2, MAX_CPU=5, MIN_CPU=5, MEMORY_SIZE= '32G', MAX_IOPS=10000, MIN_IOPS=5000, LOG_DISK_SIZE=5301023539200;创建资源池
pool2,指定资源单元为unit2。obclient [oceanbase]> CREATE RESOURCE POOL pool2 UNIT = 'unit2', UNIT_NUM = 1, ZONE_LIST = ('zone4');为租户增加资源池
pool2。obclient [oceanbase]> ALTER TENANT tenant_c RESOURCE_POOL_LIST = ('pool1','pool2');修改租户的 Locality 为
F@zone1,F@zone2,F@zone3,C@zone4。obclient [oceanbase]> ALTER TENANT tenant_c LOCALITY = 'F@zone1,F@zone2,F@zone3,C@zone4';
步骤二:配置路由转发策略及弱读请求
部署列存副本后,需要配置路由转发策略及弱读请求,以保证 OLAP 请求可以自动转为弱读请求并转发到相应的列存副本上。
使用
root@proxysys用户登录到用于访问列存副本的 ODP。连接示例如下:
[admin@obtest ~]$ obclient -uroot@proxysys -h10.10.10.1 -P2883 -p执行以下语句,配置路由转发策略及弱读请求。
支持以下两种配置项组合,选择任意一种进行设置即可。
第一种
配置 SQL 请求为只读类型。
obclient> ALTER PROXYCONFIG SET obproxy_read_only = 0;配置 SQL 请求为弱一致性读。
obclient> ALTER PROXYCONFIG SET obproxy_read_consistency = 1;配置弱读情况下,ODP 所有请求仅路由到列存副本所在的 Zone,同时生成列存副本的查询计划。
例如,列存副本所在的 Zone 为
zone4。obclient> ALTER PROXYCONFIG SET proxy_primary_zone_name='zone4';obclient> ALTER PROXYCONFIG SET init_sql='set @@ob_route_policy = COLUMN_STORE_ONLY';
第二种
配置 SQL 请求为只读类型。
obclient> ALTER PROXYCONFIG SET obproxy_read_only = 0;配置 SQL 请求为弱一致性读。
obclient> ALTER PROXYCONFIG SET obproxy_read_consistency = 1;配置弱读情况下,所有请求仅路由到列存副本,同时生成列存副本的查询计划。
obclient> ALTER PROXYCONFIG SET route_target_replica_type = 'ColumnStore';obclient> ALTER PROXYCONFIG SET init_sql='set @@ob_route_policy = COLUMN_STORE_ONLY';配置弱读情况下,所有请求仅选择从副本,当从副本都不可用时,断开和客户端的连接。
obclient> ALTER PROXYCONFIG SET proxy_route_policy='TARGET_REPLICA_TYPE_FOLLOWER_ONLY';
修改成功后,通过以下语句,确认修改结果。
obclient> SHOW PROXYCONFIG ALL LIKE 'obproxy_read_only';obclient> SHOW PROXYCONFIG ALL LIKE 'obproxy_read_consistency';obclient> SHOW PROXYCONFIG ALL LIKE 'proxy_primary_zone_name';obclient> SHOW PROXYCONFIG ALL LIKE 'init_sql';obclient> SHOW PROXYCONFIG ALL LIKE 'route_target_replica_type';obclient> SHOW PROXYCONFIG ALL LIKE 'proxy_route_policy';
配置成功后,对于 OLAP 业务,用户可以通过该独立的 ODP 将查询请求定向到列存副本,利用列存批量处理的优势加速查询,且不影响原有的 OLTP 业务。