注册
DPC分布式集群使用心得
专栏/培训园地/ 文章详情 /

DPC分布式集群使用心得

Yar 2024/12/10 356 0 0
摘要

DPC分布式集群使用心得

1 名词解释

首先介绍下分布式相较于单机库,新增的一些常用概念,方便大家更好的使用DMDPC

1.1 RAFT组

RAFT组: 拥有相同数据的一个或多个节点共同构成一个 RAFT组。

例如:
dpc架构分为SP,MP,BP,如下图一个dpc多副本架构:
(dmdpc的架构在之前发表的 DPC部署详细步骤第一节 中有介绍)
image.png
在部署时,新建节点都必须指定一个raft组名,比如上图一个dpc集群的raft组为:
SP1_FART:SP1
SP2_FART:SP2
MP_RAFT: MPA,MPB,MPC
RAFT1: BP1_A,BP1_B,BP1_C
RAFT2: BP2_A,BP2_B,BP2_C
RAFT3: BP3_A,BP3_B,BP3_C

一个RAFT组,数据完全一致,只有一个为主库提供服务
类似于:一个RAFT组 = 一个主备系统(异步同步)

1.2 表空间组(使用DPC必建表空间组)

表空间组:表空间组是相同或不同RAFT组上表空间的集合

例如:
dmdpc可以每个RAFT组上建一个表空间,以上面架构为例,可以在3个BP上分别建3个表空间,然后创建一个表空间组包含所有表空间;

在用户建表 或者 指定用户默认的存储位置时,就可以指定表空间组,实现数据分配到表空间组的每个表空间上;


表空间组中的表空间可动态扩展和收缩。且能同时包含普通表空间和混合表空间。

1.3 分区组

分区组:用于定义分区的类型、分区数量和分区字段类型等信息。

创建分区表时,引用相同分区组的分区表将拥有同样的分区方式,优化器可以使用这些信息构建优化的执行计划。(这个涉及到优化,不创建分区组不影响使用,在PWJ优化处会提)

1.4 SP组

SP 组: 是个逻辑概念,它可以包含一个或多个SP。

SP 组的作用是将不同用户、不同应用使用的计算节点进行隔离,以便更好地管理硬件资源。

例如:
创建一个SP1组,组中只有SP1,那么应用连接SP1时,就不能使用上SP2的资源;

1.5 BS模式

BS,BP区别 :主要是启动时的区别,BP 节点有两种启动模式:BP 模式和 BS 模式。

①以 BP 模式启动并运行,仅作为后台数据存储节点;

②以 BS 模式启动运行,BS节点既可以当作BP用(存储数据),也可以当作SP直接提供给应用连接(整合了SP和BP的功能);

1.6 PWJ

分区智能连接( Partition Wise Join ,简称为 PWJ):即当连接两侧不需要任何数据交换操作而可以直接在每个工作线程里进行连接。

例如:
两个分区表的分区方式一致且对应分区的 BP 位置也一致,那么两个表使用分区列进行连接时,就可以不用进行分发操作,直接在每个BP上连接,省去节点之间交互的代价;

如果使用分区组,优化器可以直接判断出两张表连接时是否适用于 PWJ(使用PWJ性能提升巨大)

1.7 影子库

影子库(SHADOW 库): 为多副本集群中的特殊节点,不修改数据文件,没有数据,但正常参与选举和事务提交,仅提供 V$动态视图查询的节点。

以上面架构为例,BP1_A,B,C都可正常修改数据文件,有完整数据,这样会导致磁盘空间利用率只有1/3,影子库起到节约磁盘空间的作用;

2 前期规划

2.1 节点规划问题

①注意部署时交叉副本;
以上图架构为例,B,C都跟A不在同一台服务器,防止出现服务器故障导致三副本都故障,不能正常主备切换;

②内存参数A和B副本尽量相同,C副本可以考虑给小点;
Ⅰ. 一台服务器如果正常三副本如果都给1/3的内存,那会导致内存利用率低
Ⅱ. C副本切换概率低,可以考虑内存参数调小;

2.2 升级问题

使用dem部署集群时,在实例规划处,注意取消勾选独立执行码

独立执行码 取消独立执行码
bin目录多,每个实例一个 bin目录少,每台服务器一个
升级,换key困难 减轻运维压力

3 使用时

3.1 创建表空间问题

使用dpc时是否能够正常利用上分布式特性,表空间的正确创建特别重要

1.一定考虑到新增BP后,怎么利用上新增服务器资源;
注意每个BP建多个表空间,新增BP后可以迁移表空间在新BP上,这样在底层实现了数据迁移,不影响系统正常运行;

2.需要正确创建表空间组;
创建数据库用户时可以指定一个表空间组(表空间组中包括所有建的表空间),dmdpc可以实现这个用户的表合理分配在表空间组的每个表空间中,分区表的子表也可以分配到每个表空间;

示例:
①每个RAFT组创建2个表空间(为后续扩展做准备)

create tablespace "TS_001" datafile 'TS_001_01.DBF' size 10240 autoextend on next 2048 CACHE = NORMAL WITH HUGE PATH 'HTS_TS_001' STORAGE( ON RAFT1); create tablespace "TS_002" datafile 'TS_002_01.DBF' size 10240 autoextend on next 2048 CACHE = NORMAL WITH HUGE PATH 'HTS_TS_002' STORAGE( ON RAFT2); create tablespace "TS_003" datafile 'TS_003_01.DBF' size 10240 autoextend on next 2048 CACHE = NORMAL WITH HUGE PATH 'HTS_TS_003' STORAGE( ON RAFT3); create tablespace "TS_004" datafile 'TS_004_01.DBF' size 10240 autoextend on next 2048 CACHE = NORMAL WITH HUGE PATH 'HTS_TS_001' STORAGE( ON RAFT1); create tablespace "TS_005" datafile 'TS_005_01.DBF' size 10240 autoextend on next 2048 CACHE = NORMAL WITH HUGE PATH 'HTS_TS_002' STORAGE( ON RAFT2); create tablespace "TS_006" datafile 'TS_006_01.DBF' size 10240 autoextend on next 2048 CACHE = NORMAL WITH HUGE PATH 'HTS_TS_003' STORAGE( ON RAFT3);

关键在于STORAGE( ON RAFT1,2,3),创建时指定正确的RAFT组,需要每个BP都有表空间

②创建表空间组

--创建表空间组 SP_TS_GROUP_CREATE('TSG_1', 'tablespace group1'); --将6个表空间加入到表空间组 SP_TS_GROUP_ADD_TS('TSG_1', 'TS_001'); SP_TS_GROUP_ADD_TS('TSG_1', 'TS_002'); SP_TS_GROUP_ADD_TS('TSG_1', 'TS_003'); SP_TS_GROUP_ADD_TS('TSG_1', 'TS_004'); SP_TS_GROUP_ADD_TS('TSG_1', 'TS_005'); SP_TS_GROUP_ADD_TS('TSG_1', 'TS_006');

③迁移表空间
当扩展了3个BP(RAFT4,5,6)后,架构变为2SP,1MP,6BP(三副本),怎么做迁移

业务低峰期执行

ALTER TABLESPACE TS_004 MOVE TO RAFT4 READ ONLY; ALTER TABLESPACE TS_005 MOVE TO RAFT5 READ ONLY; ALTER TABLESPACE TS_005 MOVE TO RAFT6 READ ONLY;

执行成功表空间就迁移成功

迁移表空间分为READ ONLY 和 NOT READ ONLY,只读迁移速度快

3.2 建用户、建表问题

建用户时关键是指定上创建的表空间组就行

--建用户 CREATE USER "USERNAME" IDENTIFIED BY "PASSWORD" DEFAULT TABLESPACE GROUP "TSG_1"; --创建一个HASH分区表 CREATE TABLE "TABLENAME" ("ID" INT, "NAME" VARCHAR2(2) PARTITION BY HASH("ID") PARTITIONS default ;

建表有几个地方需要注意
①如果有主键,分区列最好是主键中选,不然局部索引升级为全局索引;

②PARTITIONS default ; 表示创建一个默认分区数的分区表,也可以指定数字,建议用默认,利用default,dmdpc会使每个表空间都会有子表,利用上所有服务器性能;

3.3 BS,BP问题

①BP启动时尽量都用BS方式启动,某些sql的执行计划可以发到BS上执行,避免了SP和BP网络交互的代价;

②应用也能直连BS,如果查询或修改的数据都在直连的 BP 本地,则类似于单节点,执行时无网络交互的代价,这相对于先连接到 SP,再查询或修改 BP 的模式,可获得性能上的提升;

3.4 表分区问题(重要)

使用分布式就是为了利用分布特性,表怎么分区就是重中之重

例如:
达梦集中式创建一张分区表,所有分区都只能在同一台服务器上;
如果是分布式创建一张同样的分区表,那么这张表的子表,就可以分布在多台服务器上,当出现复杂查询操作,执行引擎就能够充分利用多机器、多核的硬件资源;

①各种分区适合场景
image.png
②DMDPC两个常用表分区策略
(1)用主键分
避免全局索引问题,分布列不在主键中时,为了保障主键唯一性,局部索引会自动升级为全局索引

(2)用关联列分
多个关联列时,根据实际场景和业务sql优先选择使用更多、筛选性更好的字段作为分布键

用关联列分,实际就是为了利用上PWJ优化,PWJ是dmdpc性能优化的重点考虑方向

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服