实验环境:
操作系统版本 | 银河麒麟Linux kylin10 4.19.90-24.4.v2101.ky10.x86_64 |
数据库版本 | DM Database Server 64 V8 |
Oracle数据库的实例在启动到nomount状态会读取初始化参数文件spfile(二进制文件)或pfile(文本文件),参数文件内包含与数据库实例相关参数。
每创建一个 DM 数据库,就会自动生成 dm.ini 参数文件。dm.ini 是 DM 数据库启动所必须的配置文件,通过配置该文件可以设置 DM 数据库服务器的各种功能和性能选项,主要的配置模块包括:控制文件相关、实例名、内存相关、线程相关等。
其他参数文件:dmmal.ini 是 MAL 系统的配置文件,dmarch.ini 用于配置归档,dm_svc.conf 是一个客户端配置文件,sqllog.ini 用于 SQL 日志的配置等等。
1、参数分类
参数属性分为三种:手动、静态和动态。
参数 | 属性 | 说明 |
手动(READ ONLY) | 不能被动态修改 | 必须手动修改 dm.ini 参数文件,然后重启才能生效。 |
静态(IN FILE) | 可以被动态修改 | 修改后重启服务器才能生效。 |
动态(SYS和SESSION) | 可以被动态修改 | 修改后即时生效。动态参数又分为会话级(SESSION)和系统级(SYS)两种。会话级参数被修改后,新参数值只会影响当前会话和新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。 |
--通过动态视图v$dm_ini参看参数类型
SQL> select distinct para_type from v$dm_ini;
行号 PARA_TYPE
---------- ---------
1 READ ONLY
2 SYS
3 IN FILE
4 SESSION
2、参数的查看
2.1 dm.ini文件
通过系统命令vi、cat、more等可以查看dm.ini参数文件中的参数信息。
--示例 参看和MEMORY相关的参数
[dmdba@kylin10 DAMENG]$ cat dm.ini | grep MEMORY
MAX_OS_MEMORY = 100 #Maximum Percent Of OS Memory
MEMORY_POOL = 500 #Memory Pool Size In Megabyte
MEMORY_N_POOLS = 1 #Number of Memory Pool
MEMORY_TARGET = 15000 #Memory Share Pool Target Size In Megabyte
MEMORY_EXTENT_SIZE = 32 #Memory Extent Size In Megabyte
MEMORY_LEAK_CHECK = 0 #Memory Pool Leak Checking Flag
MEMORY_MAGIC_CHECK = 1 #Memory Pool Magic Checking Flag
MEMORY_BAK_POOL = 4 #Memory Backup Pool Size In Megabyte
HUGE_MEMORY_PERCENTAGE = 50 #Maximum percent of HUGE buffer that can be allocated to work as common memory pool
XBOX_MEMORY_TARGET = 1024 #Memory target size in Megabyte of XBOX system
MAX_SESSION_MEMORY = 0 #Maximum memory(In Megabytes) a single session can use
[dmdba@kylin10 DAMENG]$
2.2 动态性能视图
2.2.1 动态性能视图v$dm_ini
序号 | 列名称 | 数据类型 | 说明 |
1 | PARA_NAME | VARCHAR(128) | 参数名称 |
2 | PARA_VALUE | VARCHAR(256) | 系统参数值 |
3 | MIN_VALUE | VARCHAR(256) | 最小值 |
4 | MAX_VALUE | VARCHAR(256) | 最大值 |
5 | DEFAULT_VALUE | VARCHAR(256) | 默认值 |
6 | MPP_CHK | CHAR(1) | 是否检查 MPP 节点间参数一致性。 Y 是, N 否 |
7 | SESS_VALUE | VARCHAR(256) | 会话参数值 |
8 | FILE_VALUE | VARCHAR(256) | INI文件中参数值 |
9 | DESCRIPTION | VARCHAR(256) | 参数描述 |
10 | PARA_TYPE | VARCHAR(200) | 参数类型 |
11 | SYNC_FLAG | VARCHAR(16) | 参数是否需要进行同步。取值包括 NOT_SYNC、 DSC_SYNC、 DW_SYNC、 DPC_SYNC、 ALL_SYNC。 执行 INI 参数全局同步时,各字段值含义如下: DSC_SYNC:仅 DMDSC 环境下进行参数同步; DW_SYNC:仅普通主备/普通 RAFT 主备环境下进行参数 同步; DPC_SYNC:仅 DMDPC 环境下进行参数同步; ALL_SYNC:普通主备/RAFT 主备/DSC 集群/DPC 集群环 境下均进行参数同步 |
12 | SYNC_LEVEL | VARCHAR(16) | SYNC_LEVEL 专用于主备环境中,标识备库参数是否需要 和主库保持同步。同步的方式有两种: 1.服务器定时自动同 步,通过 INI 参数 INI_SYNC 进行设置; 2.通过 SF_SYNC_INI 函数手动同步。 SYNC_LEVEL 字段值说明如下: NO_SYNC:参数在当前环境不会被同步; CAN_SYNC:参数在当前环境中,可以和主库同步。是否 同步,均不影响主备环境的使用; MUST_SYNC:参数在当前环境中,必须和主库保持同步 |
--示例 通过视图v$dm_ini查看与buffer相关的参数
SQL> select * from v$dm_ini where para_name like '%BUFFER%';
行号 PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE
---------- ------------------- ---------- --------- --------- ------------- ------- ----------
FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG
---------- ------------------------------------------------- --------- ---------
SYNC_LEVEL
----------
1 HUGE_BUFFER 80 8 1048576 80 N 80
80 Initial Huge Buffer Size In Megabytes IN FILE ALL_SYNC
CAN_SYNC
2 HUGE_BUFFER_POOLS 4 1 512 4 N 4
4 Huge Buffer Pools IN FILE ALL_SYNC
CAN_SYNC
3 BUFFER 1000 8 1048576 1000 N 1000
1000 Initial System Buffer Size In Megabytes IN FILE ALL_SYNC
CAN_SYNC
4 BUFFER_POOLS 19 1 512 19 N 19
19 Buffer Pools IN FILE ALL_SYNC
CAN_SYNC
5 BUFFER_MODE 0 0 1 0 N 0
0 Buffer pool elimination mode, 0 = LRU, 1 = clock IN FILE ALL_SYNC
CAN_SYNC
6 BUFFER_FAST_RELEASE 1 0 1 1 N 1
1 Whether discard freed page in recycle pool SYS ALL_SYNC
CAN_SYNC
7 MAX_BUFFER 1000 8 1048576 1000 N 1000
1000 maximum system buffer size in Megabytes IN FILE ALL_SYNC
CAN_SYNC
2.2.2 动态性能视图v$parameter
序号 | 列名称 | 数据类型 | 说明 |
1 | ID | INTEGER | ID号 |
2 | NAME | VARCHAR(80) | 参数名 |
3 | TYPE | VARCHAR(200) | 参数类型 IN FILE:静态参数,只可修改 ini 文件; SYS 和 SESSION:动态参数, ini 文件和内存同时可修改, 其中, SYS 系统级参数; SESSION 会话级参数 |
4 | VALUE | VARCHAR(4000) | 参数值(当前会话) |
5 | SYS_VALUE | VARCHAR(4000) | 参数值(系统) |
6 | FILE_VALUE | VARCHAR(4000) | 参数值(INI文件) |
7 | DESCRIPTION | VARCHAR(255) | 参数描述 |
8 | DEFAULT_VALUE | VARCHAR(256) | 参数默认值 |
9 | ISDEFAULT | INTEGER | dm.ini中参数的值和默认值是否相同,1表示相同,0表示不同 |
SQL> select * from v$parameter where name like '%BUFFER%';
行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ----------- ------------------- ------- ----- --------- ----------
DESCRIPTION DEFAULT_VALUE ISDEFAULT
------------------------------------------------- ------------- -----------
1 21 HUGE_BUFFER IN FILE 80 80 80
Initial Huge Buffer Size In Megabytes 80 1
2 22 HUGE_BUFFER_POOLS IN FILE 4 4 4
Huge Buffer Pools 4 1
3 23 BUFFER IN FILE 1000 1000 1000
Initial System Buffer Size In Megabytes 1000 1
4 24 BUFFER_POOLS IN FILE 19 19 19
Buffer Pools 19 1
5 25 BUFFER_MODE IN FILE 0 0 0
Buffer pool elimination mode, 0 = LRU, 1 = clock 0 1
6 33 BUFFER_FAST_RELEASE SYS 1 1 1
Whether discard freed page in recycle pool 1 1
7 37 MAX_BUFFER IN FILE 1000 1000 1000
maximum system buffer size in Megabytes 1000 1
--示例 查看数据库的兼容模式
SQL> SELECT PARA_NAME,PARA_VALUE,PARA_TYPE FROM V$DM_INI WHERE PARA_NAME LIKE 'COMPA%';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------------- ---------- ---------
1 COMPATIBLE_MODE 2 IN FILE
2.3 DM系统函数查看
2.3.1 查询数值类型参数值
--语法格式:
select SF_GET_PARA_VALUE (scope int, paraname varchar(256));
--SCOPE 参数为 1 表示获取 INI 文件中配置参数的值
--SCOPE 参数为 2 表示获取内存中配置参数的值
--示例:获取 DM.INI 文件中动态参数 HFS_CACHE_SIZE 的当前值
SQL> select SF_GET_PARA_VALUE (1,'HFS_CACHE_SIZE');
行号 SF_GET_PARA_VALUE(1,'HFS_CACHE_SIZE')
---------- -------------------------------------
1 160
2.3.2 查询浮点型参数值
--语法格式
select SF_GET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187));
--SCOPE 参数为 1 表示获取 INI 文件中配置参数的值
--SCOPE 参数为 2 表示获取内存中配置参数的值
--示例:获取内存中 参数SEL_RATE_EQU 的当前值
SQL> select SF_GET_PARA_DOUBLE_VALUE(2,'SEL_RATE_EQU');
行号 SF_GET_PARA_DOUBLE_VALUE(2,'SEL_RATE_EQU')
---------- ------------------------------------------
1 2.500000000000000E-02
2.3.3 查询字符串类型参数值
--语法格式
select SF_GET_PARA_STRING_VALUE(scope int, paraname varchar(8187));
--SCOPE 参数为 1 表示获取 INI 文件中配置参数的值
--SCOPE 参数为 2 表示获取内存中配置参数的值
--示例:获取 DM.INI 文件中动态参数 SQL_TRACE_MASK 的当前值
SQL> select SF_GET_PARA_STRING_VALUE(1,'SQL_TRACE_MASK');
行号 SF_GET_PARA_STRING_VALUE(1,'SQL_TRACE_MASK')
---------- --------------------------------------------
1 1
2.3.4 获得当前会话的某个会话级 INI 参数的值
--语法格式
select SF_GET_SESSION_PARA_VALUE (paraname varchar(8187));
--示例:获取当前会话 USE_HAGR_FLA 参数的值
SQL> select SF_GET_SESSION_PARA_VALUE ('USE_HAGR_FLAG');
行号 SF_GET_SESSION_PARA_VALUE('USE_HAGR_FLAG')
---------- ------------------------------------------
1 0
3、参数的修改
3.1 DM控制台工具console
使用图形化工具,打开DM控制台工具,可以直接查看和修改实例的参数。
双击参数对应的值,进入编辑模式,可以进行修改,如上图修改数据库兼容模式,将参数“COMPATIBLE_MODE”的值修改为“1”,修改完成后点击保存。在控制台工具修改都是静态修改,即使该参数是动态参数也不会立即生效,需要重启数据库才能生效。
3.2 修改dm.ini文件
可以使用系统vi命令直接修改相关参数的参数值,修改完成后需要重启数据库才能生效。
3.3 DM系统函数修改
3.3.1 修改整型静态配置参数和动态配置参数
--语法格式
SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64);
--SCOPE 参数为 1 表示在内存和 INI 文件中都修改参数值,此时只能修改动态的配置参数。当 SCOPE 等于 1,试图修改静态配置参数时服务器会返回错误信息
--SCOPE 参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
--示例:将 DM.INI 文件中动态参数 HFS_CACHE_SIZE 设置为 320,在 disql 中执行以下命令即可立即生效。
SQL> SP_SET_PARA_VALUE (1,'HFS_CACHE_SIZE',320);
--示例 修改TEMP表空间的大小
--参看参数值,参数类型
SQL> select para_name,para_value,para_type from v$dm_ini where para_name='TEMP_SIZE';
行号 PARA_NAME PARA_VALUE PARA_TYPE
---------- --------- ---------- ---------
1 TEMP_SIZE 10 IN FILE
--参看该参数的系统参数值(para_value),会话参数值(sess_value)和INI文件中参数值(file_value)。
SQL> select para_name,para_value,sess_value,file_value from v$dm_ini where para_name='TEMP_SIZE';
行号 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE
---------- --------- ---------- ---------- ----------
1 TEMP_SIZE 10 10 10
--修改TEMP_SIZE参数值
SQL> sp_set_para_value(2,'TEMP_SIZE',100);
DMSQL 过程已成功完成
SQL> select para_name,para_value,sess_value,file_value from v$dm_ini where para_name='TEMP_SIZE';
行号 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE
---------- --------- ---------- ---------- ----------
1 TEMP_SIZE 10 10 100
--重启数据库实例
[dmdba@kylin10 tool]$ /dm8/bin/DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
--登陆数据库 查看参数值的修改情况
[dmdba@kylin10 tool]$ disql sysdba/Dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.522(ms)
disql V8
SQL> select para_name,para_value,sess_value,file_value from v$dm_ini where para_name='TEMP_SIZE';
行号 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE
---------- --------- ---------- ---------- ----------
1 TEMP_SIZE 100 100 100
3.3.2 修改浮点型静态配置参数和动态配置参数
--语法格式
SP_SET_PARA_DOUBLE_VALUE(scope int,paraname varchar(8187),value double);
--SCOPE 参数为 1 表示在内存和 INI 文件中都修改参数值,此时只能修改动态的配置参数。当 SCOPE 等于 1,试图修改静态配置参数时服务器会返回错误信息
--SCOPE参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
--示例:将 DM.INI 文件中动态参数 SEL_RATE_EQU 设置为 0.3,在 disql 中执行以下命令即可立即生效。
SQL> SP_SET_PARA_DOUBLE_VALUE(1, 'SEL_RATE_EQU', 0.3);
3.3.3 修改系统整型、double、 varchar 的静态配置参数或动态配置参数
--语法格式
SF_SET_SYSTEM_PARA_VALUE(paraname varchar(256),value int64\double\varchar(256),deferred int,scope int64);
--DEFERRED 参数为 0 表示当前 session 修改的参数立即生效,默认为 0
--DEFERRED 参数为 1 表示当前 session 不生效,后续再生效
--SCOPE 参数为 1 表示在内存和 INI 文件中都修改参数值,此时只能修改动态的配置参数
--SCOPE 参数为 2 表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
--示例:将动态参数 ENABLE_DDL_ANY_PRIV 设置为 1,且当前 session 立即生效
SQL> select SF_SET_SYSTEM_PARA_VALUE('ENABLE_DDL_ANY_PRIV',1,0,1);
3.3.4 修改某个会话级 INI 参数的值
设置的参数值只对本会话有效。
--语法格式
SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint);
--示例:将 USE_HAGR_FLAG 设置为 1,且只对本会话有效
SQL> select SF_SET_SESSION_PARA_VALUE ('USE_HAGR_FLAG',1);
3.3.5 重置某个会话级 INI 参数的值
重置参数值使得这个 INI 参数的值和系统 INI 参数的值保持一致。
--语法格式
SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187));
--示例:重置 USE_HAGR_FLAG
SQL> select SP_RESET_SESSION_PARA_VALUE ('USE_HAGR_FLAG');
3.4 alter语句修改
修改系统参数:
--语法格式
ALTER SYSTEM SET ‘<参数名称>’ =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
[DEFERRED] 只适用于动态会话级参数, 若指定DEFERRED,则参数值延迟生效,对当前会话不生效,只对新创建的会话生效;若不指定DEFERRED,则参数值立即生效,对当前会话和新创建的会话都生效。针对动态系统级参数,无论是否指定DEFERRED,参数值均对所有会话生效,包括所有已经创建的会话以及新创建的会话; 针对静态参数,指定DEFERRED将报错;
[MEMORY|BOTH|SPFILE] 设置INI参数修改的位置。其中, MEMORY只对内存中的INI值做修改; SPFILE则只对INI文件中的INI值做修改; BOTH则内存和INI文件都做修改。默认情况下,为MEMORY。对于静态参数,只能指定SPFILE。
--示例 静态参数修改
SQL> ALTER SYSTEM SET ‘MTAB_MEM_SIZE’ =1200 spfile;
--PURGE关键字指是否清理执行计划
ALTER SESSION SET ‘<参数名称>’ =<参数值> [PURGE];
--示例 修改当前会话参数
SQL> ALTER SESSION SET ‘HAGR_HASH_SIZE’ =2000000;