暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

【我和达梦的故事】达梦8 参数管理

原创 李美静 恩墨学院 2021-08-18
6391

本文主要介绍达梦数据库中参数的分类,查看及如何修改。
主要内容如图:
p.png
在达梦数据库中,也可以通过一系列的参数来维护它的性能,那么在维护过程中,熟练掌握参数的维护很重要。

参数类型

达梦数据库中可以通过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

总结

本文主要介绍了,达梦数据库中参数的类型,针对不同类型的参数如何修改,涉及到修改操作时,又可以通过命令行和函数方式修改。

最后修改时间:2021-08-18 09:48:17
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论