DM8_Linux服务脚本
1 服务脚本
在 Linux(Unix)系统中,很多程序的进程是以后台运行的方式启动的,进程以后台方式运行能够保证进程不因终端窗口的关闭而关闭,而且这些进程大多是常驻的,需要长期运行且不中断的。DM 中也有许多这样的程序,这些程序的稳定运行保证了 DM 数据库实例或 DM 集群的正常运行,这些程序就是 DM 服务程序。为了方便用户能够使 DM 服务程序以后台运行的方式启动,我们为 DM 服务程序提供了对应的服务脚本模板。
DM 服务脚本
DM 提供了 14 个服务脚本模板,分为两类:
第一类 位于 bin 目录下,不支持修改模板名称的脚本。分别为:DmAPService 服务、DmAuditMonitor 服务、DmJobMonitor 服务、DmInstanceMonitor 服务。
第二类 位于 bin/service_template 目录下,支持修改模板名称的脚本。分别为:DmServer 服务、DmWatchService 服务、DmMonitorService 服务、DmASMSvrService 服务、DmASMSvrmService 服务、DmCSSService 服务、DmCSSMonitorService 服务。
服务数量管理
不同的脚本服务可运行的数量各不相同。下面分别进行介绍:
第一类服务脚本模板对应的 DM 服务程序,一个 DM 系统只需要运行一个。
第二类服务脚本模板对应的 DM 服务程序,每一种进程均可在同一物理机器上运行一个或多个,同样一台物理机器也可以运行多种服务脚本。用户可以将第二类服务脚本模板拷贝到其他目录,并修改脚本名称。建议用户将服务脚本模板名称作为新服务脚本名称的前缀。
1.3 服务脚本参数修改
使用这些服务脚本前,需要先手动修改服务脚本的参数。
以下将详细讲解各种服务脚本需要设置的参数。
1.3.1 DmAPService
达梦数据库辅助插件服务。dmap 对应的服务脚本模板,不需要修改脚本参数。DmAPService 服务为单实例,即当前达梦数据库系统只可运行一个 DmAPService 服务。
参数名称 | 参数说明 |
|---|---|
DMAP_INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmap.ini 文件路径 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.2 DmAuditMonitor
达梦数据库实时审计监控服务。dmamon 对应的服务脚本模板,DmAuditMonitor 服务为单实例,即当前达梦数据库系统只可运行一个 DmAuditMonitor 服务。
参数名称 | 参数说明 |
|---|---|
INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmamon.ini 文件路径 |
DCR_INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmdcr.ini 文件路径 |
USER_ID | 数据库连接字符串,格式为 username/password@servername:port |
SSL_PATH | 加密通讯(SSL)数据库的 SSL 文件的路径 |
SSL_PWD | 加密通讯(SSL)数据库的 SSL 文件的密码 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.3 DmJobMonitor
达梦数据库实时作业监控。dmjmon 对应的服务脚本模板,DmJobMonitor 服务为单实例,即当前达梦数据库系统只可运行一个 DmJobMonitor 服务。
参数名称 | 参数说明 |
|---|---|
USER_ID | 数据库连接字符串,格式为 username/password@servername:port |
SSL_PATH | 加密通讯(SSL)数据库的 SSL 文件的路径 |
SSL_PWD | 加密通讯(SSL)数据库的 SSL 文件的密码 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.4 DmInstanceMonitor
达梦数据库实例实时监控服务。dmimon 对应的服务脚本模板,除了 SAVE_PROC_OUT 参数,其他参数不需要修改。DmInstanceMonitor 服务为单实例,即当前达梦数据库系统只可运行一个 DmInstanceMonitor 服务。
参数名称 | 参数说明 |
|---|---|
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.5 DmService
达梦数据库实例服务。dmserver 对应的服务脚本模板,一台物理主机可以运行多个 dmserver 实例,同样一台物理主机也可以运行多个 dmserver 的服务脚本。用户可以将服务脚本模板拷贝到其他目录,并修改脚本名称。
参数名称 | 参数说明 |
|---|---|
INI_PATH | 服务脚本所需要的 ini 文件路径,即 dm.ini 文件路径 |
DCR_INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmdcr.ini 文件路径 |
DPC_MODE | DPC 中的实例角色,参数为 BP、MP、SP |
SIGNKEY_PASS | GmSSL signkey.pem 证书文件的口令密码 |
ENCKEY_PASS | GmSSL enckey.pem 证书文件的口令密码 |
START_MODE | 服务启动模式,即 dmserver 启动模式,参数为 open 和 mount |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.6 DmWatcherService
达梦数据库数据守护服务(V4.0)。dmwatcher 对应的服务脚本模板。
参数名称 | 参数说明 |
|---|---|
INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmwatcher.ini 文件路径 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.7 DmMonitorService
达梦数据库数据守护监视器服务(V4.0)。dmmonitor 对应的服务脚本模板。
参数名称 | 参数说明 |
|---|---|
INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmmonitor.ini 文件路径 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.8 DmASMSvrService
达梦数据库集群同步服务。dmasmsvr 对应的服务脚本模板。
参数名称 | 参数说明 |
|---|---|
DCR_INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmdcr.ini 文件路径 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.9 DmASMSvrmService
达梦数据库集群同步服务,专门用于 DMASM 镜像环境。dmasmsvrm 对应的服务脚本模板。
参数名称 | 参数说明 |
|---|---|
DCR_INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmdcr.ini 文件路径 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.10 DmCSSService
达梦数据库集群同步监控服务。dmcss 对应的服务脚本模板。
参数名称 | 参数说明 |
|---|---|
DCR_INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmdcr.ini 文件路径 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.3.11 DmCSSMonitorService
达梦数据库自动存储管理器服务。dmcssm 对应的服务脚本模板。
参数名称 | 参数说明 |
|---|---|
INI_PATH | 服务脚本所需要的 ini 文件路径,即 dmcssm.ini 文件路径 |
IS_DISABLED | 是否禁用服务脚本,是指为 true 则禁用此脚本 |
SAVE_PROC_OUT | 是否在脚本服务日志文件中记录脚本服务运行过程中产生的日志。TRUE:是;FALSE:否。缺省为 FALSE |
1.4 服务使用命令
服务脚本支持的命令包括:
start|stop|status|condrestart|restart
注意事项:stop 时
如果服务停止失败,服务脚本将循环去关闭服务进程,服务脚本不会主动强杀服务进程,此时需要用户手动停止服务进程。
DMDSC环境下,必须依次停止各个节点服务,即仅当一个服务成功停止后才能停止下一个服务。
动态管理和性能视图
系统信息
包括数据库版本、实例统计信息、资源限制信息、进程信息、全局索引 IID 信息、事件信息;涉及的动态视图有 V$SESSIONS、V$INSTANCE、V$RESOURCE_LIMIT、V$PROCESS、V$IID、V$SYSSTAT 等。
存储信息
包括数据库信息、表空间信息、数据文件信息、日志相关信息;涉及的动态视图有 V$DATAFILE、V$DATABASE、V$TABLESPACE、V$HUGE_TABLESPACE、V$RLOGFILE 等。
2.3 内存管理信息
包括内存池使用情况、BUFFER 缓冲区信息、虚拟机信息、虚拟机栈帧信息;涉及的动态视图有 V$MEM_POOL、V$VMS、V$STKFRM、V$BUFFERPOOL、V$BUFFER_LRU_FIRST、V$BUFFER_UPD_FIRST、V$BUFFER_LRU_LAST、V$BUFFER_UPD_LAST 等。
2.4 事务信息
包括所有事务信息、当前事务可见的事务信息、事务锁信息(TID 锁、对象锁)、回滚段信息、事务等待信息;涉及的动态视图有 V$TRX、V$TRXWAIT、V$TRX_VIEW、V$LOCK、V$PURGE 等。
2.5 线程信息
包括所有活动线程信息、线程作业信息、线程锁信息、线程的资源等待信息;涉及的动态视图有 V$THREADS、V$LATCHES 等。
2.6 历史模块
包括 SQL 历史信息、SQL 执行节点历史信息、检查点历史信息、命令行历史信息、线程等待历史信息、死锁历史信息、回滚段历史信息、运行时错误历史信息、DMSQL 程序中执行 DDL 语句的历史信息、返回大数据量结果集的历史信息、所有活动过线程的历史信息;涉及的动态视图有 V$CKPT_HISTORY、V$CMD_HISTORY、V$DEADLOCK_HISTORY、V$PLSQL_DDL_HISTORY、V$PRE_RETURN_HISTORY、V$RUNTIME_ERR_HISTORY、V$WAIT_HISTORY、V$SQL_HISTORY、V$SQL_NODE_HISTORY、V$SQL_NODE_NAME 等。
2.7 缓存信息
包括 SQL 语句缓存、执行计划缓存、结果集缓存、字典缓存信息、字典缓存中的对象信息、代价信息;涉及的动态视图有 V$CACHEITEM、V$SQL_PLAN、V$CACHERS、V$CACHESQL、V$DICT_CACHE_ITEM、V$DICT_CACHE 等。
2.8 会话信息
包括连接信息、会话信息;涉及的动态视图有 V$CONNECT、V$STMTS、V$SESSIONS 等。
3 执行计划
执行计划是 SQL 语句的执行方式,由查询优化器为语句设计的执行方式,交给执行器去执行。在 SQL 命令行使用 EXPLAIN 可以打印出语句的执行计划。
3.1 创建测试表及索引
CREATE TABLE T1(C1 INT,C2 CHAR);
CREATE TABLE T2(D1 INT,D2 CHAR);
CREATE INDEX IDX_T1_C1 ON T1(C1);
INSERT INTO T1 VALUES(1,'A');
INSERT INTO T1 VALUES(2,'B');
INSERT INTO T1 VALUES(3,'C');
INSERT INTO T1 VALUES(4,'D');
INSERT INTO T2 VALUES(1,'A');
INSERT INTO T2 VALUES(2,'B');
INSERT INTO T2 VALUES(5,'C');
INSERT INTO T2 VALUES(6,'D');
3.2 查看执行计划
EXPLAIN SELECT A.C1+1,B.D2 FROM T1 A, T2 B WHERE A.C1 = B.D1;
3.3 执行计划如下
这个执行计划看起来就像一棵树,执行过程为:控制流从上向下传递,数据流从下向上传递。其中,类似[1,12,56]这样的三个数字,分别表示估算的操作符代价、处理的记录行数和每行记录的字节数。同一层次中的操作符,如本例中的 CSCN2 和 SSEK2,由父节点 NEST LOOP INDEX JOIN2 控制它们的执行顺序。
该计划的大致执行流程如下:
- CSCN2: 扫描 T2 表的聚集索引,数据传递给父节点索引连接;
- NEST LOOP INDEX JOIN2: 当左孩子有数据返回时取右侧数据;
- SSEK2: 利用 T2 表当前的 D1 值作为二级索引 IDX_T1_C1 定位查找的 KEY,返回结果给父节点;
- NEST LOOP INDEX JOIN2: 如果右孩子有数据则将结果传递给父节点 PRJT2,否则继续取左孩子的下一条记录;
- PRJT2: 进行表达式计算 C1+1, D2;
- NSET2: 输出最后结果;
- 重复过程 1) ~ 4)直至左侧 CSCN2 数据全部取完。
4查看模式对象的空间使用
4.1 查看用户占用的空间
可以使用系统函数 USER_USED_SPACE 得到用户占用空间的大小,函数参数为用户名,返回值为占用的页的数目。
SELECT USER_USED_SPACE('TEST_USER');
4.2 查看表占用的空间
可以使用系统函数 TABLE_USED_SPACE 得到表对象占用空间的大小,函数参数为模式名和表名,返回值为占用的页的数目
SELECT TABLE_USED_SPACE('SYSDBA', 'TEST');
4.3 查看表使用的页数
可以使用系统函数 TABLE_USED_PAGES 得到表对象实际使用页的数目,函数参数为模式名和表名,返回值为实际使用页的数目。
SELECT TABLE_USED_PAGES('SYSDBA', 'TEST');
查看表空闲页堆栈占用的空间
可以使用系统函数 TABLE_FREE_PAGE_STACK_USED_SPACE 得到表空闲页堆栈占用空间的大小,函数参数为模式名和表名,返回值为占用的页的数目。
SELECT TABLE_FREE_PAGE_STACK_USED_SPACE ('SYSDBA', 'TEST');
查看索引占用的空间
可以使用系统函数 INDEX_USED_SPACE 得到索引占用空间的大小,函数参数为索引 ID,返回值为占用的页的数目。
SELECT INDEX_USED_SPACE(33555463);
查看索引使用的页数
可以使用系统函数 INDEX_USED_PAGES 得到索引实际使用页的数目,函数参数为索引 ID,返回值为实际使用页的数目。
SELECT INDEX_USED_PAGES(33555463);
数据类型的空间使用
各种数据类型占用的空间是不同的,下表列出了主要数据类型所需要的空间。
数据类型 | 所需空间 |
|---|---|
CHAR | SIZE 为 1~8188 字节, |
VARCHAR | SIZE 为 1~8188 字节, |
TINYINT BIT BYTE | 需要 1 个字节 |
SMALLINT | 需要 2 个字节 |
INT | 需要 4 个字节 |
BIGINT | 需要 8 个字节 |
REAL | 需要 4 个字节 |
FLOAT | 需要 8 个字节 |
DOUBLE DOUBLE PRECISION | 需要 8 个字节 |
DEC DECIMAL NUMERIC | SIZE 为 1~20 个字节 |
BINARY | SIZE 为 1~8188 字节, |
VARBINARY | SIZE 为 1~8188 字节, |
DATE | 需要 3 个字节 |
TIME | 需要 5 个字节 |
TIMESTAMP DATETIME | 需要 8 个字节 |
TIME WITH TIME ZONE | 需要 7 个字节 |
TIMESTAMP WITH TIME ZONE | 需要 10 个字节 |
INTERVAL YEAR | 需要 12 个字节 |
INTERVAL DAY | 需要 24 个字节 |
BLOB | SIZE 为 1~(100G-1)字节 |
CLOB | SIZE 为 1~(100G-1)字节 |
以上综合测试案例:
创建一个测试表、索引
create table tt1 as select * from dba_users;
create index ind_tt1_userid on tt1(user_id);
使用自插入方式扩大表,同时使用USER_USED_SPACE等命令查看空间
insert into tt1 select * from tt1;
commit
当tt1表640行时如下左所示;当tt1表327680行时如下右图所示:
select segment_name,sum(bytes)/1024/1024,segment_type from dba_segments where owner='BINGO' group by segment_name,segment_type;
5 并行查询
并行查询(Parallel Query,PQ)是一种多个线程或进程间协作、共同完成 SQL 计划的优化技术。
根据参与执行的 DM 服务器实例个数,并行查询可以划分为多机并行查询和单机并行查询。单机并行查询仅利用了单机的 CPU、磁盘、内存等机器资源,因此又称为本地并行查询。
DM 支持本地并行和多机并行,并行查询具体实现上采用对称并行技术,即每一个执行者(进程或线程)都执行相同的计划。主要执行者负责向其他并行执行者分发计划、搜集数据并向客户返回最终结果。不管是主执行者,还是从执行者,它们执行的计划都是完全相同的.
HINT 语法格式如下:
/*+ PARALLEL([<表名>] <并行任务个数>) */
SELECT /*+ PARALLEL(4) */ * FROM tt1;




