签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦数据库 参数 修改方法

2019-08-28 15:16 4122 0 原创 DM 达梦
作者: Dave

1 参数说明

在之前的博客里,我们了解DM 数据库中有多个参数文件,如下:

DM7 达梦数据库 物理结构 说明
https://www.cndba.cn/dave/article/3571

除了参数文件的查看,除了直接看参数文件,也可以查询相关的视图。 最主要的视图是:

1)V$PARAMETER:显示 ini 参数和 dminit 建库参数的类型及参数值信息(当前会话值、系统值及 dm.ini
文件中的值)。
2)v$dm_ini:所有 ini 参数和 dminit 建库参数信息。 但这个视图查询的内容有点多,DM提供了分类的视图,比如V$DM_ARCH_INI,查询归档的相关参数值。

SQL> select name from sysobjects where name like 'V$DM_%INI';

LINEID     NAME                           
---------- -------------------------------
1          V$DM_INI
2          V$DM_ARCH_INI
3          V$DM_MAL_INI
4          V$DM_REP_RPS_INST_NAME_INI
5          V$DM_REP_MASTER_INFO_INI
6          V$DM_REP_SLAVE_INFO_INI
7          V$DM_REP_SLAVE_TAB_MAP_INI
8          V$DM_REP_SLAVE_SRC_COL_INFO_INI
9          V$DM_LLOG_INFO_INI
10         V$DM_LLOG_TAB_MAP_INI
11         V$DM_TIMER_INI
12         V$DM_ARCH_INI
13         V$DM_MAL_INI
14         V$DM_REP_RPS_INST_NAME_INI
15         V$DM_REP_MASTER_INFO_INI
16         V$DM_REP_SLAVE_INFO_INI
17         V$DM_REP_SLAVE_TAB_MAP_INI
18         V$DM_REP_SLAVE_SRC_COL_INFO_INI
19         V$DM_LLOG_INFO_INI
20         V$DM_LLOG_TAB_MAP_INI
21         V$DM_TIMER_INI
22         V$DM_INI

22 rows got

SQL> select top 5 para_name,para_value from v$dm_ini;

LINEID     PARA_NAME    PARA_VALUE                   
---------- ------------ -----------------------------
1          CTL_PATH     /dm/dmdbms/data/cndba/dm.ctl
2          CTL_BAK_PATH /dm/dmdbms/data/cndba/ctl_bak
3          CTL_BAK_NUM  10
4          SYSTEM_PATH  /dm/dmdbms/data/cndba
5          CONFIG_PATH  /dm/dmdbms/data/cndba

used time: 7.957(ms). Execute id is 196.
SQL>

INI 参数分为手动、静态和动态三种类型,分别对应 v$parameter 视图中 TYPE 中READ ONLY、IN FILE、SYS 和 SESSION。

手动参数(READ ONLY):DB在运行过程中,手动参数不能被修改,静态和动态参数可以修改。
静态参数(IN FILE):只能修改 ini 文件,修改后重启DB才能生效,为系统级参数,生效后会影响所有的会话。
动态参数(SYS 和 SESSION):ini 文件和内存同时可修改,修改后即时生效。其中,SYS为系统级参数,修改后会影响所有的会话;SESSION 为会话级参数,服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值。

基于参数的类型,对于DM参数修改,有三种方法:

1.直接对参数文件进行修改。
2.使用SQL语句修改
3.使用函数修改。

2 使用SQL 修改参数

可以通过ALTER SYSTEM语法修改静态或动态(系统级、会话级)参数值,使修改之后的参数值能够在全局范围内起作用。对于静态参数,只有指定SPFILE情况下,才能修改。

语法格式

ALTER SYSTEM SET ‘<参数名称>’ =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];https://www.cndba.cn/dave/article/3578

参数https://www.cndba.cn/dave/article/3578

  1. <参数名称> 指静态、动态(系统级、会话级)INI参数名字。
  2. <参数值> 指设置该INI参数的值。
  3. [DEFERRED] 只适用于动态参数。指定DEFERRED,参数值延迟生效,对当前session不生效,只对新创建的会话生效;缺省为立即生效,对当前会话和新创建的会话都生效。
  4. [MEMORY|BOTH|SPFILE] 指设置INI参数修改的位置。其中,MEMORY只对内存中的INI值做修改;SPFILE则只对INI文件中的INI值做修改;BOTH则内存和INI文件都做修改。默认情况下,为MEMORY。对于静态参数,只能指定SPFILE。

修改示例:https://www.cndba.cn/dave/article/3578

设置当前系统动态、会话级参数 SORT_BUF_SIZE 参数值为 200,要求延迟生效,对当前的 session 不生效,对后面创建的会话才生效。并且只修改内存。
SQL> select SF_GET_PARA_VALUE(2,'SORT_BUF_SIZE');

LINEID     SF_GET_PARA_VALUE(2,'SORT_BUF_SIZE')
---------- ------------------------------------
1          50

used time: 1.497(ms). Execute id is 205.

SQL>  select para_name,para_value from v$dm_ini where para_name='SORT_BUF_SIZE';

LINEID     PARA_NAME     PARA_VALUE
---------- ------------- ----------
1          SORT_BUF_SIZE 50

used time: 5.432(ms). Execute id is 215.
SQL> 

SQL> ALTER SYSTEM SET 'SORT_BUF_SIZE' =200 DEFERRED MEMORY;
DMSQL executed successfully
used time: 11.271(ms). Execute id is 216.

重新开窗口查询:
[dave@www.cndba.cn cndba]$ disql SYSDBA/SYSDBA

Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 9.299(ms)
disql V7.6.0.95-Build(2018.09.13-97108)ENT 
Connected to: DM 7.1.6.95
SQL> select para_name,para_value from v$dm_ini where para_name='SORT_BUF_SIZE';

LINEID     PARA_NAME     PARA_VALUE
---------- ------------- ----------
1          SORT_BUF_SIZE 200

used time: 7.031(ms). Execute id is 217.
SQL> select SF_GET_PARA_VALUE(2,'SORT_BUF_SIZE');

LINEID     SF_GET_PARA_VALUE(2,'SORT_BUF_SIZE')
---------- ------------------------------------
1          200

used time: 0.731(ms). Execute id is 218.
SQL> 


设置静态参数 MTAB_MEM_SIZE 参数值为 1200。
SQL> ALTER SYSTEM SET 'MTAB_MEM_SIZE' =1200 spfile;
DMSQL executed successfully
used time: 10.603(ms). Execute id is 219.

#从ini 文件中取值:
SQL> select SF_GET_PARA_VALUE(1,'MTAB_MEM_SIZE');  

LINEID     SF_GET_PARA_VALUE(1,'MTAB_MEM_SIZE')
---------- ------------------------------------
1          1200

used time: 7.292(ms). Execute id is 225.

#从内存中取值:
SQL> select para_name,para_value from v$dm_ini where para_name='MTAB_MEM_SIZE';

LINEID     PARA_NAME     PARA_VALUE
---------- ------------- ----------
1          MTAB_MEM_SIZE 8

used time: 8.743(ms). Execute id is 221.
SQL>

也可以通过 ALTER SESSION 语法修改动态会话级参数(即 TYPE 为 SESSION 的参数),使修改之后的 INI 参数值只对当前会话起作用,不会影响其他会话或系统的 INI 参数值。

语法格式

ALTER SESSION SET ‘<参数名称>’ =<参数值> [PURGE];

参数

  1. <参数名称> 指动态会话级INI参数名字;
  2. <参数值> 指设置该INI参数的相应值;
  3. [PURGE] 指是否清理执行计划。

设置后的值只对当前会话有效。当包含 PURGE 选项时会清除服务器保存的所有执行计划。

https://www.cndba.cn/dave/article/3578

#设置当前会话的 HAGR_HASH_SIZE 参数值为 2000000。
SQL> ALTER SESSION SET 'HAGR_HASH_SIZE' =2000000;
DMSQL executed successfully
used time: 0.917(ms). Execute id is 222.

SQL> select SF_GET_PARA_VALUE(2,'HAGR_HASH_SIZE');

LINEID     SF_GET_PARA_VALUE(2,'HAGR_HASH_SIZE')
---------- -------------------------------------
1          100000

used time: 1.583(ms). Execute id is 224.
SQL>

3 通过函数修改

DM 也提供了一些函数,可以方便的查询和设置参数。

1. SF_GET_PARA_VALUE 函数

返回 dm.ini 文件中非浮点和字符串类型的参数值
语法:

SF_GET_PARA_VALUE (scope int, ini_param_name varchar(256))

参数说明:

scope: 取值为 1、2 。 1 表示从 dm.ini 文件中读取;2 表示从内存中读取;
ini_param_name:dm.ini 文件中的参数名返回值:

#获得 dm.ini 文件中 BUFFER 参数值
SQL> SELECT SF_GET_PARA_VALUE (1, 'BUFFER');

LINEID     SF_GET_PARA_VALUE(1,'BUFFER')
---------- -----------------------------
1          1959

used time: 6.267(ms). Execute id is 226.

2. SP_SET_PARA_VALUE 函数

设置 dm.ini 文件中非浮点和字符串类型的参数值
语法:

SP_SET_PARA_VALUE (scope int, ini_param_name varchar(256) ,value bigint)

参数说明:

https://www.cndba.cn/dave/article/3578

scope:取值为 1,2 。1 表示 dm.ini 文件和内存参数都修改,不需要重启服务器;2 表示只修改 dm.ini 文件,服务器重启后生效。
ini_param_name:dm.ini 文件中的参数名。
value:设置的值。

将 dm.ini 文件中 HFS_CACHE_SIZE 参数值设置为 320
SQL> SP_SET_PARA_VALUE (1,'HFS_CACHE_SIZE',320);
DMSQL executed successfully
used time: 10.289(ms). Execute id is 227.

SQL> select SF_GET_PARA_VALUE(2,'HFS_CACHE_SIZE');

LINEID     SF_GET_PARA_VALUE(2,'HFS_CACHE_SIZE')
---------- -------------------------------------
1          320

used time: 1.243(ms). Execute id is 228.

3. SF_GET_PARA_DOUBLE_VALUE 函数

作用:返回dm.ini文件中参数中浮点型的参数值
语法:

SF_GET_PARA_DOUBLE_VALUE ( scope int, ini_param_name varchar(256))

参数说明:

scope:取值为1,2 。1表示从dm.ini文件中读取;2表示从内存中读取;
ini_param_name:dm.ini文件中的参数名。

#获得dm.ini中SEL_RATE_EQU参数值
SQL> SELECT SF_GET_PARA_DOUBLE_VALUE (1, 'CKPT_FLUSH_RATE');

LINEID     SF_GET_PARA_DOUBLE_VALUE(1,'CKPT_FLUSH_RATE')
---------- ---------------------------------------------
1          5.000000000000000E+00

used time: 5.697(ms). Execute id is 229.
SQL> SELECT SF_GET_PARA_DOUBLE_VALUE (2, 'CKPT_FLUSH_RATE');

LINEID     SF_GET_PARA_DOUBLE_VALUE(2,'CKPT_FLUSH_RATE')
---------- ---------------------------------------------
1          5.000000000000000E+00

used time: 1.277(ms). Execute id is 230.

4. SP_SET_PARA_DOUBLE_VALUE 函数

作用:设置dm.ini参数中浮点型的参数值
语法:

SP_SET_PARA_DOUBLE_VALUE (scope int, ini_param_name varchar(256),value double)https://www.cndba.cn/dave/article/3578

参数说明:

scope:取值为 1,2。1 表示 dm.ini 文件和内存参数都修改,不需要重启服务器;2 表示只可修改 dm.ini 文件,服务器重启后生效。
ini_param_name:dm.ini文件中的参数名。
value:设置的值。

#将dm.ini文件中SEL_RATE_EQU参数值设置为0.3
SQL> SP_SET_PARA_DOUBLE_VALUE(1, 'SEL_RATE_EQU', 0.3);
DMSQL executed successfully
used time: 10.040(ms). Execute id is 231.
SQL>

5. SF_GET_PARA_STRING_VALUE 函数

作用:返回 dm.ini 文件中字符串类型的参数值
语法:

SF_GET_PARA_STRING_VALUE (scope int, ini_param_name varchar(256))

参数说明:

scope: 取值为1,2 。 1表示从dm.ini文件中读取;2表示从内存中读取;
ini_param_name:dm.ini文件中的参数名

#获得dm.ini文件中TEMP_PATH参数值
SQL> SELECT SF_GET_PARA_STRING_VALUE (1, 'TEMP_PATH');

LINEID     SF_GET_PARA_STRING_VALUE(1,'TEMP_PATH')
---------- ---------------------------------------
1          /dm/dmdbms/data/cndba

used time: 6.043(ms). Execute id is 232.
SQL>

6 SP_SET_PARA_STRING_VALUE 函数

作用:设置 dm.ini 文件中的字符串型参数值
语法:

SP_SET_PARA_STRING_VALUE (scope int, ini_param_name varchar(256) ,value varchar(8187))

参数说明:

scope:取值为 1,2 。1 表示 dm.ini 文件和内存参数都修改,不需要重启服务器;2 表示只修改 dm.ini 文件,服务器重启后生效。
ini_param_name:dm.ini 文件中的参数名。
value:设置的字符串的值。

#将 dm.ini 文件中 SQL_TRACE_MAS 参数值设置为 1
SQL> SP_SET_PARA_STRING_VALUE(1, 'SQL_TRACE_MASK','1'); 
DMSQL executed successfully
used time: 8.278(ms). Execute id is 233.
SQL>

7.SF_SET_SESSION_PARA_VALUE 函数

作用:设置会话级 INI 参数的值
语法:

SF_SET_SESSION_PARA_VALUE (paraname varchar(8187),value bigint)

参数说明:https://www.cndba.cn/dave/article/3578

paraname: 会话级 INI 参数的参数名
value:要设置的新值

#设置会话级 ini 参数 JOIN_HASH_SIZE 的值为 2000
SQL> SF_SET_SESSION_PARA_VALUE ('JOIN_HASH_SIZE', 2000);
DMSQL executed successfully
used time: 1.170(ms). Execute id is 234.
SQL>

8. SP_RESET_SESSION_PARA_VALUE函数

作用:重置会话级 INI 参数的值,使得参数的值和系统级一致。
语法:

SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187) )

参数说明:

paraname:会话级 INI 参数的参数名。

#重置会话级 INI 参数 JOIN_HASH_SIZE 的值
SQL> SP_RESET_SESSION_PARA_VALUE ('JOIN_HASH_SIZE');
DMSQL executed successfully
used time: 1.089(ms). Execute id is 235.
SQL>

9 SF_GET_SESSION_PARA_VALUE 函数

作用:获得整数类型的会话级 INI 参数的值。
语法:

SF_GET_SESSION_PARA_VALUE (paraname varchar(8187) )

参数说明:

paraname:会话级 INI 参数的参数名。

#获取会话级 INI 参数 JOIN_HASH_SIZE 的值:
SQL>  SELECT SF_GET_SESSION_PARA_VALUE ('JOIN_HASH_SIZE');

LINEID     SF_GET_SESSION_PARA_VALUE('JOIN_HASH_SIZE')
---------- -------------------------------------------
1          500000

used time: 1.436(ms). Execute id is 236.
SQL>

10. SF_GET_SESSION_PARA_DOUBLE_VALUE 函数

作用:获得浮点型的会话级 INI 参数的值。
语法:

SF_GET_SESSION_PARA_DOUBLE_VALUE (paraname varchar(8187) )

参数说明:

paraname:会话级 INI 参数的参数名。

#获取会话级 INI 参数 SEL_RATE_SINGLE 的值:
SQL>  SELECT SF_GET_SESSION_PARA_DOUBLE_VALUE ('SEL_RATE_SINGLE');

LINEID     SF_GET_SESSION_PARA_DOUBLE_VALUE('SEL_RATE_SINGLE')
---------- ---------------------------------------------------
1          5.000000000000000E-02

used time: 1.549(ms). Execute id is 237.
`

11. SF_SET_SYSTEM_PARA_VALUE 函数

作用:修改系统整型、double、varchar 的静态配置参数或动态配置参数。
语法:https://www.cndba.cn/dave/article/3578

SF_SET_SYSTEM_PARA_VALUE (paraname varchar(256), value bigint/double/varchar(256),deferred int, scope int)

参数说明:

paraname:ini 参数的参数名。
value:要设置的新值。
deferred:是否立即生效。为 0 表示当前 session 修改的参数立即生效,为 1 表示当前 session 不生效,后续再生效,默认为 0。
scope:取值为 0、1、2 。0 表示修改内存中的参数值,1 表示修改内存和INI 文件中参数值,0 和 1 都只能修改动态的配置参数。2 表示修改 INI 文件中参数,此时可用来修改静态配置参数和动态配置参数。

#修改 INI 参数 JOIN_HASH_SIZE 的值:
SQL> SF_SET_SYSTEM_PARA_VALUE ('JOIN_HASH_SIZE',50,1,1);
DMSQL executed successfully
used time: 9.582(ms). Execute id is 238.
SQL>

12. SF_SET_SQL_LOG 函数

作用:设置服务器日志相关 INI 参数 SVR_LOG 和 SQL_TRACE_MASK
语法:https://www.cndba.cn/dave/article/3578

SF_SET_SQL_LOG (svrlog int,svrmsk varchar(1000))

参数说明:

svrlog:INI 参数 SVR_LOG 的设置值
svrmsk:INI 参数 SQL_TRACE_MASK 的设置值https://www.cndba.cn/dave/article/3578

#设置服务器日志相关 INI 参数
SQL> SELECT SF_SET_SQL_LOG(1, '3:5:7');

LINEID     SF_SET_SQL_LOG(1,'3:5:7')
---------- -------------------------
1          1

used time: 15.798(ms). Execute id is 239.
SQL>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Dave

Dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 1879
    原创
  • 2
    翻译
  • 437
    转载
  • 127
    评论
  • 访问:3439998次
  • 积分:3049
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by ZhiXinTech · 皖ICP备19020168号·

        QQ交流群