在之前的博客看了MPP的概念和环境搭建,如下:
DM7 达梦数据库 大规模并行处理 MPP (1) — 基本概念和原理
https://www.cndba.cn/dave/article/3657
DM7 达梦数据库 大规模并行处理 MPP (2) — 环境搭建和使用
https://www.cndba.cn/dave/article/3658
1 常用的 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);
2.SF_GET_SESSION_MPP_SELECT_LOCAL
定义:
INT
SF_GET_SESSION_MPP_SELECT_LOCAL()
功能说明:查询 MPP 系统下当前会话是否只查询本节点数据。
返回值:0 表示查询全部节点数据,1 表示只查询本节点数据。
例:
SELECT SF_GET_SESSION_MPP_SELECT_LOCAL();
3. 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);
4. SF_GET_EP_SEQNO
定义:
INT
SF_GET_EP_SEQNO (
rowid bigint
)
功能说明:根据查询出的行数据的 ROWID 获取本条数据来自哪个 EP。
参数说明:rowid:行数据的 ROWID。
返回值:MPP 系统内 EP 的序号。
例:
SELECT SF_GET_EP_SEQNO(ROWID);
5. SF_GET_SELF_EP_SEQNO
定义:
INT
SF_GET_SELF_EP_SEQNO ()
功能说明:获取本会话连接的 EP 序号。
返回值:本会话连接的 EP 序号。
例:
SELECT SF_GET_SELF_EP_SEQNO();
6. 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');
2 示例
1. 获取会话连接的 EP 的节点序号
SQL> conn cndba/"www.cndba.cn"
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 14.244(ms)
SQL> SELECT SF_GET_SELF_EP_SEQNO();
LINEID SF_GET_SELF_EP_SEQNO()
---------- ----------------------
1 0
used time: 2.117(ms). Execute id is 230878.
SQL>
2.根据 ROWID 获取本行数据来自哪个 EP
SQL> SELECT SF_GET_EP_SEQNO(ROWID);
LINEID SF_GET_EP_SEQNO(ROWID)
---------- ----------------------
1 1
used time: 1.467(ms). Execute id is 793206.
SQL>
SQL> select rowid,c1 from t_hash limit 5;
LINEID ROWID C1
---------- -------------------- -----------
1 288230376151711746 1
2 288230376151711747 3
3 288230376151711748 5
4 288230376151711749 7
5 288230376151711750 9
used time: 12.569(ms). Execute id is 230880.
SQL>
SQL> SELECT SF_GET_EP_SEQNO(288230376151711750);
LINEID SF_GET_EP_SEQNO(288230376151711750)
---------- -----------------------------------
1 1
used time: 1.471(ms). Execute id is 230882.
SQL>
3.获取 EP 节点配置信息
SQL> SELECT * FROM V$MPP_CFG_ITEM WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
LINEID SERVICE_NAME INST_NAME EP_SEQNO STATE
---------- ------------- --------- ----------- -----
1 SERVICE_NAME1 DAVE01 0 OK
2 SERVICE_NAME2 DAVE02 1 OK
used time: 7.373(ms). Execute id is 793212.
SQL>
SQL> SELECT * FROM V$MPP_CFG_ITEM WHERE EP_SEQNO = SF_GET_SELF_EP_SEQNO();
LINEID SERVICE_NAME INST_NAME EP_SEQNO STATE
---------- ------------- --------- ----------- -----
1 SERVICE_NAME1 DAVE01 0 OK
2 SERVICE_NAME1 DAVE01 0 OK
used time: 8.654(ms). Execute id is 230890.
SQL>
4. 获取当前会话连接的实例名
SQL> SELECT NAME FROM V$INSTANCE WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
LINEID NAME
---------- ------
1 DAVE02
used time: 7.516(ms). Execute id is 793204.
SQL>
5. 获取 MPP 系统内所有 EP 的所有会话
SQL>SELECT * FROM V$SESSIONS;
6. 获取当前连接的实例上的所有会话
SQL> SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = SF_GET_SELF_EP_SEQNO();
7. 获取实例 EP01 上的所有会话
SQL> SELECT * FROM V$SESSIONS WHERE SF_GET_EP_SEQNO(ROWID) = (SELECT DISTINCT EP_SEQNO FROM V$MPP_CFG_ITEM WHERE INST_NAME =’DAVE01’);
8. 获取表 TEST 在每个实例上的数据行数
SQL> CALL SP_GET_EP_COUNT('CNDBA','T_HASH');
LINEID SEQNO N_ROWS
---------- ----------- --------------------
1 0 5000
2 1 5000
used time: 43.327(ms). Execute id is 793222.
SQL>
9. 获取所接实例上的表 TEST 的使用空间
SQL> SELECT TABLE_USED_PAGES('CNDBA','T_HASH');
LINEID TABLE_USED_PAGES('CNDBA','T_HASH')
---------- ----------------------------------
1 25
used time: 1.932(ms). Execute id is 793226.
SQL>
10. 获取每个实例上的表 TEST 使用空间
SQL> SELECT TABLE_USED_PAGES('CNDBA','T_HASH'), NAME FROM V$INSTANCE;
LINEID TABLE_USED_PAGES('CNDBA','T_HASH') NAME
---------- ---------------------------------- ------
1 25 DAVE02
2 25 DAVE01
used time: 7.305(ms). Execute id is 793228.
SQL>
11. 获取所有实例上表 TEST 的总使用空间
SQL> SELECT SUM(TOTAL_SIZE) FROM (SELECT TABLE_USED_PAGES('CNDBA','T_HASH') TOTAL_SIZE, NAME FROM V$INSTANCE);
LINEID SUM(TOTAL_SIZE)
---------- --------------------
1 50
used time: 7.583(ms). Execute id is 793230.
SQL>
版权声明:本文为博主原创文章,未经博主允许不得转载。



