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