注册
数据库的内存参数设置,避免单个session对系统产生过大影响

数据库的内存参数设置,避免单个session对系统产生过大影响

hql 2021/11/09 2507 5 0
摘要 如果系统各种,有异常的SQL,一时间找不出来;或者我们就是要改造保护好我们的实例,我们要让奇怪的sql报错,不要伤害我们的数据库,我们一般都会在一般的配置基础上,对于内存参数,再进行一定的配置。

数据库的内存参数设置,避免单个session对系统产生过大影响

设置参数: MAX_SESSION_MEMORY
默认值: 0
说明: Maximum memory(In Megabytes) a single session can use
建议默认值为: 2GB

设置方法:执行下面SQL即可:

sp_set_para_value(1,‘MAX_SESSION_MEMORY’,2048);–单位为M 这里是设置 2GB

说明:系统级,设置后是立即生效的;如果有会话已经超了,执行语句时会报错:[-549]:The session memory quota is insufficient.

其他内存参数说明:

这些参数要重启数据库才能生效。

sp_set_para_value(2,‘VM_POOL_TARGET’,10240); --单位为K 这里时设置 10M
sp_set_para_value(2,‘SESS_POOL_TARGET’,10240); --单位为K 这里时设置 10M
sp_set_para_value(2,‘VM_POOL_SIZE’,2048); --单位为K 这里时设置 2M
sp_set_para_value(2,‘SESS_POOL_SIZE’,2048); --单位为K 这里时设置 2M

风险评估

  1. MAX_SESSION_MEMORY 会话级,达到2G一般来说,都是异常会话。

结合下面sql,可以知道当前数据库上的所有session,已用内存情况。

SELECT creator , sum(TOTAL_SIZE) /1024.0 总大小KB , sum(TARGET_SIZE) /1024.0 水位线KB, sum(ORG_SIZE) /1024.0 初始大小KB FROM V$MEM_POOL group by creator having count(*)<=4 order by 2 desc;
  1. VM_POOL_SIZE SESS_POOL_SIZE 默认值均为64k,默认值偏小; VM_POOL_TARGET SESS_POOL_TARGET 默认值均为16M,默认值偏大;它们是一组相关的参数。
    VM_POOL_SIZE SESS_POOL_SIZE 建议根据实际情况适当调整。在连接数可控的系统上,无其他风险。
    VM_POOL_TARGET SESS_POOL_TARGET 在连接数较大的系统上,或者要控制内存使用的系统上,建议根据实际情况适当小,否则,需要适当增加数据库服务器物理内存。

结合下面sql,可以知道当前数据库上的所有session,已用内存情况。

-- 全部都超了 平均值在 (主要关注平均值) 
-- 预期想让 会话私有内存 自持
SELECT creator,avg(TOTAL_SIZE/1024.0) over (partition by 1),TOTAL_SIZE/1024.0,TARGET_SIZE/1024.0,ORG_SIZE/1024.0,TOTAL_SIZE*1.0/ORG_SIZE FROM V$MEM_POOL WHERE NAME IN ('SESSION')

-- 均值到了 (主要关注平均值)  
-- 预期想让 vm 自持
SELECT creator,avg(TOTAL_SIZE/1024.0) over (partition by 1),TOTAL_SIZE/1024.0,ORG_SIZE/1024.0,TOTAL_SIZE*1.0/ORG_SIZE FROM   V$MEM_POOL WHERE NAME IN ('VIRTUAL MACHINE')

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服