酷阿文
#1
数据库版本:5.7.25-Oceanbase-v4.2.1.10
在学习oceanbase集群时,有几个概念性的知识没有明白,请教各位:
在上面的集群,使用了三中心zone-1、zone-2、zone-3,每个中心有3个observer节点,每个节点有很多个分区,在集群安装的说明中,没有看到这个分区相关的设置,查资料说这个分区是每个节点自己管理的,不需要安装设置,对用户来说是透明的。
现在有个问题:就是存储引擎里的分区对用户是透明的,那么一个节点有多少个分区这个是由谁来决定呢?看上面这个图有很多个分区。这个分区与创建用户表的时候使用的partition又有什么区别和联系?
比如创建数据表orders,将数据分成3个逻辑分区p1,p2,p3,这个是用户可见的,oceanbase又如何将这些数据落地到存储引擎的分区上的?存储引擎的物理分区怎么跟主副本、从副本关联起来的?主副本和备副本在哪里?如何验证?:
CREATE TABLE orders (
order_id BIGINT,
order_date DATE,
customer_id INT,
amount DECIMAL(10,2)
) PARTITION BY RANGE(order_date) (
PARTITION p1 VALUES LESS THAN (‘2023-02-01’),
PARTITION p2 VALUES LESS THAN (‘2023-03-01’),
PARTITION p3 VALUES LESS THAN (‘2023-04-01’)
);
4 个赞
菜鸟收割机
#3
1,那么一个节点有多少个分区这个是由谁来决定呢?租户规格大小,比如内存。
2,这个分区与创建用户表的时候使用的partition又有什么区别和联系?本质无区别,在oceanbase上叫tablet,包括单表。
3,oceanbase又如何将这些数据落地到存储引擎的分区上的?根据primary_zone配置去打散,同时自动负载均衡打开,至于怎么个均衡法那是oceanbase内部算法的问题,可以不必深究。
4,存储引擎的物理分区怎么跟主副本、从副本关联起来的?通过日志流同步到副本
5,主副本和备副本在哪里?如何验证?CDB_OB_LS_LOCATIONS、DBA_OB_TABLE_LOCATIONS等等相关视图,有空可以查查官网,自己写SQL。
欢迎各位大佬指正补充~~~~~ 
4 个赞
朴朴
#5
提供的sql无法在mysql模式下执行.调整了一下
CREATE TABLE orders (
order_id int,
order_date int,
customer_id INT,
amount DECIMAL(10,2)
) PARTITION BY RANGE(order_date) (
PARTITION p1 VALUES LESS THAN (1),
PARTITION p2 VALUES LESS THAN (2),
PARTITION p3 VALUES LESS THAN (3)
);
查询 分区表对应的 tablet_id
select table_id from oceanbase.__all_virtual_table where table_name=‘orders’ 查询table_id
查看分区表对应的tablet(一个分区对应一个tablet) 需要在sys租户下执行
obclient [(none)]> select tablet_id from oceanbase.__all_virtual_part where table_id in ( select table_id from oceanbase.__all_virtual_table where table_name='orders');
+-----------+
| tablet_id |
+-----------+
| 349464 |
| 349463 |
| 349462 |
+-----------+
3 rows in set (0.146 sec)
查询tablet对应的ip
select svr_ip,tablet_id from oceanbase.__all_virtual_tablet_info where tenant_id='1006' and tablet_id in ( 349462, 349463, 349464) order by tablet_id;
+-------------+-----------+
| svr_ip | tablet_id |
+-------------+-----------+
| xxx.xxx.xxx.60 | 349462 |
| xxx.xxx.xxx.61 | 349462 |
| xxx.xxx.xxx.62 | 349462 |
| xxx.xxx.xxx.60 | 349463 |
| xxx.xxx.xxx.61 | 349463 |
| xxx.xxx.xxx.62 | 349463 |
| xxx.xxx.xxx.60 | 349464 |
| xxx.xxx.xxx.61 | 349464 |
| xxx.xxx.xxx.62 | 349464 |
+-------------+-----------+
9 rows in set (0.110 sec)
可以看到tablet_id=349462,分了三份数据在60、61、62上
#查看我的副本分布情况 primary_zone为主副本
+-----------+-------------------+
| tenant_id | primary_zone |
+-----------+-------------------+
| 1006 | zone1,zone2,zone3 |
+-----------+-------------------+
1 row in set (0.017 sec)
所以这个分区表有三个主副本,
如何定位sql从哪里取数据,参考:
ocp 使用: https://www.oceanbase.com/docs/common-ocp-1000000002380925
查看集群 SQL 请求流量是否均衡: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002017266
2 个赞
论坛小助手
#7
根据您的问题,我将从以下几个方面进行解答:
1. OceanBase 中存储引擎的分区与用户表分区的区别和联系
区分:
-
存储引擎的分区:这是 OceanBase 数据库内部管理的数据分布单元。每个分区是一个独立的对象,具有自己的存储特性。这些分区对用户是透明的,不需要用户直接管理或设置。
-
用户表的分区:这是用户在创建表时定义的逻辑分区,用于将数据按照一定的规则(如范围、列表、哈希等)划分成多个更小的部分。这种分区是用户可见的,并且可以通过 SQL 语句进行管理和查询。
联系:
- 用户表的分区最终会被映射到存储引擎的物理分区上。例如,当您创建了一个包含三个逻辑分区
p1
, p2
, p3
的表时,OceanBase 数据库会将这些逻辑分区的数据分布到不同的物理分区中。
- 物理分区的分布是由 OceanBase 数据库根据集群配置、负载均衡策略等因素自动决定的。
2. 节点上的分区数量由谁决定?
根据文档片段 5 和文档片段 7 的信息:
-
节点上的分区数量是由 OceanBase 数据库根据租户的资源分配、数据分布策略以及负载均衡需求自动决定的。具体来说,OceanBase 数据库会根据以下因素来决定每个节点上的分区数量:
- 租户的资源配置(如 CPU、内存等)。
- 数据分布策略(如主副本和备副本的分布)。
- 集群的负载均衡需求。
3. 用户表的逻辑分区如何映射到存储引擎的物理分区?
根据文档片段 5 的信息:
- 当您创建了一个包含三个逻辑分区
p1
, p2
, p3
的表时,OceanBase 数据库会将这些逻辑分区的数据分布到不同的物理分区中。每个物理分区可能分布在不同的节点上,以实现数据的分布式存储和高可用性。
- 具体的映射关系是由 OceanBase 数据库根据数据分布策略和负载均衡需求自动决定的。
4. 主副本和备副本的位置及验证方法
根据文档片段 1 和文档片段 7 的信息:
-
主副本和备副本的位置:主副本和备副本的分布是由 OceanBase 数据库根据 Paxos 协议和数据分布策略自动决定的。通常情况下,主副本和备副本会分布在不同的 Zone 中,以实现跨数据中心的数据容灾。
-
验证方法:您可以使用 OCP 或者通过执行 SQL 查询来查看主副本和备副本的分布情况。例如,可以使用以下 SQL 查询来查看某个表的分区分布情况:
SELECT * FROM GV$OB_PARTITIONS WHERE TABLE_NAME = 'orders';
此查询将返回表 orders
的所有分区及其主副本和备副本的分布情况。
总结
- 存储引擎的分区对用户是透明的,其数量和分布由 OceanBase 数据库根据资源配置和负载均衡需求自动决定。
- 用户表的逻辑分区会被映射到存储引擎的物理分区上,具体的映射关系由 OceanBase 数据库根据数据分布策略和负载均衡需求自动决定。
- 主副本和备副本的分布是由 OceanBase 数据库根据 Paxos 协议和数据分布策略自动决定的,可以通过 SQL 查询来验证其分布情况。
希望以上解答能够帮助您更好地理解 OceanBase 数据库中的分区相关概念。如果还有其他疑问,请随时提问!
检索到的文档如下:
- 日志流
- 物理备库概述
- ODP SQL 路由原理
- CREATE RESOURCE UNIT
- 使用 OceanBase 数据库分区表进行水平拆分
- 租户间的资源隔离
- OceanBase 术语
- 集群架构
- OceanBase 数据库概述
2 个赞
来轩
#9
分区是逻辑上了概念,也就是你创建的p1,p2,p3,p4 对应物理上的存储就是分片(tablet),一个分区会存在多分副本,一个主副本若干个从副本
3 个赞
弋烆蘇
#10
租户 —> schema/database —> table —> partition —> tablet —> 日志流*n(形成对应的Paxos 协议组)
2 个赞
弋烆蘇
#12
请教一下是有什么问题,因为也在学习中,这个是一个潦草的理解。知道有不足,或者给个方向也行,感谢老师
2 个赞