DM MPP 使用

本文详细介绍了达梦MPP系统中如何进行动态扩容,包括停止MPP、数据重分发(哈希、复制、随机分布表)、系统过程与函数使用、DDL克隆与还原,以及主备系统的部署。重点讲解了表的分布调整和MPP环境的维护操作。
摘要由CSDN通过智能技术生成
DM MPP 使用
(第一节点,全局登录, 第二节点查看信息)
本地登录
disql SYSDBA/'"SYSDBA"'@192.168.2.142:5236#"{mpp_type=local}"
全局登录
disql SYSDBA/'"SYSDBA"'@192.168.2.141:5236#"{mpp_type=global}"
1.建立分布表
创建hash分布表t_hash ,分布列c1:
create table t_hash(c1 int ,c2 char(10)) DISTRIBUTED by HASH  (c1) ;
创建随机分布表t_random.
create table t_random(c1 int ,c2 CHAR(10)) DISTRIBUTED  RANDOMLY ;
创建复制分布表t_full
create table t_full (c1 int) DISTRIBUTED FULLY ;
创建范围分布表t_range ,分布列c1
create table t_range (c1 int ,c2 CHAR(10)) DISTRIBUTED BY  RANGE (c1) (VALUES EQU OR LESS THAN (500) on EP01,VALUES EQU  OR LESS THAN (1000) ON EP02 ) ;
创建list分布表t_list,分布列c1
create table t_list (c1 int ,c2 char(10)) DISTRIBUTED BY  LIST (c1) ( VALUES(3) on ep01 ,VALUES (4) ON ep02 ) ;  --实例名大小不限制
创建哈希分布表的范围水平分区表
CREATE TABLE T_HASH_RANGE_PARTITION
(C1 INT, C2 CHAR(10), C3 CHAR(10))
PARTITION BY RANGE(C1)
(
PARTITION PART_1 VALUES LESS THAN(0) ,
PARTITION PART_2 VALUES LESS THAN(10) ,
PARTITION PART_3 VALUES LESS THAN(100) ,
PARTITION PART_4 VALUES LESS THAN(MAXVALUE)
)
DISTRIBUTED BY HASH (C1);
在创建分布表时,用户应注意以下一些使用限制:
单机模式下建的分布表和普通表一样,但是不能创建指定实例名的分布表(如范围分布表和 LIST 分布表);
MPP 模式下创建分布表,如果未指定列则默认为 RANDOMLY( 随机 ) 分布表;
分布列类型不支持 BLOB CLOB IMAGE TEXT LONGVARCHAR BIT BINARY VARBINARY、LONGVARBINARY、BFILE、时间间隔类型、虚拟列和用户自定义类型;
HASH 分布、 RANGE 分布、 LIST 分布允许更新分布列,并支持包含大字段列的表的分布列更新,但包含 INSTEAD OF 触发器的表、堆表不允许更新分布列;
对于 FULLY (复制)分布表,只支持单表查询的更新和删除操作,并且查询项或者条件表达式中都不能包含 ROWID 伪列表达式;
RANGE (范围)分布表和 LIST (列表)分布表,分布列与分布列值列表必须一致,并且指定的实例名不能重复;
引用约束的引用列和被引用列都必需包含分布列,且分布情况完全相同;
随机分布表不支持 UNIQUE 索引。
DM 提供了快速装载工具 dmfldr,能够对 DM 单机版和 MPP 系统进行海量数据的快速装载。
2.停止MPP系统
需要停止DM MPP系统的运行时,只需要停止每个EP的DM实例即可,没有特别的顺序要求.
若在DM MPP系统的运行过程中,某一EP发生故障停机,则整个MPP系统将处于不能正常服务的状态。当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。因此,为了保证MPP系统的高可用性,我们强烈建议采用DM MPP与数据守护相结合的部署方案。
3.MPP 相关系统过程与函数
为了方便 MPP 环境下数据库应用的编写, DM 提供了一些 MPP 相关的系统过程与函数。
1. SP_SET_SESSION_MPP_SELECT_LOCAL
MPP 系统下设置当前会话是否只查询本节点数据。如果不设置,表示可以查询全部节点数据
--local_flag: 设置标记,0:查询全部节点数据;1:只查询本节点数据
SP_SET_SESSION_MPP_SELECT_LOCAL(1); 
2. SF_GET_SESSION_MPP_SELECT_LOCAL
查询 MPP 系统下当前会话是否只查询本节点数据。
0 表示查询全部节点数据, 1 表示只查询本节点数据。
select SF_GET_SESSION_MPP_SELECT_LOCAL() ;
3. SP_SET_SESSION_LOCAL_TYPE
MPP 下本地登录时,设置本会话上是否允许 DDL 操作。本地登录默认不允许 DDL 操作。
ddl_flag 0 表示不允许当前本地会话执行 DDL 操作, 1 表示允许。
MPP 下本地登录会话。
SP_SET_SESSION_LOCAL_TYPE (1);
CREATE TABLE TEST(C1 INT);
SP_SET_SESSION_LOCAL_TYPE (0);
4. SF_GET_EP_SEQNO
根据查询出的行数据的 ROWID 获取本条数据来自哪个 EP
rowid :行数据的 ROWID 。 
返回值 MPP 系统内 EP 的序号。
SELECT SF_GET_EP_SEQNO(ROWID);
5. SF_GET_SELF_EP_SEQNO
获取本会话连接的 EP 序号。
返回:  本会话连接的 EP 序号。
SELECT SF_GET_SELF_EP_SEQNO();
6. SP_GET_EP_COUNT
统计 MPP 环境下表在各个节点的数据行数。
参数说明:
SCH_NAME :表所在模式名
TAB_NAME :表名
SP_GET_EP_COUNT('SYSDBA','T');
4.MPP下系统与guo'c系统视图常见用法
1. 获取会话连接的 EP 的节点序号
SELECT SF_GET_SELF_EP_SEQNO();
2. 根据 ROWID 获取本行数据来自哪个 EP
SELECT SF_GET_EP_SEQNO(ROWID);
3. 获取 EP 节点配置信息
SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
4. 获取当前会话连接的实例名
SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
5. 获取 MPP 系统内所有 EP 的所有会话
SELECT * FROM V$SESSIONS;
6. 获取当前连接的实例上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
7. 获取实例 EP01 上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = (SELECT DISTINCT EP_SEQNO FROM V$MPP_CFG_ITEM WHERE INST_NAME ='EP01');
8. 获取表 TEST 在每个实例上的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','TEST');
9. 获取所接实例上的表 TEST 的使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST');   
10. 获取每个实例上的表 TEST 使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST'), NAME FROM V$INSTANCE;
11. 获取所有实例上表 TEST 的总使用空间
SELECT SUM(TOTAL_SIZE) FROM (SELECT TABLE_USED_PAGES('SYSDBA','TEST') TOTAL_SIZE, NAME FROM V$INSTANCE);
使用限制: 
DM MPP 支持绝大多数单机版 DM 的功能,但在某些小的功能点使用上存在一些使用限制,具体如下:
MPP 环境下,不支持创建 SET NULL SET DEFAULT 约束检查规则的引用约束;
MPP 环境下不支持创建外部表、间隔分区表;
MPP 环境下不支持修改表的 ADD [COLUMN] < 列名 >[<IDENTITY 子句 >] 子句;
MPP 环境下不支持创建位图索引、空间索引、数组索引;
MPP 环境下位图连接索引涉及的维度表需 FULLY 分布;
MPP 环境下不支持索引的 ONLINE 选项;
MPP 环境下不支持视图的 WITH CHECK OPTION 操作;
MPP 环境下不支持闪回查询;
MPP 环境下不支持物化视图日志;
MPP EP 创建数据库时指定的编码格式应相同,否则可能造成乱码问题;
MPP 环境下 INI 参数 MVCC_RETRY_TIMES 无效,发生 MVCC 冲突时直接报错;
MPP 环境下不支持 DBMS_JOB 包;
MPP 环境下日志辅助表不支持 FULLY 分布
MPP 系统动态扩容
1.禁止系统ddl操作
全局登录 MPP 系统任一节点,执行下面的语句禁止系统的 DDL 操作。
SP_DDL_FORBIDEN(1);
2.克隆数据库
数据库克隆的目的是把系统中的对象定义信息进行备份,用于恢复到新加的节点上,生成的备份集位于指定的目录备份集中。
MPP 系统处于运行状态,采用联机 DDL 克隆方式(需要配置本地归档)。全局登录 MPP 系统任一节点,执行下面的语句。
BACKUP DATABASE DDL_CLONE BACKUPSET 'CLONE';
生成的备份集保存在当前登陆节点 bak 路径中的 clone 目录中。
MPP 系统处于退出状态,选择 MPP 系统任一节点使用 DMRMAN 工具进行脱机备份。
RMAN>backup database 'c:\dmdbms\data\dameng\dm.ini' ddl_clone backupset 'clone';
生成的备份集保存在当前备份节点 bak 路径中的 clone 目录中。
3.脱机还原
在新增节点上执行脱机还原。手动拷贝克隆的备份集目录 clone 到新增节点 EP03 bak 目录中,使用 DMRMAN 工具进行脱机还原并更新数据库。
RMAN>RESTORE DATABASE 'c:\dmdbms\data\dameng\dm.ini' FROM BACKUPSET 'c:\dmdbms\data\dameng\bak\clone';
RMAN>RECOVER DATABASE 'c:\dmdbms\data\DAMENG\dm.ini' FROM BACKUPSET 'c:\dmdbms\data\dameng\bak\clone';
RMAN>RECOVER DATABASE ' c:\dmdbms\data\DAMENG\dm.ini' UPDATE DB_MAGIC;
若要增加多个节点,则依次执行拷贝、脱机还原和更新数据库步骤。
4.配置新增节点的dmmal.ini
为新增的节点配置 dmmal.ini ,其中包含扩容前 MPP 系统的节点,以及新增节点 EP03
的信息。
添加:
[MAL_INST3]
MAL_INST_NAME = EP03
MAL_HOST = 192.168.0.32
MAL_PORT = 5271
MAL_INST_HOST = 192.168.1.31
MAL_INST_PORT = 5238
修改新增节点的 dm.ini 文件中的如下配置项:
INSTANCE_NAME = EP03
PORT_NUM = 5236
MAL_INI = 1
MPP_INI = 1
5.mount方式启动新增节点
MOUNT 方式启动新增节点 EP03 ,登录后执行如下命令。
SP_DDL_FORBIDEN(1);
ALTER DATABASE OPEN FORCE;
MOUNT 方式启动的目的是防止启动后有用户执行 DDL 操作,因此先禁止 DDL 后再OPEN。
6.动态添加MAL
分别本地登录 MPP 系统中原有的每个节点,执行下列语句为每个原有节点的 MAL 配置增加新增节点信息。
--设置本地 MAL 配置状态
SF_MAL_CONFIG(1,0);
--增加 MAL 配置
SF_MAL_INST_ADD('MAL_INST3','EP03','192.168.0.32',5271, '192.168.1.31',5238);
--应用 MAL 配置
SF_MAL_CONFIG_APPLY();
--重置本地 MAL 配置状态
SF_MAL_CONFIG(0,0);
7.增加MPP节点,设置表的标记
全局登录 MPP 系统原有节点中的任一个,执行下列语句。
--广播方式设置 MAL 配置状态
SF_MAL_CONFIG(1,1);
--保存老的 HASHMAP
SF_MPP_SAVE_HASHMAP();
--增加 MPP 实例 EP03
SF_MPP_INST_ADD('service_name3', 'EP03');
增加节点配置后,之前的连接失效,需要断开连接,重新全局登录,然后执行下列语句。
--设置分布表的重分发状态
SF_MPP_REDIS_STATE_SET_ALL();
--广播方式重置 MAL 配置状态
SF_MAL_CONFIG(0,1);
--增加节点之后,可以放开 DDL 限制
SP_DDL_FORBIDEN(0);
至此,节点 EP03 已经顺利地加入 MPP 系统中。但是, MPP 系统动态扩容并没有完成,在原有 MPP 系统中建立的哈希分布表、复制分布表和随机分布表需要在增加节点后的 MPP
系统中进行数据重分发。
数据重分发
MPP 动态增加节点后,原系统中的哈希分布表、复制分布表和随机分布表需要进行数据重分发,范围分布表和 LIST 分布表不需要进行数据重分发。
1.哈希分布表数据重分发
具体步骤如下:
1) 全局登录新增节点 EP03 (如果新增多个节点,则要分别全局登录每个新增节点)
2) 设置本 session 可对表进行重分发(插入和删除),执行如下语句:
SET_SESSION_MPP_REDIS(1);
3) 设置重分发状态,执行如下语句:
SF_MPP_REDIS_STATE_SET('SYSDBA','T1',2);
SF_MPP_REDIS_STATE_SET('SYSDBA','T2',2);
4) 进行查询插入,执行如下语句:
INSERT INTO T1 SELECT * FROM T1 WHERE EP_SEQNO('T1')= 2; --2 为本节点 SEQNO
COMMIT;
INSERT INTO T2 SELECT * FROM T2 WHERE EP_SEQNO('T2')= 2; --2 为本节点 SEQNO
COMMIT;
5) 设置待删除数据状态,执行如下语句:
SF_MPP_REDIS_STATE_SET('SYSDBA','T1',3);
SF_MPP_REDIS_STATE_SET('SYSDBA','T2',3);
6) 本地登录每个 MPP 系统的原有节点,删除分发出去的数据。执行如下语句:
SET_SESSION_MPP_REDIS(1);
对于普通表 T1 ,执行如下语句:
DELETE FROM T1 WHERE EP_SEQNO('T1')=2; --2 为本节点 SEQNO
如果新增了多个节点,则需要删除分发到所有这些新增节点的数据,语句形如:
DELETE FROM T1 WHERE EP_SEQNO('T1')=新加节点 MPP 序号 1 OR EP_SEQNO('T1')=新加节点
MPP 序号 2 ......
对于 HUGE T2 ,由于直接使用 DELETE 效率较低,采用查询插入再删除表的方
式:
-- 放开本地登录下的 DDL 限制
SP_SET_SESSION_LOCAL_TYPE(1);
CREATE TABLE STR_TAB(A VARCHAR);
INSERT INTO STR_TAB SELECT TABLEDEF('SYSDBA','T2') FROM DUAL;
ALTER TABLE T2 RENAME TO T2_REDIS;
DECLARE
sqltxt VARCHAR;
BEGIN
SELECT * INTO sqltxt FROM STR_TAB;
EXECUTE IMMEDIATE sqltxt;
END;
/
SF_MPP_REDIS_STATE_SET('SYSDBA','T2',3);
INSERT INTO T2 SELECT * FROM T2_REDIS WHERE EP_SEQNO('T2_REDIS')= 2;
DROP TABLE T2_REDIS;
DROP TABLE STR_TAB;
COMMIT;
在这个步骤中需要注意的是,如果表上建有二级索引,则需要重新创建二级索引。
7) 所有新增节点执行完上述步骤后,重置表的分发状态为普通状态,执行如下语句:
SF_MPP_REDIS_STATE_SET('SYSDBA','T1',0);
  1. 复制发布表数据重发布
具体步骤如下:
1) 本地登录新增节点 EP03 (如果新增多个节点,则要分别本地登录每个新增节点),
执行如下语句:
SET_SESSION_MPP_REDIS(1);
SP_SET_SESSION_LOCAL_TYPE(1); --放开本地登录下的 DDL 限制
2) 创建新增节点 EP03 到某一原有节点间的外部链接(如果新增多个节点,则要为每个新增节点创建一个这样的外部链接)
CREATE LINK LINK_EP01 CONNECT WITH SYSDBA IDENTIFIED BY SYSDBA USING 'EP01';
3) 执行查询插入
INSERT INTO T3 SELECT * FROM T3@LINK_EP01;
4) 删除外部链接
DROP LINK LINK_EP01;
5) 全局登录 MPP 系统,重置表的分发状态为普通状态,执行如下语句:
SET_SESSION_MPP_REDIS(1);
SF_MPP_REDIS_STATE_SET('SYSDBA','T3',0);
3.随机分布表数据重分发
具体步骤如下:
1) 本地登录新增节点 EP03 (如果新增多个节点,则要分别本地登录每个新增节点),
执行如下语句:
SET_SESSION_MPP_REDIS(1);
SP_SET_SESSION_LOCAL_TYPE(1); --放开本地登录下的 DDL 限制
2) 设置表的重分发状态
SF_MPP_REDIS_STATE_SET('SYSDBA','T4',2);
3) 创建 EP03 与每个原有节点间的外部链接(如果新增多个节点,则要为每个新增节
点创建这样的外部链接)
CREATE LINK LINK1 CONNECT WITH SYSDBA IDENTIFIED BY SYSDBA USING 'EP01';
CREATE LINK LINK2 CONNECT WITH SYSDBA IDENTIFIED BY SYSDBA USING 'EP02';
4) 本地登录每个原有节点,查出每个原有节点上表 T4 min(ROWID) max(ROWID)。
SELECT MIN(ROWID),MAX(ROWID) FROM T4;
5) 在新增节点 EP03 上,分别使用连接每个原有节点的外部链接执行查询插入。
INSERT INTO T4 SELECT * FROM T4@LINK1 WHERE ROWID BETWEEN V_MIN1 AND V_MIN1 + (V_MAX1 - V_MIN1)*1/3;
INSERT INTO T4 SELECT * FROM T4@LINK2 WHERE ROWID BETWEEN V_MIN2 AND V_MIN2 + (V_MAX2 - V_MIN2)*1/3;
说明: V_MIN1 V_MAX1 对应第 4) 步中查询出的 EP01 上的 min(ROWID) 和 max(ROWID);V_MIN2 和 V_MAX2 对应第 4)步中查询出的 EP02 上的 min(ROWID)和 max(ROWID);1/3 中的 3 表示动态增加节点后的节点总数。
如果有多个新增节点,则节点 2、节点 3……上执行的查询插入语句形如:
INSERT INTO T4 SELECT * FROM T4@LINKx WHERE ROWID BETWEEN V_MINx + (V_MAXx - V_MINx)*N_SEQ/N_SITE_NEW_TOTAL+ 1 AND V_MINx + (V_MAXx - V_MINx)*(N_SEQ + 1)/N_SITE_NEW_TOTAL;
说明: V_MINx V_MAXx 的意义与前面说明的一致; N_SEQ 表示新增节点序号,新增节点 1 的 N_SEQ 为 0,新增节点 2 的 N_SEQ 为 1……;N_SITE_NEW_TOTAL 表示动态增加节点后的节点总数。
6) 全局登录某一节点,设置表的待删除数据状态
SF_MPP_REDIS_STATE_SET('SYSDBA','T4',3);
7) 本地登录每个原有节点,删除分发出去的数据,执行如下语句:
SET_SESSION_MPP_REDIS(1);
DELETE FROM T4 WHERE ROWID BETWEEN V_MIN AND V_MIN + (V_MAX - V_MIN) * 1/3;
说明: V_MIN V_MAX 对应第 4) 步中查询出的 min(ROWID) max(ROWID) 1/3 中的 1 表示新增节点数;3 表示动态增加节点后的节点总数。
8) 每个原有节点都完成删除后,都执行提交操作。
COMMIT;
9) 全局登录某个节点,重置表的分发状态为普通状态,执行如下语句:
SET_SESSION_MPP_REDIS(1);
SF_MPP_REDIS_STATE_SET('SYSDBA','T4',0);
10) 本地登录 EP03 ,删除之前创建的到每个原有节点的外部链接(如果新增多个节点,
则要本地登录每个新增节点删除这些外部链接)
DROP LINK LINK1;
DROP LINK LINK2;
至此,原有 MPP 的哈希分布表、复制分布表和随机分布表都已进行了数据重分发,但
是还需要更新扩容后的 MPP 系统的控制文件中的数据分布控制结构。
全局登录某个节点,执行如下语句:
SF_MAL_CONFIG(1,1);
SF_MPP_SAVE_HASHMAP();
SF_MAL_CONFIG(0,1);
MPP 系统动态扩容全部完成!
MPP环境的DDL克隆与还原
DDL 克隆可以把系统中的对象定义信息进行备份,之后再还原到别的数据库节点。利用这个功能,可以将一个 MPP 系统的对象定义信息克隆并还原到另一个 MPP 系统中,且两个
MPP 系统的节点数不必一致。
由于 MPP 环境下执行 DDL 克隆时会将 dmmpp.ctl 也一并备份还原,若还原的 MPP 环境与备份环境不一致时,会导致还原后的 MPP 系统不能正确启动。因此在
执行完还原操作后,需要使用使用 dmctlcvt 工具,将当前环境的 dmmpp.ini 再次生成dmmpp.ctl,替换还原生成的 dmmpp.ctl.
MPP 主备系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值