DM MPP 环境搭建与使用

本章介绍在实际应用环境中应如何规划、配置与部署DM MPP系统。通过阅读本章,读者可以从根据应用实际情况制定一个合适的DM MPP方案开始,完成DM MPP的配置与部署,建立应用分布表并载入数据。

3.1 制定合适的DM MPP方案

对于一个应用系统,如果制定出一个合适的DM MPP解决方案呢?可以主要从以下几个方面入手:

  • 应用是否适合使用DM MPP方案

DM MPP解决方案具有高性价比、高可靠性、功能强大、可动态扩容等优点,但也是有其局限性的,并非是万能解药。DM MPP主要针对海量数据的OLAP应用而研发,在合理规划的前提下,对普通的、并发量不大的一般OLTP或混合类型应用也适用,但不适合于高并发操作的OLTP类型应用。

  • 需要使用多大规模的DM MPP方案

确定应用适合使用DM MPP解决方案后,接下来需要根据应用规模确定MPP的节点数。DM MPP最多支持1024个EP节点,在实际应用中具体使用几个EP节点则应根据应用数据规模、硬件规划、网络带宽和项目预算情况而定。理论上来说节点数越多越好,这样并行越充分,效率越高。但这也不是绝对的,方案设计者应同时考虑到EP节点间网络资源的情况,如果网络是瓶颈,则并不是节点数越多越好。

  • 需要配置怎样的硬件资源

DM MPP采用完全对等不共享架构,不需要专用硬件,可以采用普通的PC服务器组建集群。需要注意的是,DM
MPP系统需要通过网络在各EP间传递数据,因此网络的带宽对于MPP系统的效率非常重要,建议配置千兆或万兆内部网络,用户应根据实际需求、配置成本及实际条件等综合评估决定。

  • 如何设计应用表

DM MPP系统中的数据分布在各EP中,支持表数据的哈希分布、随机分布、复制分布、范围分布、LIST分布类型,用户应根据表在应用中的特点选择合适的分布类型。

除了表的分布类型,管理员还应根据应用的实际情况确定表的分布列、分布列的数据类型以及是否需要组合分布列等,对于查询连接中使用频率较高的连接键等可以考虑作为分布列。

  • 如何配置DM MPP系统参数

DM数据库实例配置文件dm.ini和MAL系统配置文件dmmal.ini中一些参数的配置会影响MPP系统的运行性能,管理员应根据应用和硬件的实际情况对这些参数进行适当的配置。同时应注意各EP必须保持一致的INI参数。

3.2 DM MPP环境搭建

本节我们将以一个简单的两节点MPP为例,介绍手动配置与搭建DM MPP环境的步骤。DM提供了DM web版数据库管理工具,可以很方便地搭建DM MPP。但是阅读本节将更有利于读者掌握配置的流程,更好地在MPP系统运行时进行管理。

3.2.1 系统规划

本例配置一个两节点MPP。两个节点都配置两块网卡,一块接入内部网络交换模块,一块接入到外部交换机。两节点实例名分别为EP01和EP02,相关的IP、端口等规划见下表。

表4.1 MPP系统规划
实例名 MAL_INST_HOST MAL_INST_PORT MAL_HOST MAL端口 MPP_SEQNO
EP01 192.168.1.11 5236 192.168.0.12 5269 0
EP02 192.168.1.21 5237 192.168.0.22 5270 1
注意

DM MPP各EP使用的DM服务器版本应一致,同时还应注意各EP所在主机的操作系统位数、大小端模式、时区及时间设置都应一致,否则可能造成意想不到的错误。

3.2.2 配置dm.ini

首先,在EP01和EP02上分别创建数据库,用户可以使用DM的图形化客户端工具“数据库配置助手”或命令行工具dminit创建数据库。

注意

在各EP上创建数据库时,要求有些初始化参数必须所有EP都相同,见3.3.1 dm.ini MPP相关配置项。我们建议各EP的数据库初始化参数都保持一致,以免产生错误。

分别对两个实例的dm.ini进行配置。

修改EP01的dm.ini的以下几个参数如下:

INSTANCE_NAME = EP01

PORT_NUM = 5236

MAL_INI = 1

MPP_INI = 1

修改EP02的dm.ini的以下几个参数如下:

INSTANCE_NAME = EP02

PORT_NUM = 5237

MAL_INI = 1

MPP_INI = 1

3.2.3 配置dmmal.ini

为两个EP配置dmmal.ini如下,配置完全一样,EP间可互相拷贝。dmmal.ini与dm.ini放在相同的目录下。

[MAL_INST1]

MAL_INST_NAME = EP01

MAL_HOST = 192.168.0.12

MAL_PORT = 5269

MAL_INST_HOST = 192.168.1.11

MAL_INST_PORT = 5236

[MAL_INST2]

MAL_INST_NAME = EP02

MAL_HOST = 192.168.0.22

MAL_PORT = 5270

MAL_INST_HOST = 192.168.1.21

MAL_INST_PORT = 5237

3.2.4 配置dmmpp.ctl

dmmpp.ctl是一个二进制文件,用户不能直接配置,需要先配置dmmpp.ini。

配置dmmpp.ini如下:

[SERVICE_NAME1]

MPP_SEQ_NO = 0

MPP_INST_NAME = EP01

[SERVICE_NAME2]

MPP_SEQ_NO = 1

MPP_INST_NAME = EP02

使用DM提供的工具dmctlcvt将dmmpp.ini转换成dmmpp.ctl,dmctlcvt工具在DM安装目录的“bin”子目录中。

转换生成的dmmpp.ctl需要放在与dm.ini同一个目录。假设DM的安装路径为c盘根目录,下面的命令将dmmpp.ini转换为dmmpp.ctl,命令中的“TYPE=2”参数表示将文本文件转换成控制文件,也可以使用“TYPE=1”参数进行逆向转换。

dmctlcvt TYPE=2 SRC=c:\dmdbms\data\dameng\dmmpp.ini DEST=c:\dmdbms\data\dameng\dmmpp.ctl

将生成的dmmpp.ctl拷贝至另一EP,保证MPP系统中所有EP的dmmpp.ctl完全相同。

3.2.5 运行MPP

经过前面四个步骤,DM MPP环境已经配置完成了。分别启动EP01和EP02的DM数据库实例(顺序不分先后),DM MPP系统即能正常运行,用户就可以登录任一EP进行数据库操作了。

3.3 建立分布表

DM MPP支持表数据的哈希分布、随机分布、复制分布、范围分布、LIST分布类型,用户可根据实际情况选择合适的分布类型。

MPP的数据分布类型和具体设置在建表时指定,语法如下,建表的其他语法分支可参见《DM8_SQL语言使用手册》。

CREATE [[GLOBAL] TEMPORARY] TABLE <表名定义> <表结构定义>;

<表结构定义>::=<表结构定义1> | <表结构定义2>

<表结构定义1>::= (<列定义> {,<列定义>}[,<表级约束定义>{,<表级约束定义>}]) [ON COMMIT <DELETE | PRESERVE> ROWS] [<PARTITION子句>] [<空间限制子句>] [<STORAGE子句>] [<压缩子句>] [<ROW MOVEMENT子句>] [<DISTRIBUTE子句>]

<表结构定义2>::= [ON COMMIT <DELETE | PRESERVE> ROWS] [<空间限制子句>]
[<STORAGE子句>] [<压缩子句>]AS <不带INTO的SELECT语句>[<DISTRIBUTE子句>];

<DISTRIBUTE子句>::=DISTRIBUTED[<RANDOMLY>|<FULLY>]

|DISTRIBUTED BY [<HASH>] (<列名> {,<列名>})

|DISTRIBUTED BY RANGE (<列名> {,<列名>})(<范围分布项> {,<范围分布项>})

|DISTRIBUTED BY LIST (<<列名> {,<列名>}>)(<LIST分布项>
{,<LIST分布项>})

<范围分布项>::= VALUES LESS THAN (<表达式>{,<表达式>}) ON <实例名>

|VALUES EQU OR LESS THAN (<表达式>{,<表达式>}) ON <实例名>

<LIST分布项>::= VALUES (<表达式>{,<表达式>}) ON<实例名>

下面给出几个简单的创建不同类型分布表的例子。

例1:创建哈希分布表T_HASH,分布列为C1。

CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1);

例2:创建随机分布表T_RANDOM。

CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY;

例3:创建复制分布表T_FULLY。

CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY;

例4:创建范围分布表T_RANGE,分布列为C1。

CREATE TABLE T_RANGE (C1 INT, C2 CHAR(10)) DISTRIBUTED BY RANGE (C1) (VALUES EQU OR LESS THAN (100) ON EP01, VALUES LESS

THAN(MAXVALUE) ON EP02);

例5:创建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);

例6:创建哈希分布表的范围水平分区表。

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索引。

3.4 快速数据装载

DM MPP特别适合于海量数据的存储和处理,因此在应用中常常面临将大量数据从某个或某些历史数据库中装载到MPP系统的需求。为了满足海量数据的快速装载需求,DM提供了快速装载工具dmfldr,能够对DM单机版和MPP系统进行海量数据的快速装载。

dmfldr为命令行工具,使用时必须指定必要的执行参数,具体可参看《DM8_dmfldr使用手册》,本文档就不再详细介绍了,这里仅对dmfldr中MPP相关的参数MPP_CLIENT进行说明。

dmfldr支持MPP环境下的两种数据加载模式:客户端分发模式和本地分发模式,通过参数MPP_CLIENT进行设置。使用客户端分发模式时,数据在dmfldr客户端进行分发然后直接向指定EP发送数据;使用本地分发模式时,每个EP对应一个dmfldr和一份数据,每个dmfldr只选择出对应本节点的数据并发送,不管其他节点的数据。默认使用客户端分发模式。

3.5 停止MPP系统

需要停止DM MPP系统的运行时,只需要停止每个EP的DM实例即可,没有特别的顺序要求。

若在DM MPP系统的运行过程中,某一EP发生故障停机,则整个MPP系统将处于不能正常服务的状态。当前所有的用户会话会被系统断开,不能进行全局登录,只能进行本地登录。因此,为了保证MPP系统的高可用性,我们强烈建议采用DM MPP与数据守护相结合的部署方案。

3.6 MPP相关系统过程与函数

为了方便MPP环境下数据库应用的编写,DM提供了一些MPP相关的系统过程与函数。

  1. SP_SET_SESSION_MPP_SELECT_LOCAL

定义:

VOID

SP_SET_SESSION_MPP_SELECT_LOCAL(

local_flag int

)

功能说明:

MPP系统下设置当前会话是否只查询本节点数据。如果不设置,表示可以查询全部节点数据。

参数说明:

local_flag: 设置标记,0:查询全部节点数据;1:只查询本节点数据。

例:

SP_SET_SESSION_MPP_SELECT_LOCAL(1);
  1. SF_GET_SESSION_MPP_SELECT_LOCAL

定义:

INT

SF_GET_SESSION_MPP_SELECT_LOCAL()

功能说明:

查询MPP系统下当前会话是否只查询本节点数据。

返回值:

0表示查询全部节点数据,1表示只查询本节点数据。

例:

SELECT SF_GET_SESSION_MPP_SELECT_LOCAL();
  1. SP_SET_SESSION_LOCAL_TYPE

定义:

VOID

SP_SET_SESSION_LOCAL_TYPE (

ddl_flag int

)

功能说明:

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);
  1. SF_GET_EP_SEQNO

定义:

INT

SF_GET_EP_SEQNO (

rowid bigint

)

功能说明:

根据查询出的行数据的ROWID获取本条数据来自哪个EP。

参数说明:

rowid:行数据的ROWID。

返回值:

MPP系统内EP的序号。

例:

SELECT SF_GET_EP_SEQNO(ROWID);
  1. SF_GET_SELF_EP_SEQNO

定义:

INT

SF_GET_SELF_EP_SEQNO ()

功能说明:

获取本会话连接的EP序号。

返回值:

本会话连接的EP序号。

例:

SELECT SF_GET_SELF_EP_SEQNO();
  1. SP_GET_EP_COUNT

定义:

INT

SP_GET_EP_COUNT (

SCH_NAME VARCHAR(128),

TAB_NAME VARCHAR(128)

)

功能说明:

统计MPP环境下表在各个节点的数据行数。

参数说明:

SCH_NAME:表所在模式名

TAB_NAME:表名

例:

SP_GET_EP_COUNT('SYSDBA','T');

3.7 MPP下系统过程与系统视图常见用法

本节给出一些DM MPP环境下,数据库应用对系统过程与系统视图的常见用法示例,关于系统视图的具体介绍可参见《DM8系统管理员手册》附录2。

  1. 获取会话连接的EP的节点序号
SELECT SF_GET_SELF_EP_SEQNO();
  1. 根据ROWID获取本行数据来自哪个EP
SELECT SF_GET_EP_SEQNO(ROWID);
  1. 获取EP节点配置信息
SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
  1. 获取当前会话连接的实例名
SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
  1. 获取MPP系统内所有EP的所有会话
SELECT * FROM V$SESSIONS;
  1. 获取当前连接的实例上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
  1. 获取实例EP01上的所有会话
SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = (SELECT DISTINCT
EP_SEQNO FROM V$MPP_CFG_ITEM WHERE INST_NAME ='EP01');
  1. 获取表TEST在每个实例上的数据行数
CALL SP_GET_EP_COUNT('SYSDBA','TEST');
  1. 获取所接实例上的表TEST的使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST');
  1. 获取每个实例上的表TEST使用空间
SELECT TABLE_USED_PAGES('SYSDBA','TEST'), NAME FROM V$INSTANCE;
  1. 获取所有实例上表TEST的总使用空间
SELECT SUM(TOTAL_SIZE) FROM (SELECT TABLE_USED_PAGES('SYSDBA','TEST')
TOTAL_SIZE, NAME FROM V$INSTANCE);

3.8 使用说明

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分布。
微信扫码
分享文档
扫一扫
联系客服