修改服务器的共享内存大小,达梦内存调整及修改方法

本文详细介绍了如何调整和修改达梦数据库的内存相关参数,包括MEMORY_POOL、BUFFER、SQL缓冲区、字典缓冲区、重做日志缓冲区、排序区和Hash区等。通过示例展示了修改方法,如使用SP_SET_PARA_VALUE过程,并讨论了不同参数的动态和静态修改规则及其影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1

共享内存

1.1

修改共享内存

MEMORY_POOL

决定了以

M

为单位的公共内存池的大小

SQL> call sp_set_para_value(1,'MEMORY_POOL',350);

call sp_set_para_value(1,'MEMORY_POOL',350);

[-839]:Try to alter static ini parameter.

used time: 23.468(ms). Execute id is 0.

MEMORY_POOL

是静态参数,所以不能直接修改内存中的数值。

SQL> call sp_set_para_value(2,'MEMORY_POOL',350);

DMSQL executed successfully

used time: 7.879(ms). Execute id is 25.

能修改dm.ini中的数值,然后重启生效

1.2

限制MEMORY_POOL

大小的相关参数

MEMORY_TARGET

可以用来限制共享内存可以使用多少系统内存,0 表示的是不限制。

SQL> Select para_name,para_value from v$dm_ini where para_name='MEMORY_TARGET';

行号     PARA_NAME     PARA_VALUE

---------- ------------- ----------

1

MEMORY_TARGET 0

2

数据缓冲区

2.1

修改BUFFER

数值

BUFFER

是用户行存表的系统缓冲区。BUFFER表示初始的系统缓冲区大小,单位为M。OLTP  BUFFER 大小为整个物理内存的40%-60%

OLAP  BUFFER

大小为整个物理内存的60%-80%

SQL> call sp_set_para_value(1,'BUFFER',300);

call sp_set_para_value(1,'BUFFER',300);

[-839]:Try to alter static ini parameter.

used time: 5.653(ms). Execute id is 0.

BUFFER

也是静态参数,不能更改内存中的数值

SQL> call sp_set_para_value(2,'BUFFER',300);

DMSQL executed successfully

used time: 7.851(ms). Execute id is 31.

2.2

限制BUFFER

大小的相关参数

当BUFFER_POOLS=1时,系统支持缓冲区的自动扩展。MAX_BUFFER表示最多能扩到多大。在自动扩展后,如果系统的压力在一段时间内比较低,系统又会自动收缩缓冲区。

SQL> Select para_name,para_value from v$dm_ini where para_name='BUFFER_POOLS';

LINEID     para_name    para_value

---------- ------------ ----------

1          BUFFER_POOLS 1

used time: 7.453(ms). Execute id is 5

3 sql

缓冲区

SQL

缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓

存。

很多应用当中都存在反复执行相同 SQL 语句的情况,此时可以使用缓冲区保存这些语句

和它们的执行计划,这就是计划重用。这样带来的好处是加快了 SQL 语句执行效率,但同时

给内存也增加了压力。

DM Server

在配置文件 dm.ini 提供了参数来支持是否需要计划重用,参数为

USE_PLN_POOL

,当指定为非 0 时,则启动计划重用;为 0 时禁止计划重用。DM 同时还提

供了参数 CACHE_POOL_SIZE(单位为 MB),来改变 SQL 缓冲区大小,系统管理员可以设

置该值以满足应用需求,默认值为 10M。

SQL> Select para_name,para_value from v$dm_ini where para_name='USE_PLN_POOL';

LINEID     para_name    para_value

---------- ------------ ----------

USE_PLN_POOL 1

调整sql缓冲区的大小:

1   select para_name,para_value from v$dm_ini where para_name='CACHE_POOL_SIZE';

LINEID     para_name       para_value

---------- --------------- ----------

1          CACHE_POOL_SIZE 20

4

字典缓冲区

DICT_BUF_SIZE

将最近使用的数据字典缓存到内存中,减少物理IO。

SQL> Select para_name,para_value from v$dm_ini where para_name like '%DICT%';

LINEID     para_name               para_value

---------- ----------------------- ----------

1          DICT_BUF_SIZE           5

2          PLN_DICT_HASH_THRESHOLD 20

used time: 7.062(ms). Execute id is 14.

DICT_BUF_SIZE //

大小

PLN_DICT_HASH_THRESHOLD //关联登记

注:当cache_pool_size的值大于等于PLN_DICT_HASH_THRESHOLD的值的时候,才开启记录执行计划中关联的数据字典,从而减少物理IO,调优时需注意。

5

重做日志缓冲区

机制:每3秒写一次。

Commit:;

2   Select para_name,para_value from v$dm_ini where para_name like 'RLOG%';

LINEID     para_name                para_value

---------- ------------------------ ----------

1          RLOG_CRC                 0

2          RLOG_BUF_SIZE            512

3          RLOG_POOL_SIZE           128

4          RLOG_PARALLEL_ENABLE     0

5          RLOG_APPEND_LOGIC        0

6          RLOG_APPEND_SYSTAB_LOGIC 0

7          RLOG_RESERVE_SIZE        40960

8          RLOG_CHECK_SPACE         1

9          RLOG_SAFE_SPACE          128

10         RLOG_SAFE_PERCENT        25

11         RLOG_SEND_APPLY_MON      64

LINEID     para_name        para_value

---------- ---------------- ----------

12         RLOG_CRC_IN_RFIL 1

12 rows got

used time: 7.440(ms). Execute id is 9.

Rlog_buf_size

日志缓冲区的大小 单位 page

RLOG_POOL_SIZE

最大日志缓冲区的大小 M

6

排序区

如果内存排序无法完成,把部分排序转到磁盘上。也就是temp表空间中。

2   Select para_name,para_value from v$dm_ini where para_name like 'SORT%';

LINEID     para_name            para_value

---------- -------------------- ----------

1          SORT_BUF_SIZE        2

2          SORT_BLK_SIZE        1

3          SORT_BUF_GLOBAL_SIZE 1000

4          SORT_FLAG            0

5          SORT_OPT_SIZE        0

used time: 7.172(ms). Execute id is 10.

7 Hash

产生hash join时用到的区。

1   Select para_name,para_value from v$dm_ini where para_name like 'HJ_BUF%';

LINEID     para_name          para_value

---------- ------------------ ----------

1          HJ_BUF_GLOBAL_SIZE 500

2          HJ_BUF_SIZE        50

used time: 7.142(ms). Execute id is 11.

8

修改参数的方法

SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64)

该过程用于修改整型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在INI文件中修改配置参数,

此时可用来修改静态配置参数和动态配置参数。当SCOPE等于1,试图修改静态配置参数时服务器会返回错误信息。只有具有DBA角色的用户才有权限调用SP_SET _PARA_VALUE。

DM

的动态INI参数分为系统级和会话级两种级别。会话级参数在服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值。

1. SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint)

设置某个会话级INI参数的值,设置的参数值只对本会话有效。

2. SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187))

重置某个会话级INI参数的值,使得这个INI参数的值和系统INI参数的值保持一致。

3. SF_GET_SESSION_PARA_VALUE (paraname varchar(8187))

获得当前会话的某个会话级INI参数的值。

下面修改动态参数enable_auidt,scope=1同时修改内存和dm.ini文件

SQL> call sp_set_para_value(1,'ENABLE_AUDIT',1);

DMSQL executed successfully

used time: 87.566(ms). Execute id is 199.

SQL> select sf_get_para_value(1,'ENABLE_AUDIT');

LINEID     SF_GET_PARA_VALUE(1,'ENABLE_AUDIT')

---------- -----------------------------------

1          1

used time: 10.131(ms). Execute id is 200.

查询v$dm_ini视图可以看到,当前dm.ini文件中也被修改了因为file_value=1

SQL> select * from v$dm_ini where para_name='ENABLE_AUDIT';

LINEID     PARA_NAME    PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION                                                                             PARA_TYPE

---------- ------------ ---------- --------- --------- ------- ---------- ---------- --------------------------------------------------------------------------------------- ---------

1          ENABLE_AUDIT 1          0         2         N       1          1          Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit SYS

used time: 201.366(ms). Execute id is 206.

查询v$parameter视图可以看到,当前内存中也被修改了因为sys_value=1

SQL> select * from v$parameter where name='ENABLE_AUDIT';

LINEID     ID          NAME         TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION

---------- ----------- ------------ ---- ----- --------- ---------- ---------------------------------------------------------------------------------------

1          385         ENABLE_AUDIT SYS  1     1         1          Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit

used time: 7.130(ms). Execute id is 207.

下面修改动态参数enable_auidt,scope=2只修改dm.ini文件

SQL> call sp_set_para_value(2,'ENABLE_AUDIT',0);

DMSQL executed successfully

used time: 29.707(ms). Execute id is 208.

SQL> select sf_get_para_value(1,'ENABLE_AUDIT');

LINEID     SF_GET_PARA_VALUE(1,'ENABLE_AUDIT')

---------- -----------------------------------

1          0

查询v$dm_ini视图可以看到,当前dm.ini文件中被修改了因为file_value=0,sess_value=1(session级别还是1并没有改变)

SQL>  select * from v$dm_ini where para_name='ENABLE_AUDIT';

LINEID     PARA_NAME    PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION                                                                             PARA_TYPE

---------- ------------ ---------- --------- --------- ------- ---------- ---------- --------------------------------------------------------------------------------------- ---------

1          ENABLE_AUDIT 1          0         2         N       1          0          Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit SYS

used time: 5.207(ms). Execute id is 209.

查询v$parameter视图可以看到,当前内存中没有被修改了因为sys_value=1

SQL> select * from v$parameter where name='ENABLE_AUDIT';

LINEID     ID          NAME         TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION

---------- ----------- ------------ ---- ----- --------- ---------- ---------------------------------------------------------------------------------------

1          385         ENABLE_AUDIT SYS  1     1         0          Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit

1

共享内存

1.1

修改共享内存

MEMORY_POOL

决定了以

M

为单位的公共内存池的大小

SQL> call sp_set_para_value(1,'MEMORY_POOL',350);

call sp_set_para_value(1,'MEMORY_POOL',350);

[-839]:Try to alter static ini parameter.

used time: 23.468(ms). Execute id is 0.

MEMORY_POOL

是静态参数,所以不能直接修改内存中的数值。

SQL> call sp_set_para_value(2,'MEMORY_POOL',350);

DMSQL executed successfully

used time: 7.879(ms). Execute id is 25.

能修改dm.ini中的数值,然后重启生效

1.2

限制MEMORY_POOL

大小的相关参数

MEMORY_TARGET

可以用来限制共享内存可以使用多少系统内存,0 表示的是不限制。

SQL> Select para_name,para_value from v$dm_ini where para_name='MEMORY_TARGET';

行号     PARA_NAME     PARA_VALUE

---------- ------------- ----------

1

MEMORY_TARGET 0

2

数据缓冲区

2.1

修改BUFFER

数值

BUFFER

是用户行存表的系统缓冲区。BUFFER表示初始的系统缓冲区大小,单位为M。OLTP  BUFFER 大小为整个物理内存的40%-60%

OLAP  BUFFER

大小为整个物理内存的60%-80%

SQL> call sp_set_para_value(1,'BUFFER',300);

call sp_set_para_value(1,'BUFFER',300);

[-839]:Try to alter static ini parameter.

used time: 5.653(ms). Execute id is 0.

BUFFER

也是静态参数,不能更改内存中的数值

SQL> call sp_set_para_value(2,'BUFFER',300);

DMSQL executed successfully

used time: 7.851(ms). Execute id is 31.

2.2

限制BUFFER

大小的相关参数

当BUFFER_POOLS=1时,系统支持缓冲区的自动扩展。MAX_BUFFER表示最多能扩到多大。在自动扩展后,如果系统的压力在一段时间内比较低,系统又会自动收缩缓冲区。

SQL> Select para_name,para_value from v$dm_ini where para_name='BUFFER_POOLS';

LINEID     para_name    para_value

---------- ------------ ----------

1          BUFFER_POOLS 1

used time: 7.453(ms). Execute id is 5

3 sql

缓冲区

SQL

缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓

存。

很多应用当中都存在反复执行相同 SQL 语句的情况,此时可以使用缓冲区保存这些语句

和它们的执行计划,这就是计划重用。这样带来的好处是加快了 SQL 语句执行效率,但同时

给内存也增加了压力。

DM Server

在配置文件 dm.ini 提供了参数来支持是否需要计划重用,参数为

USE_PLN_POOL

,当指定为非 0 时,则启动计划重用;为 0 时禁止计划重用。DM 同时还提

供了参数 CACHE_POOL_SIZE(单位为 MB),来改变 SQL 缓冲区大小,系统管理员可以设

置该值以满足应用需求,默认值为 10M。

SQL> Select para_name,para_value from v$dm_ini where para_name='USE_PLN_POOL';

LINEID     para_name    para_value

---------- ------------ ----------

USE_PLN_POOL 1

调整sql缓冲区的大小:

1   select para_name,para_value from v$dm_ini where para_name='CACHE_POOL_SIZE';

LINEID     para_name       para_value

---------- --------------- ----------

1          CACHE_POOL_SIZE 20

4

字典缓冲区

DICT_BUF_SIZE

将最近使用的数据字典缓存到内存中,减少物理IO。

SQL> Select para_name,para_value from v$dm_ini where para_name like '%DICT%';

LINEID     para_name               para_value

---------- ----------------------- ----------

1          DICT_BUF_SIZE           5

2          PLN_DICT_HASH_THRESHOLD 20

used time: 7.062(ms). Execute id is 14.

DICT_BUF_SIZE //

大小

PLN_DICT_HASH_THRESHOLD //关联登记

注:当cache_pool_size的值大于等于PLN_DICT_HASH_THRESHOLD的值的时候,才开启记录执行计划中关联的数据字典,从而减少物理IO,调优时需注意。

5

重做日志缓冲区

机制:每3秒写一次。

Commit:;

2   Select para_name,para_value from v$dm_ini where para_name like 'RLOG%';

LINEID     para_name                para_value

---------- ------------------------ ----------

1          RLOG_CRC                 0

2          RLOG_BUF_SIZE            512

3          RLOG_POOL_SIZE           128

4          RLOG_PARALLEL_ENABLE     0

5          RLOG_APPEND_LOGIC        0

6          RLOG_APPEND_SYSTAB_LOGIC 0

7          RLOG_RESERVE_SIZE        40960

8          RLOG_CHECK_SPACE         1

9          RLOG_SAFE_SPACE          128

10         RLOG_SAFE_PERCENT        25

11         RLOG_SEND_APPLY_MON      64

LINEID     para_name        para_value

---------- ---------------- ----------

12         RLOG_CRC_IN_RFIL 1

12 rows got

used time: 7.440(ms). Execute id is 9.

Rlog_buf_size

日志缓冲区的大小 单位 page

RLOG_POOL_SIZE

最大日志缓冲区的大小 M

6

排序区

如果内存排序无法完成,把部分排序转到磁盘上。也就是temp表空间中。

2   Select para_name,para_value from v$dm_ini where para_name like 'SORT%';

LINEID     para_name            para_value

---------- -------------------- ----------

1          SORT_BUF_SIZE        2

2          SORT_BLK_SIZE        1

3          SORT_BUF_GLOBAL_SIZE 1000

4          SORT_FLAG            0

5          SORT_OPT_SIZE        0

used time: 7.172(ms). Execute id is 10.

7 Hash

产生hash join时用到的区。

1   Select para_name,para_value from v$dm_ini where para_name like 'HJ_BUF%';

LINEID     para_name          para_value

---------- ------------------ ----------

1          HJ_BUF_GLOBAL_SIZE 500

2          HJ_BUF_SIZE        50

used time: 7.142(ms). Execute id is 11.

8

修改参数的方法

SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64)

该过程用于修改整型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在INI文件中修改配置参数,

此时可用来修改静态配置参数和动态配置参数。当SCOPE等于1,试图修改静态配置参数时服务器会返回错误信息。只有具有DBA角色的用户才有权限调用SP_SET _PARA_VALUE。

DM

的动态INI参数分为系统级和会话级两种级别。会话级参数在服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值。

1. SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint)

设置某个会话级INI参数的值,设置的参数值只对本会话有效。

2. SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187))

重置某个会话级INI参数的值,使得这个INI参数的值和系统INI参数的值保持一致。

3. SF_GET_SESSION_PARA_VALUE (paraname varchar(8187))

获得当前会话的某个会话级INI参数的值。

下面修改动态参数enable_auidt,scope=1同时修改内存和dm.ini文件

SQL> call sp_set_para_value(1,'ENABLE_AUDIT',1);

DMSQL executed successfully

used time: 87.566(ms). Execute id is 199.

SQL> select sf_get_para_value(1,'ENABLE_AUDIT');

LINEID     SF_GET_PARA_VALUE(1,'ENABLE_AUDIT')

---------- -----------------------------------

1          1

used time: 10.131(ms). Execute id is 200.

查询v$dm_ini视图可以看到,当前dm.ini文件中也被修改了因为file_value=1

SQL> select * from v$dm_ini where para_name='ENABLE_AUDIT';

LINEID     PARA_NAME    PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION                                                                             PARA_TYPE

---------- ------------ ---------- --------- --------- ------- ---------- ---------- --------------------------------------------------------------------------------------- ---------

1          ENABLE_AUDIT 1          0         2         N       1          1          Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit SYS

used time: 201.366(ms). Execute id is 206.

查询v$parameter视图可以看到,当前内存中也被修改了因为sys_value=1

SQL> select * from v$parameter where name='ENABLE_AUDIT';

LINEID     ID          NAME         TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION

---------- ----------- ------------ ---- ----- --------- ---------- ---------------------------------------------------------------------------------------

1          385         ENABLE_AUDIT SYS  1     1         1          Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit

used time: 7.130(ms). Execute id is 207.

下面修改动态参数enable_auidt,scope=2只修改dm.ini文件

SQL> call sp_set_para_value(2,'ENABLE_AUDIT',0);

DMSQL executed successfully

used time: 29.707(ms). Execute id is 208.

SQL> select sf_get_para_value(1,'ENABLE_AUDIT');

LINEID     SF_GET_PARA_VALUE(1,'ENABLE_AUDIT')

---------- -----------------------------------

1          0

查询v$dm_ini视图可以看到,当前dm.ini文件中被修改了因为file_value=0,sess_value=1(session级别还是1并没有改变)

SQL>  select * from v$dm_ini where para_name='ENABLE_AUDIT';

LINEID     PARA_NAME    PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION                                                                             PARA_TYPE

---------- ------------ ---------- --------- --------- ------- ---------- ---------- --------------------------------------------------------------------------------------- ---------

1          ENABLE_AUDIT 1          0         2         N       1          0          Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit SYS

used time: 5.207(ms). Execute id is 209.

查询v$parameter视图可以看到,当前内存中没有被修改了因为sys_value=1

SQL> select * from v$parameter where name='ENABLE_AUDIT';

LINEID     ID          NAME         TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION

---------- ----------- ------------ ---- ----- --------- ---------- ---------------------------------------------------------------------------------------

1          385         ENABLE_AUDIT SYS  1     1         0          Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值