本文主要介绍达梦数据库中参数的分类,查看及如何修改。
主要内容如图:
在达梦数据库中,也可以通过一系列的参数来维护它的性能,那么在维护过程中,熟练掌握参数的维护很重要。
参数类型
达梦数据库中可以通过v$parameter数据字典中的type字段,来查看参数的类型。
SQL> select distinct type from v$parameter;
行号 TYPE
---------- ---------
1 READ ONLY
2 SYS
3 IN FILE
4 SESSION
- 手动修改read only类型,在数据库运行期间,此类参数不能修改。
- IN FILE:静态参数,可以通过alter system set 命令修改。
- SYS/SESSION:动态参数,可以通过alter system或alter session命令修改,当然alter session set 只能修改动态会话级参数。
查看参数
可以通过两种方式查看参数
- 方式一:通过查看数据字典的方式查看
在DM7时,达梦数据库中有很多数据字典,那么可以通过sysobjects查找需要的数据字典,类似于Oracle中的DICT数据字典。比如查找和ini相关的数据字典。但是在DM8的DM8-20210618-XXXX最新版本中,sysobjects中记录的基本都是非v$打头的数据字典了和其它对象信息。
DM7:
SQL> select name from sysobjects where name like '%INI%' limit 5;
行号 NAME
---------- --------------------------
1 SYSUSERINI$
2 V$DM_INI
3 V$DM_ARCH_INI
4 V$DM_MAL_INI
5 V$DM_REP_RPS_INST_NAME_INI
DM8:
disql V8
SQL> select name from sysobjects where name like '%INI%' limit 5;
行号 NAME
---------- ----------------------
1 SYSUSERINI$
2 SYSUSERINI
3 SYSINDEXSYSUSERINI$
4 SP_TABLE_COL_STAT_INIT
5 SP_HP_COL_STAT_INIT
创建一个表对象之后,再次查看此数据字典是可以看到的:
SQL> create table newv8 (id number);
操作已执行
已用时间: 5.058(毫秒). 执行号:701.
SQL> select name from sysobjects where name like 'NEW%';
行号 NAME
---------- -----
1 NEWV8
利用v$dm_ini查看参数的值
查看数据字典结构:
desc v$dm_ini
行号 NAME TYPE$ NULLABLE
---------- ----------- ------------ --------
1 PARA_NAME VARCHAR(128) Y
2 PARA_VALUE VARCHAR(256) Y
3 MIN_VALUE VARCHAR(256) Y
4 MAX_VALUE VARCHAR(256) Y
5 MPP_CHK CHAR(1) Y
6 SESS_VALUE VARCHAR(256) Y
7 FILE_VALUE VARCHAR(256) Y
8 DESCRIPTION VARCHAR(256) Y
9 PARA_TYPE VARCHAR(200) Y
查看前五个静态参数的信息:名字,当前内存中的值,会话级的值,dm.ini文件中的值,参数类型
select para_name,para_value,sess_value,file_value,para_type from v$dm_ini where para_type='IN FILE' limit 5;
行号 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------ ---------- ---------- ---------- ---------
1 MAX_OS_MEMORY 95 95 95 IN FILE
2 MEMORY_POOL 91 91 91 IN FILE
3 MEMORY_TARGET 0 0 0 IN FILE
4 MEMORY_EXTENT_SIZE 1 1 1 IN FILE
5 MEMORY_MAGIC_CHECK 2 2 2 IN FILE
利用v$parameter查看参数的值
数据字典结构:
desc v$parameter;
行号 NAME TYPE$ NULLABLE
---------- ----------- ------------- --------
1 ID INTEGER Y
2 NAME VARCHAR(80) Y
3 TYPE VARCHAR(200) Y
4 VALUE VARCHAR(4000) Y
5 SYS_VALUE VARCHAR(4000) Y
6 FILE_VALUE VARCHAR(4000) Y
7 DESCRIPTION VARCHAR(255) Y
查看参数名,类型,当前值,系统全局的值,在文件dm.ini中的值:
SQL> select name,type,value,sys_value,file_value from v$parameter where type='SYS' limit 5;
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- -------------------- ---- ----- --------- ----------
1 CTL_BAK_NUM SYS 10 10 10
2 BAK_POLICY SYS 0 0 0
3 MEMORY_LEAK_CHECK SYS 0 0 0
4 BUFFER_FAST_RELEASE SYS 1 1 1
5 SORT_BUF_GLOBAL_SIZE SYS 1000 1000 1000
- 方式二:通过函数查看
SF_GET_PARA_VALUE (scope int, ini_param_name varchar(256)) 函数
获取非浮点和字符串类型的参数的值
SF_GET_PARA_DOUBLE_VALUE ( scope int, ini_param_name varchar(256)) 函数
获取浮点类型的参数的值
SF_GET_PARA_STRING_VALUE ( scope int, ini_param_name varchar(256)) 函数
获取字符串类型的参数的值
SF_GET_SESSION_PARA_VALUE (paraname varchar(8187)) 函数
获取会话级整数类型的参数的值
SF_GET_SESSION_PARA_DOUBLE_VALUE(paraname varchar(8187)) 函数
获取会话级浮点类型的参数的值
以上函数的参数,scope分别有两个值,2为内存,1为文件dm.ini
示例:
查看内存中memory_pool参数的值是多少
SQL> SELECT sf_get_para_value(2,'MEMORY_POOL');
行号 SF_GET_PARA_VALUE(2,'MEMORY_POOL')
---------- ----------------------------------
1 91
修改参数
根据参数的类型不同,修改方式不同。
-
read only类型参数:
在数据库运行期间不允许修改,只能通过修改dm.ini文件。 -
in file静态参数与动态sys/session参数,有两种方式修改:
第一种方式: 命令行方式
可以通过语句修改:
ALTER SYSTEM SET ‘<参数名称>’ =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
memory:在内存级立即生效,重启数据库服务失效,只对动态参数适用,即sys,session类型。
spfile:将参数的值写入到dm.ini文件,需要重启服务生效,并且永久保留。只对静态参数适用,即in file类型。
both:将值写入内存及dm.ini文件,达到当前立即生效,并且重启不失效,只对动态参数适用。
deferred:添加之后,参数值延迟生效,对当前session不生效,只对新创建的会话生效;缺省为立即生效,对当前会话和新创建的会话都生效,只对动态参数适用。
示例 一: 修改in file静态参数并在内存及文件级查看
select name,value from v$parameter where type='IN FILE' limit 5;
行号 NAME VALUE
---------- ------------------ -----
1 MAX_OS_MEMORY 95
2 MEMORY_POOL 91
3 MEMORY_TARGET 0
4 MEMORY_EXTENT_SIZE 1
5 MEMORY_MAGIC_CHECK 2
alter system set 'MAX_OS_MEMORY'=80 spfile;
DMSQL 过程已成功完成
写到dm.ini文件中的值:
select sf_get_para_value(1,'MAX_OS_MEMORY');
行号 SF_GET_PARA_VALUE(1,'MAX_OS_MEMORY')
---------- ------------------------------------
1 80
已用时间: 12.005(毫秒). 执行号:44.
当前内存中的值:
select sf_get_para_value(2,'MAX_OS_MEMORY');
行号 SF_GET_PARA_VALUE(2,'MAX_OS_MEMORY')
---------- ------------------------------------
1 95
通过v$parameter查看当前系统值及写到文件中的值:
SQL> select name,value,type,sys_value,file_value from v$parameter where name='MAX_OS_MEMORY';
行号 NAME VALUE TYPE SYS_VALUE FILE_VALUE
---------- ------------- ----- ----- --------- ----------
1 MAX_OS_MEMORY 95 IN FILE 95 80
此时重启数据库服务:
disql中关库: shutdown immediate;
启服务:
[dmdba@enmoedu ~]$ /etc/init.d/DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
disql中查看参数的值,当前系统的值生效为最新值:
select name,value,type,sys_value,file_value from v$parameter where name='MAX_OS_MEMORY';
行号 NAME VALUE TYPE SYS_VALUE FILE_VALUE
---------- ------------- ----- ------- --------- ----------
1 MAX_OS_MEMORY 80 IN FILE 80 80
示例 二:延迟生效,添加deferred之后,在新的会话中生效
session 一:
select name,value,type from v$parameter where type='SESSION' limit 5;
行号 NAME VALUE TYPE
---------- -------------- ------ -------
1 SORT_BUF_SIZE 45 SESSION
2 SORT_BLK_SIZE 1 SESSION
3 SORT_FLAG 0 SESSION
4 HAGR_HASH_SIZE 100000 SESSION
5 HJ_BUF_SIZE 50 SESSION
alter system set 'SORT_BUF_SIZE'=50 deferred memory;
DMSQL 过程已成功完成
SQL> select name,value,type from v$parameter where name='SORT_BUF_SIZE';
行号 NAME VALUE TYPE
---------- ------------- ----- -------
1 SORT_BUF_SIZE 45 SESSION
新创建session 二:
select name,value,type from v$parameter where name='SORT_BUF_SIZE';
行号 NAME VALUE TYPE
---------- ------------- ----- -------
1 SORT_BUF_SIZE 50 SESSION
第二种方式:函数方式
设置 dm.ini 文件中非浮点和字符串类型的参数值
语法:
SP_SET_PARA_VALUE (scope int, ini_param_name varchar(256) ,value bigint)
设置dm.ini参数中浮点型的参数值
语法:
SP_SET_PARA_DOUBLE_VALUE (scope int, ini_param_name varchar(256),value double)
设置 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 参数的值
语法:
SF_SET_SESSION_PARA_VALUE (paraname varchar(8187),value bigint)
重置会话级 INI 参数的值,使得参数的值和系统级一致。
语法:
SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187))
修改系统整型、double、varchar 的静态配置参数或动态配置参数。
语法:
SF_SET_SYSTEM_PARA_VALUE (paraname varchar(256), value bigint/double/varchar(256),deferred int, scope int)
deferred:是否立即生效。为 0 表示当前 session 修改的参数立即生效,为 1 表示当前 session 不生效,后续再生效,默认为 0。
scope:取值为 0、1、2 。0 表示修改内存中的参数值,1 表示修改内存和INI 文件中参数值,0 和 1 都只能修改动态的配置参数。2 表示修改 INI 文件中参数,此时可用来修改静态配置参数和动态配置参数
示例:修改静态参数buffer为800
select name,value,type from v$parameter where name like '%BUFFER%';
行号 NAME VALUE TYPE
---------- ------------------- ----- -------
1 HUGE_BUFFER 8 IN FILE
2 BUFFER 760 IN FILE
3 BUFFER_POOLS 19 IN FILE
4 BUFFER_FAST_RELEASE 1 SYS
5 MAX_BUFFER 1520 IN FILE
修改值为800写入dm.ini文件:
call sp_set_para_value(2,'BUFFER',800);
DMSQL 过程已成功完成
在文件dm.ini中查看:
select sf_get_para_value(1,'buffer');
行号 SF_GET_PARA_VALUE(1,'buffer')
---------- -----------------------------
1 800
在内存中查看当前值:
select sf_get_para_value(2,'buffer');
行号 SF_GET_PARA_VALUE(2,'buffer')
---------- -----------------------------
1 760
数据库重启:
关库:SQL> shutdown abort;
启库:/etc/init.d/DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
再次查看内存中的值生效:
select sf_get_para_value(2,'buffer');
行号 SF_GET_PARA_VALUE(2,'buffer')
---------- -----------------------------
1 800
总结
本文主要介绍了,达梦数据库中参数的类型,针对不同类型的参数如何修改,涉及到修改操作时,又可以通过命令行和函数方式修改。