达梦数据库学习笔记转载:达梦数据库自动根据机器配置调整性能相关参数(转载)

原文链接:达梦数据库自动根据机器配置调整性能相关参数 | 达梦技术社区

达梦数据库自动根据机器配置调整性能相关参数 

安装完达梦数据库后,可以执行以下脚本自动调整性能相关的参数: 

declare
v_mem_mb int;
v_cpus int;
mem_per int:=100;
MEMORY_POOL int;
BUFFER INT;
MAX_BUFFER INT;
RECYCLE int;
CACHE_POOL_SIZE int;
BUFFER_POOLS int;
RECYCLE_POOLS int;
SORT_BUF_SIZE int;
SORT_BUF_GLOBAL_SIZE INT;
DICT_BUF_SIZE  INT;
SESS_POOL_SIZE INT;
HJ_BUF_SIZE INT;
HAGR_BUF_SIZE INT;
HJ_BUF_GLOBAL_SIZE INT;
HAGR_BUF_GLOBAL_SIZE INT;
TASK_THREADS INT;
SORT_FLAG INT;
SORT_BLK_SIZE INT;
RLOG_POOL_SIZE INT;
 
begin
    SELECT TOP 1 N_CPU,TOTAL_PHY_SIZE/1024/1024 INTO v_cpus,v_mem_mb FROM V$SYSTEMINFO;
    
    print v_cpus;
    print v_mem_mb;
    
    v_mem_mb=round(v_mem_mb,-3);
    print v_mem_mb;
    
    IF v_mem_mb <= 2000  THEN
      return;
    END IF;
    
    
    IF v_mem_mb > 512000 THEN  
       v_mem_mb :=v_mem_mb*0.8;
    END IF;
    
    TASK_THREADS :=8;
    IF v_cpus < 8  THEN   
      TASK_THREADS :=4;
    END IF;
    
    IF v_cpus >= 64 THEN 
       v_cpus := 64; 
       TASK_THREADS :=16;
    END IF;
    
    SP_SET_PARA_VALUE(2,'WORKER_THREADS',v_cpus);
    SP_SET_PARA_VALUE(2,'TASK_THREADS',TASK_THREADS);
    
    BUFFER := round(cast(v_mem_mb * 0.5 as int),-3);
    MAX_BUFFER := BUFFER;
    RECYCLE :=LEAST(cast(v_mem_mb * 0.125 as int),50000);
    
    
  IF v_mem_mb < 70000 THEN
    
       with t as
        (
                select rownum rn from dual connect by level <= 100
        ) ,
        t1 as
        (
                select * from t where rn > 1 minus
                select
                        ta.rn * tb.rn
                from
                        t ta,
                        t tb
                where
                        ta.rn <= tb.rn
                    and ta.rn  > 1
                    and tb.rn  > 1
        )
      select top 1 rn into BUFFER_POOLS from t1 where rn > v_mem_mb/800 order by 1;
      
      PRINT 'BUFFER_POOLS ' || BUFFER_POOLS;
       
 
      --设置根据内存情况RECYCLE_POOLS参数
        with t as
        (
                select rownum rn from dual connect by level <= 100
        ) ,
        t1 as
        (
                select * from t where rn > 1 minus
                select
                        ta.rn * tb.rn
                from
                        t ta,
                        t tb
                where
                        ta.rn <= tb.rn
                    and ta.rn  > 1
                    and tb.rn  > 1
        )
      select top 1 rn into RECYCLE_POOLS from t1 where rn > v_mem_mb/800/3 order by 1;
      
      PRINT 'RECYCLE_POOLS ' || RECYCLE_POOLS;
      
        
    ELSE
       BUFFER_POOLS := 101;
       RECYCLE_POOLS := 41;
    END IF;
    
    --修改内存池
    IF v_mem_mb >= 16000  THEN 
       MEMORY_POOL := 2048;
       CACHE_POOL_SIZE := 1024;
       
       SORT_FLAG = 0;
       SORT_BLK_SIZE=1;
       SORT_BUF_SIZE := 10;
       SORT_BUF_GLOBAL_SIZE := 2000;
       SESS_POOL_SIZE := 16;
       RLOG_POOL_SIZE := 1024;
       
       HJ_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),10000);
       HAGR_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),10000);
       HJ_BUF_SIZE  :=500;
           HAGR_BUF_SIZE :=500;
       
       IF v_mem_mb >= 64000 THEN
          CACHE_POOL_SIZE := 2048;
          RLOG_POOL_SIZE := 2048;
          SORT_FLAG = 1;
          SORT_BLK_SIZE=1;
          SORT_BUF_SIZE=512; 
          SORT_BUF_GLOBAL_SIZE=5120 ;
          SESS_POOL_SIZE := 32;  
          
          HJ_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),15000);
          HAGR_BUF_GLOBAL_SIZE := LEAST(cast(v_mem_mb * 0.0625 as int),15000);
          HJ_BUF_SIZE  :=1000;
          HAGR_BUF_SIZE :=1000;
       END IF;
       
       DICT_BUF_SIZE := 500;
       HJ_BUF_GLOBAL_SIZE :=round(HJ_BUF_GLOBAL_SIZE,-3);
       HAGR_BUF_GLOBAL_SIZE :=round(HAGR_BUF_GLOBAL_SIZE,-3);
       RECYCLE :=round(RECYCLE,-3);
    ELSE
       MEMORY_POOL :=GREAT(cast(v_mem_mb * 0.0625 as int),100);
       CACHE_POOL_SIZE := 200;
       RLOG_POOL_SIZE  := 256;
       SORT_BUF_SIZE := 10;
       SORT_BUF_GLOBAL_SIZE := 500;
       DICT_BUF_SIZE := 50;
       SESS_POOL_SIZE =16;
       SORT_FLAG = 0;
       SORT_BLK_SIZE=1;
       
       HJ_BUF_GLOBAL_SIZE := GREAT(cast(v_mem_mb * 0.0625 as int),500);
       HAGR_BUF_GLOBAL_SIZE := GREAT(cast(v_mem_mb * 0.0625 as int),500);
       HJ_BUF_SIZE := GREAT(cast(v_mem_mb * 0.00625 as int),50);
       HAGR_BUF_SIZE :=GREAT(cast(v_mem_mb * 0.00625 as int),50);
    END IF;    
    
    v_mem_mb := v_mem_mb * (mem_per/100.0);
    --修改内存
    SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY',       mem_per);
    SP_SET_PARA_VALUE(2,'MEMORY_POOL',         MEMORY_POOL);    
    SP_SET_PARA_VALUE(2,'BUFFER',              BUFFER);
    SP_SET_PARA_VALUE(2,'MAX_BUFFER',          MAX_BUFFER);
    SP_SET_PARA_VALUE(2,'BUFFER_POOLS',        BUFFER_POOLS);
    SP_SET_PARA_VALUE(2,'RECYCLE',               RECYCLE);    
    SP_SET_PARA_VALUE(2,'RECYCLE_POOLS',       RECYCLE_POOLS);
    
    SP_SET_PARA_VALUE(2,'HJ_BUF_GLOBAL_SIZE',  HJ_BUF_GLOBAL_SIZE);
    SP_SET_PARA_VALUE(2,'HJ_BUF_SIZE',        HJ_BUF_SIZE );
    SP_SET_PARA_VALUE(2,'HAGR_BUF_GLOBAL_SIZE',HAGR_BUF_GLOBAL_SIZE);
    SP_SET_PARA_VALUE(2,'HAGR_BUF_SIZE',     HAGR_BUF_SIZE  );
    
    SP_SET_PARA_VALUE(2,'RLOG_POOL_SIZE',      RLOG_POOL_SIZE);
    SP_SET_PARA_VALUE(2,'SESS_POOL_SIZE',      SESS_POOL_SIZE);
    SP_SET_PARA_VALUE(2,'CACHE_POOL_SIZE',     CACHE_POOL_SIZE);    
    SP_SET_PARA_VALUE(2,'DICT_BUF_SIZE',       DICT_BUF_SIZE); 
    
    SP_SET_PARA_VALUE(2,'SORT_FLAG',SORT_FLAG);
    SP_SET_PARA_VALUE(2,'SORT_BLK_SIZE',SORT_BLK_SIZE);
    SP_SET_PARA_VALUE(2,'SORT_BUF_SIZE',       SORT_BUF_SIZE);
    SP_SET_PARA_VALUE(2,'SORT_BUF_GLOBAL_SIZE',       SORT_BUF_GLOBAL_SIZE);
 
    SP_SET_PARA_VALUE(2,'USE_PLN_POOL',        1); 
    SP_SET_PARA_VALUE(2,'OLAP_FLAG',           2); 
    SP_SET_PARA_VALUE(2,'VIEW_PULLUP_FLAG',    1); 
    SP_SET_PARA_VALUE(2,'ENABLE_MONITOR',      1); 
    SP_SET_PARA_VALUE(2,'SVR_LOG',             0); 
    SP_SET_PARA_VALUE(2,'TEMP_SIZE',           1024);
    SP_SET_PARA_VALUE(2,'TEMP_SPACE_LIMIT',    20480); 
    SP_SET_PARA_VALUE(2,'MAX_SESSIONS',        1500); 
    SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 20000); 
    SP_SET_PARA_VALUE(1,'PK_WITH_CLUSTER',        0); 
    SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',0);  
    SP_SET_PARA_VALUE(2,'OPTIMIZER_MODE',1); 
end;
/
 

–根据空间情况扩一下redo日志,默认的较小 

alter database resize logfile 'DAMENG01.log' to 1024; alter database resize logfile 'DAMENG02.log' to 1024; 

执行完以上脚本后,重启数据库服务即可生效。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值