注册
AIX环境达梦单机部署
培训园地/ 文章详情 /

AIX环境达梦单机部署

rgy 2022/11/28 1540 2 0

1 数据库介绍

1.1 产品特性

  • 100% 自主研发
    国内唯一完全自主研发的数据库。40 年研究沉淀,不采用任何开源内核,完全掌握核心技术。技术路线稳定可控,无知识产权风险。

  • 大型通用
    全面适配各种软硬件体系,支持主流 SQL 标准和通用编程语言、接口、开发框架。在高并发、大数据量的应用中优势明显。

  • 高性能
    采用基于代价计算的优化器和独立的虚拟机执行器,通过批量数据向量化执行和 MVCC 多版本并发控制等技术提升性能,实现双路 CPU 单节点 TPMC 达到百万级。

  • 支持 HTAP 混合型业务
    行列融合存储技术,支持混合负载,一套系统上同时支撑 OLAP 和 OLTP 业务场景,在此基础上,具备 HTAP 混合型业务处理能力。

  • 最高安全等级
    最早通过国家安全四级 EAL4+ 认证,支持国密算法以及第三方加密设备,是国内最高安全等级的数据库。

  • 灵活部署
    同一内核,同一语法和接口,可按照用户业务需求配置为不同集群模式,支持集中式、分布式架构,降低迁移、使用、运维成本。

1.2 产品架构

DM8 采用了独特的双存储引擎架构,行存储引擎和列存储引擎可相互配合、协同工作。同时实现了计算层和存储层的分离,同一内核既支持共享存储式集群,也支持分布式事务集群。 相较于目前主流产品架构——不同特性依靠不同内核去实现,DM8 架构为业界首创,也是未来数据库架构的发展方向。

1.3 数据库版本区别

根据不同的应用需求与配置, DM 提供了多种不同的产品系列版本:

  • DM 开发版
    DM 开发版是指用于业务场景开发时所用的数据库,除不支持数据库集群等企业级功能,开发版提供了完整的功能,支持 TB 级数据量,支持多用户并发访问能力,满足各种中、小型应用的需要。但开发版有授权许可的限制,仅供开发者用于学习、测试、开发用途。试用时间为 1 年,1 年后如果想继续用该库,就需要增加 dm.key。

  • DM Standard Edition 标准版
    DM 标准版是为政府部门、中小型企业及互联网/内部网应用提供的数据管理和分析平台。它拥有数据库管理、安全管理、开发支持等所需的基本功能,支持 TB 级数据量,支持多用户并发访问等。该版本以其前所未有的易用性和高性价比,为政府或企业提供支持其操作所需的基本能力,并能够根据用户需求完美升级到企业版。

  • DM Enterprise Edition 企业版
    DM 企业版是伸缩性良好、功能齐全的数据库,无论是用于驱动网站、打包应用程序,还是联机事务处理、决策分析或数据仓库应用, DM 企业版都能作为专业的服务平台。DM 企业版支持多 CPU,支持 TB 级海量数据存储和大量的并发用户,并为高端应用提供了数据复制、数据守护等高可靠性、高性能的数据管理能力,完全能够支撑各类企业应用。

  • DM Security Edition 安全版
    DM 安全版拥有企业版的所有功能,并重点加强了其安全特性,引入强制访问控制功能,采用数据库管理员 (DBA)、数据库审计员 (AUDITOR)、数据库安全员 (SSO)、数据库对象操作员 (DBO) 四权分立安全机制,支持 KERBEROS、操作系统用户等多种身份鉴别与验证,支持透明、半透明等存储加密方式以及审计控制、通信加密等辅助安全手段,使 DM 安全级别达到 B1 级,适合于对安全性要求更高的政府或企业敏感部门选用。需要注意的是部署安全版版本时一定要放key文件,初始化数据库。如果不放key文件初始化数据库,将是以企业版提供服务,后面再放key文件会提示标记不匹配或lic info is different between dm.key and sysinfo

  • 版本之间对比
    image.png
    image.png

1.4 硬件平台支持

对比项 开发版 标准版 企业版 安全版
硬件平台支持 Windows、Linux 6 系列、Linux 7 系列、龙芯、飞腾 Windows 全系列、Linux 全系列、龙芯、飞腾、申威、泰山、海光、兆芯、Power、安腾 Windows 全系列、Linux 全系列、龙芯、飞腾、申威、泰山、海光、兆芯、Power、安腾 Windows 全系列、Linux 全系列、龙芯、飞腾、申威、泰山、海光、兆芯、Power、安腾

2 数据库部署

2.1 修改资源限制参数

备份limits文件 cp /etc/security/limits /etc/security/limits.bak vi /etc/security/limits 将内容添加在最后 dmdba soft nice 0 dmdba hard nice 0 dmdba soft as unlimited dmdba hard as unlimited dmdba soft fsize unlimited dmdba hard fsize unlimited dmdba soft nproc 65536 dmdba hard nproc 65536 dmdba soft nofile 65536 dmdba hard nofile 65536 dmdba soft core unlimited dmdba hard core unlimited dmdba soft data unlimited dmdba hard data unlimited cat /etc/security/limits

2.2 修改内核参数

#增加系统文件描述符限制 2^20-1
#表示系统级别的能够打开的文件句柄的数量。是对整个系统的限制,并不是针对用户的

AIX内核参数跟Linux区别比较大,AIX也比较智能,相对通用的调整已经在这个文件里:cat /etc/tunables/nextboot
客户自建机房/私有云环境 数据库服务器一般网络质量较好,且一般是长链接,这俩AIX上一般不怎么调整。如果短连接特多,可以考虑这几个:
no -o tcp_keepidle=32 #default 14400
no -o tcp_keepintvl=8 #default 150
no -o tcp_keepcnt=4 #keepalive probes, def=8
no –o tcp_keepinit=12 #default 150
no -po tcp_finwait2=120 #default 1200

如果应用与数据库服务器不在一起,网络距离远质量差,丢包较多的环境,增加设置
no -ro tcp_low_rto=20 -o timer_wheel_tick=1
no -po tcp_low_rto=20

2.3 创建数据库用户和组

mkgroup dinstall useradd -g dinstall -d /home/dmdba -m dmdba passwd dmdba --密码 Hn@dameng123

2.4 创建目录并授权

mkdir -p /data/arch mkdir -p /data/dmback chown -R dmdba:dinstall /data chmod -R 775 /data

2.5 配置环境变量

切换到dmdba用户配置环境变量,添加字符集否则disql登录会乱码

su - dmdba vi ~/.profile export LANG=zh_CN.UTF8 export DM_HOME=/data/dmdbms export PATH=$PATH:$DM_HOME/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

–使环境变量生效
. ~/.profile

2.6 挂载数据库软件的iso文件

需要使用root用户挂载数据库软件的iso文件,创建dmiso挂载目录
mkdir -p /dmiso
aix挂在iso文件方式:
loopmount -i /data/dm8_20220620_ppc_aix7_64.iso -o "-V cdrfs -o ro" -m /dmiso

切换到dmdba用户安装

$ cd /dmiso $ ls -l total 1730648 -r-xr-xr-x 1 root system 2802614 Jun 20 17:28 dm8 install.pdf -r-xr-xr-x 1 root system 883286342 Jun 20 17:32 dminstall.bin $

安装方式与linux环境一样,使用dminstall.bin -i命令安装,注意:如果是安全版安装时一定要放dm.key文件

$ ./dminstall.bin -i 请选择安装语言(C/c:中文 E/e:英文) [C/c]:c 解压安装程序......... 欢迎使用达梦数据库安装程序 是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n 是否设置时区? (Y/y:是 N/n:否) [Y/y]:y 设置时区: [ 1]: GTM-12=日界线西 [ 2]: GTM-11=萨摩亚群岛 [ 3]: GTM-10=夏威夷 [ 4]: GTM-09=阿拉斯加 [ 5]: GTM-08=太平洋时间(美国和加拿大) [ 6]: GTM-07=亚利桑那 [ 7]: GTM-06=中部时间(美国和加拿大) [ 8]: GTM-05=东部部时间(美国和加拿大) [ 9]: GTM-04=大西洋时间(美国和加拿大) [10]: GTM-03=巴西利亚 [11]: GTM-02=中大西洋 [12]: GTM-01=亚速尔群岛 [13]: GTM=格林威治标准时间 [14]: GTM+01=萨拉热窝 [15]: GTM+02=开罗 [16]: GTM+03=莫斯科 [17]: GTM+04=阿布扎比 [18]: GTM+05=伊斯兰堡 [19]: GTM+06=达卡 [20]: GTM+07=曼谷,河内 [21]: GTM+08=中国标准时间 [22]: GTM+09=汉城 [23]: GTM+10=关岛 [24]: GTM+11=所罗门群岛 [25]: GTM+12=斐济 [26]: GTM+13=努库阿勒法 [27]: GTM+14=基里巴斯 请选择设置时区 [21]:21 安装类型: 1 典型安装 2 服务器 3 客户端 4 自定义 请选择安装类型的数字序号 [1 典型安装]:1 所需空间: 1618M 请选择安装目录 [/home/dmdba/dmdbms]:/data/dmdbms 可用空间: 1326G 是否确认安装路径(/data/dmdbms)? (Y/y:是 N/n:否) [Y/y]:y 安装前小结 安装位置: /data/dmdbms 所需空间: 1618M 可用空间: 1326G 版本信息: 有效日期: 安装类型: 典型安装 是否确认安装? (Y/y:是 N/n:否):y 2022-11-24 12:16:43 [INFO] 安装达梦数据库... 2022-11-24 12:16:43 [INFO] 安装 基础 模块... 2022-11-24 12:16:47 [INFO] 安装 服务器 模块... 2022-11-24 12:16:48 [INFO] 安装 客户端 模块... 2022-11-24 12:16:53 [INFO] 安装 驱动 模块... 2022-11-24 12:16:54 [INFO] 安装 手册 模块... 2022-11-24 12:16:55 [INFO] 安装 服务 模块... 2022-11-24 12:16:56 [INFO] 移动日志文件。 2022-11-24 12:16:57 [INFO] 安装达梦数据库完成。 请以root系统用户执行命令: /data/dmdbms/script/root/root_installer.sh 当前用户环境变量已修改。如需环境变量立即生效,请执行". ~/.profile""source ~/.profile"命令或重新打开终端。 安装结束 $ 切换到root用户注册root脚本 # /data/dmdbms/script/root/root_installer.sh 移动 /data/dmdbms/bin/dm_svc.conf 到/etc目录 修改服务器权限 创建DmAPService服务 移动服务脚本文件(/data/dmdbms/bin/DmAPService 到 /etc/rc.d/init.d/DmAPService 创建服务(DmAPService)完成 启动DmAPService服务 Starting DmAPService: [ OK ]

2.7 使用dminit工具初始化实例

切换到dmdba用户操作,执行以下命令
su - dmdba
cd /data/dmdbms/bin
./dminit path=/data page_size=32 case_sensitive=1 extent_size=32 LENGTH_IN_CHAR=1 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb

数据库初始化过程如下

$ $ GTH_IN_CHAR=1 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb < initdb V8 db version: 0x7000c file dm.key not found, use default license! License will expire on 2023-05-12 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /data/dmdb/dmdb01.log log file path: /data/dmdb/dmdb02.log write to dir [/data/dmdb]. create dm database success. 2022-11-24 13:04:54 $ $

2.8 注册数据库服务
以系统服务方式启动实例,DM 提供脚本将数据库实例注册为操作系统服务。
root 用户下切换到 cd /data/dmdbms/script/root/:
cd /data/dmdbms/script/root/
执行以下命令,执行脚本注册服务:
./dm_service_installer.sh -t dmserver -p dmdb -dm_ini /data/dmdb/dm.ini

# cd /data/dmdbms/script/root/ # ./dm_service_installer.sh -t dmserver -p dmdb -dm_ini /data/dmdb/dm.ini 移动服务脚本文件(/data/dmdbms/bin/DmServicedmdb 到 /etc/rc.d/init.d/DmServicedmdb) 创建服务(DmServicedmdb)完成 # 执行以下命令,以服务方式启动实例: /etc/rc.d/init.d/DmServicedmdb start `# su - dmdba $ /etc/rc.d/init.d/DmServicedmdb start Starting DmServicedmdb: [ OK ] $

2.9 使用disql登录数据库检查

$ ./disql SYSDBA/SYSDBA 服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.268(ms) disql V8 SQL> SQL> SELECT instance_name,BUILD_VERSION,"V$INSTANCE"."STATUS$" FROM SYS."V$INSTANCE"; 行号 INSTANCE_NAME BUILD_VERSION STATUS$ ---------- ------------- ---------------------------------- ------- 1 DMDB 1-2-114-22.05.12-160553-10045-ENT OPEN 已用时间: 0.734(毫秒). 执行号:60101. SQL>

2.10 开启归档

生产环境必须开启归档日志(在线方式配置归档),且必须限制归档日志保留量,限制方法:
1.设置归档空间大小限制即指定 SPACE_LIMIT 参数(单位是 MB)。
2.定期删除归档日志(设置定时作业)。
例如开启归档并限制归档空间为 100G(按实际存储空间给合适的值),如下所示

alter database mount; alter database add archivelog 'dest=/data/arch ,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=153600'; alter database archivelog; alter database open;

2.11 配置SQL日志

数据文件存放目录修改sqllog.ini(实例路径下),相关参数含义参考管理员手册。

vi /data/dmdb/sqllog.ini BUF_TOTAL_SIZE = 10240 #SQLs Log Buffer Total Size(K)(1024~1024000) BUF_SIZE = 1024 #SQLs Log Buffer Size(K)(50~409600) BUF_KEEP_CNT = 6 #SQLs Log buffer keeped count(1~100) [SLOG_ALL] FILE_PATH = ../log PART_STOR = 1 SWITCH_MODE = 2 SWITCH_LIMIT = 512 ASYNC_FLUSH = 1 FILE_NUM = 5 ITEMS = 0 SQL_TRACE_MASK = 2:3:25 MIN_EXEC_TIME = 1500 USER_MODE = 0 USERS =

2.12 指定备份策略

根据应用需求,定制备份策略如下所示

  • 执行以下命令,创建作业系统表:(提前规划备份的路径)
SP_INIT_JOB_SYS(1);
  • 全量备份(每周六 23 点全备):其中有1分钟后的一次性全备调度,执行完成后检查备份是否成功。
call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'每周六 23 点全备'); call SP_JOB_CONFIG_START('bakfull'); call SP_ADD_JOB_STEP('bakfull', 'bak1', 6, '01020000/data/dmback', 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('bakfull', 'std1', 1, 2, 1, 64, 0, '23:00:00', NULL, '2021-12-27 11:52:22', NULL, ''); call SP_JOB_CONFIG_COMMIT('bakfull');
  • 增量备份(每周除周六外每天 23 点增量备份):
call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'每周除周六外每天 23 点增量备份'); call SP_JOB_CONFIG_START('bakincr'); call SP_ADD_JOB_STEP('bakincr', 'bak2', 6, '41010000/data/dmback|/data/dmback', 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('bakincr', 'std2', 1, 2, 1, 63, 0, '23:00:00', NULL, '2021-12-27 11:52:22', NULL, ''); call SP_JOB_CONFIG_COMMIT('bakincr');
  • 备份定期删除(每天 23:30 删除 14 天前备份):
call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'每天 23:30 删除 14 天前备份'); call SP_JOB_CONFIG_START('delbak'); call SP_ADD_JOB_STEP('delbak','bak1',0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/data/dmback'');call sp_db_bakset_remove_batch(''DISK'',now()-14);', 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '23:30:00', NULL, '2021-12-27 11:52:22', NULL, ''); call SP_JOB_CONFIG_COMMIT('delbak');
  • 另外添加自动收集统计信息的任务(每天1点收集全库统计信息)
call SP_CREATE_JOB('statistics',1,0,'',0,0,'',0,''); call SP_JOB_CONFIG_START('statistics'); call SP_ADD_JOB_STEP('statistics', 'statistics1', 0, 'begin for rs in (select ''sf_set_SESSION_para_value(''''HAGR_HASH_SIZE'''',(select cast( case when max(table_rowcount(owner,table_name))&lt;=(select max_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') and max(table_rowcount(owner,table_name))>=( select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') then max(table_rowcount(owner,table_name)) when max(table_rowcount(owner,table_name))&lt;( select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') then (select min_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') else (select max_value from v$dm_ini where para_Name=''''HAGR_HASH_SIZE'''') end as bigint) from dba_tables where owner=''''''||NAME||''''''));'' sql1,''DBMS_STATS.GATHER_SCHEMA_STATS(''''''||NAME||'''''',100,TRUE,''''FOR ALL COLUMNS SIZE AUTO'''');'' sql2 from SYS.SYSOBJECTS where TYPE$=''SCH'' ) loop execute immediate rs.sql1; execute immediate rs.sql2; end loop; end;', 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE('statistics', 'statistics1', 1, 2, 1, 64, 0, '01:00:00', NULL, '2021-12-27 11:52:22', NULL, ''); call SP_JOB_CONFIG_COMMIT('statistics');

2.13 数据库参数优化调整

完成以上所有步骤之后,还需对实例参数优化。可通过手动方式和自动方式进行调整。为增强参数优化的适用性,降低参数修改的过程风险,建议使用达梦数据库提供的 AutoParaAdj.sql 脚本进行实例参数优化,调整完成之后重启数据库使参数生效。

declare exec_mode int:= 0; --0表示直接执行脚本修改参数,1表示不直接修改参数,打印设置参数的语句,设置为1后,必须调整v_mem_mb和v_cpus mem_per int:= 100; --默认所有的内存归达梦数据库使用,如实际不能100%可用,可以调整此参数 v_mem_mb int:= 209715; --根据机器实际内存调整此参数 v_cpus int:= 96; --根据机器CPU核数调整此参数 tname varchar(100); MEMORY_POOL int; MEMORY_N_POOLS int; MEMORY_TARGET 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; HJ_BUF_SIZE INT; HAGR_BUF_SIZE INT; HJ_BUF_GLOBAL_SIZE INT; HAGR_BUF_GLOBAL_SIZE INT; --SORT_FLAG INT; SORT_BLK_SIZE INT; RLOG_POOL_SIZE INT; TASK_THREADS INT; IO_THR_GROUPS INT; FAST_POOL_PAGES INT :=3000; FAST_ROLL_PAGES INT :=1000; CNT INT; begin CNT :=0; if exec_mode=0 then SELECT TOP 1 N_CPU,TOTAL_PHY_SIZE/1024/1024 INTO v_cpus,v_mem_mb FROM V$SYSTEMINFO; end if; v_mem_mb := v_mem_mb * (mem_per/100.0); v_mem_mb=round(v_mem_mb,-3); IF v_mem_mb &lt;= 2000 THEN goto return_2000; END IF; IF v_mem_mb > 512000 THEN v_mem_mb :=v_mem_mb*0.8; END IF; MEMORY_TARGET=round(cast(v_mem_mb * 0.12 as int),-3); TASK_THREADS :=4; IO_THR_GROUPS :=4; IF v_cpus &lt; 8 THEN TASK_THREADS :=4; IO_THR_GROUPS :=2; END IF; IF v_cpus >= 64 THEN v_cpus := 64; TASK_THREADS :=16; IO_THR_GROUPS :=8; END IF; BUFFER := round(cast(v_mem_mb * 0.4 as int),-3); MAX_BUFFER := BUFFER; RECYCLE :=cast(v_mem_mb * 0.04 as int); IF v_mem_mb &lt; 70000 THEN with t as ( select rownum rn from dual connect by level &lt;= 100 ) , t1 as ( select * from t where rn > 1 minus select ta.rn * tb.rn from t ta, t tb where ta.rn &lt;= 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; --设置根据内存情况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; ELSE BUFFER_POOLS := 101; RECYCLE_POOLS := 41; END IF; --修改内存池 IF v_mem_mb >= 16000 THEN IF v_mem_mb= 16000 THEN MEMORY_POOL := 1500; SORT_BUF_GLOBAL_SIZE := 1000; MEMORY_N_POOLS := 3; CACHE_POOL_SIZE := 512; ELSE MEMORY_POOL := 2000; SORT_BUF_GLOBAL_SIZE := 2000; MEMORY_N_POOLS := 11; CACHE_POOL_SIZE := 1024; END IF; FAST_POOL_PAGES :=9999; -- SORT_FLAG = 0; SORT_BLK_SIZE=1; SORT_BUF_SIZE := 10; 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 :=250; HAGR_BUF_SIZE :=250; RECYCLE :=round(RECYCLE,-3); IF v_mem_mb >= 64000 THEN FAST_POOL_PAGES :=99999; FAST_ROLL_PAGES :=9999; BUFFER :=BUFFER-3000; MAX_BUFFER :=BUFFER; CACHE_POOL_SIZE := 2048; RLOG_POOL_SIZE := 2048; -- SORT_FLAG = 1; SORT_BLK_SIZE=1; SORT_BUF_SIZE=50; SORT_BUF_GLOBAL_SIZE= cast(v_mem_mb * 0.02 as int); HJ_BUF_GLOBAL_SIZE := cast(v_mem_mb * 0.15625 as int); HAGR_BUF_GLOBAL_SIZE := cast(v_mem_mb * 0.04 as int); HJ_BUF_SIZE :=512; HAGR_BUF_SIZE :=512; MEMORY_N_POOLS := 59; END IF; DICT_BUF_SIZE := 50; HJ_BUF_GLOBAL_SIZE :=round(HJ_BUF_GLOBAL_SIZE,-3); HAGR_BUF_GLOBAL_SIZE :=round(HAGR_BUF_GLOBAL_SIZE,-3); SORT_BUF_GLOBAL_SIZE :=round(SORT_BUF_GLOBAL_SIZE,-3); RECYCLE :=round(RECYCLE,-3); ELSE MEMORY_POOL :=GREAT(cast(v_mem_mb * 0.0625 as int),100); MEMORY_POOL :=round(MEMORY_POOL,-2); MEMORY_N_POOLS := 1; CACHE_POOL_SIZE := 200; RLOG_POOL_SIZE := 256; SORT_BUF_SIZE := 10; SORT_BUF_GLOBAL_SIZE := 500; DICT_BUF_SIZE := 50; -- 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; IF exec_mode=0 THEN --修改cpu相关参数 SP_SET_PARA_VALUE(2,'WORKER_THREADS',v_cpus); SP_SET_PARA_VALUE(2,'TASK_THREADS',TASK_THREADS); SP_SET_PARA_VALUE(2,'IO_THR_GROUPS',IO_THR_GROUPS); --修改内存池相关参数 SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY', mem_per); SP_SET_PARA_VALUE(2,'MEMORY_POOL', MEMORY_POOL); SP_SET_PARA_VALUE(2,'MEMORY_N_POOLS', MEMORY_N_POOLS); SP_SET_PARA_VALUE(2,'MEMORY_TARGET', MEMORY_TARGET); --修改内存检测参数为1 SP_SET_PARA_VALUE(2,'MEMORY_MAGIC_CHECK', 1); --非DSC环境将ENABLE_FREQROOTS设置为1,注意DM7 v$instance视图没有dsc_role字段,DM7这部分可以删掉 if exists(select 1 from v$instance where dsc_role = 'NULL') then SP_SET_PARA_VALUE(2,'ENABLE_FREQROOTS', 1); end if; --修改缓冲区相关参数 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); --修改fast_pool相关参数 SP_SET_PARA_VALUE(2,'FAST_POOL_PAGES', FAST_POOL_PAGES); SP_SET_PARA_VALUE(2,'FAST_ROLL_PAGES', FAST_ROLL_PAGES); --修改HASH相关参数 SP_SET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE', HJ_BUF_GLOBAL_SIZE); SP_SET_PARA_VALUE(1,'HJ_BUF_SIZE', HJ_BUF_SIZE ); SP_SET_PARA_VALUE(1,'HAGR_BUF_GLOBAL_SIZE',HAGR_BUF_GLOBAL_SIZE); SP_SET_PARA_VALUE(1,'HAGR_BUF_SIZE', HAGR_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,'RLOG_POOL_SIZE', RLOG_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,'VM_POOL_TARGET', 16384); SP_SET_PARA_VALUE(2,'SESS_POOL_TARGET', 16384); --修改实例相关参数 SP_SET_PARA_VALUE(2,'USE_PLN_POOL', 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', 102400); SP_SET_PARA_VALUE(2,'MAX_SESSIONS', 1500); SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 20000); SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER', 0); SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',0); --修改优化器相关参数 SP_SET_PARA_VALUE(2,'OLAP_FLAG',2); SP_SET_PARA_VALUE(2,'VIEW_PULLUP_FLAG',1); SP_SET_PARA_VALUE(2,'OPTIMIZER_MODE',1); SP_SET_PARA_VALUE(2,'ADAPTIVE_NPLN_FLAG',0); --开启并行PURGE SP_SET_PARA_VALUE(2,'PARALLEL_PURGE_FLAG',1); --开启手动并行 SP_SET_PARA_VALUE(2,'PARALLEL_POLICY',2); --UNDO_RETENTION如果放大,可以适当调大UNDO_EXTENT_NUM。负载高的时候,减少文件系统的申请/释放操作。 SP_SET_PARA_VALUE(2,'UNDO_EXTENT_NUM',16); --开启SQL 注入HINT功能 SP_SET_PARA_VALUE(2,'ENABLE_INJECT_HINT',1); ELSE --修改cpu相关参数 PRINT 'SP_SET_PARA_VALUE(2,''WORKER_THREADS'','||v_cpus||');'; PRINT 'SP_SET_PARA_VALUE(2,''TASK_THREADS'','||TASK_THREADS||');'; PRINT 'SP_SET_PARA_VALUE(2,''IO_THR_GROUPS'','||IO_THR_GROUPS||');'; --修改内存池相关参数 PRINT 'SP_SET_PARA_VALUE(2,''MAX_OS_MEMORY'', '||mem_per||');'; PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_POOL'', '||MEMORY_POOL||');'; PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_N_POOLS'', '||MEMORY_N_POOLS||');'; PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_TARGET'', '||MEMORY_TARGET||');'; --修改缓冲区相关参数 PRINT 'SP_SET_PARA_VALUE(2,''BUFFER'', '||BUFFER||');'; PRINT 'SP_SET_PARA_VALUE(2,''MAX_BUFFER'', '||MAX_BUFFER||');'; PRINT 'SP_SET_PARA_VALUE(2,''BUFFER_POOLS'', '||BUFFER_POOLS||');'; PRINT 'SP_SET_PARA_VALUE(2,''RECYCLE'', '||RECYCLE||');'; PRINT 'SP_SET_PARA_VALUE(2,''RECYCLE_POOLS'', '||RECYCLE_POOLS||');'; --修改fast_pool相关参数 PRINT 'SP_SET_PARA_VALUE(2,''FAST_POOL_PAGES'', '||FAST_POOL_PAGES||');'; PRINT 'SP_SET_PARA_VALUE(2,''FAST_ROLL_PAGES'', '||FAST_ROLL_PAGES||');'; --修改内存检测参数为1 PRINT 'SP_SET_PARA_VALUE(2,''MEMORY_MAGIC_CHECK'', 1);'; --非DSC环境将ENABLE_FREQROOTS设置为1,注意DM7 v$instance视图没有dsc_role字段,DM7这部分可以删掉 if exists(select 1 from v$instance where dsc_role = 'NULL') then PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_FREQROOTS'', 1);'; end if; --修改HASH相关参数 PRINT 'SP_SET_PARA_VALUE(1,''HJ_BUF_GLOBAL_SIZE'', '||HJ_BUF_GLOBAL_SIZE||');'; PRINT 'SP_SET_PARA_VALUE(1,''HJ_BUF_SIZE'', '||HJ_BUF_SIZE||');'; PRINT 'SP_SET_PARA_VALUE(1,''HAGR_BUF_GLOBAL_SIZE'','||HAGR_BUF_GLOBAL_SIZE||');'; PRINT 'SP_SET_PARA_VALUE(1,''HAGR_BUF_SIZE'', '||HAGR_BUF_SIZE||');'; --修改排序相关参数 -- PRINT 'SP_SET_PARA_VALUE(2,''SORT_FLAG'','||SORT_FLAG||');'; PRINT 'SP_SET_PARA_VALUE(2,''SORT_BLK_SIZE'','||SORT_BLK_SIZE||');'; PRINT 'SP_SET_PARA_VALUE(2,''SORT_BUF_SIZE'', '||SORT_BUF_SIZE||');'; PRINT 'SP_SET_PARA_VALUE(2,''SORT_BUF_GLOBAL_SIZE'', '||SORT_BUF_GLOBAL_SIZE||');'; --修改其他内存参数 PRINT 'SP_SET_PARA_VALUE(2,''RLOG_POOL_SIZE'', '||RLOG_POOL_SIZE||');'; PRINT 'SP_SET_PARA_VALUE(2,''CACHE_POOL_SIZE'', '||CACHE_POOL_SIZE||');'; PRINT 'SP_SET_PARA_VALUE(2,''DICT_BUF_SIZE'', '||DICT_BUF_SIZE||');'; PRINT 'SP_SET_PARA_VALUE(2,''VM_POOL_TARGET'', 16384);'; PRINT 'SP_SET_PARA_VALUE(2,''SESS_POOL_TARGET'', 16384);'; --修改实例相关参数 PRINT 'SP_SET_PARA_VALUE(2,''USE_PLN_POOL'', 1);'; PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_MONITOR'', 1);'; PRINT 'SP_SET_PARA_VALUE(2,''SVR_LOG'', 0);'; PRINT 'SP_SET_PARA_VALUE(2,''TEMP_SIZE'', 1024);'; PRINT 'SP_SET_PARA_VALUE(2,''TEMP_SPACE_LIMIT'', 102400);'; PRINT 'SP_SET_PARA_VALUE(2,''MAX_SESSIONS'', 1500);'; PRINT 'SP_SET_PARA_VALUE(2,''MAX_SESSION_STATEMENT'', 20000);'; PRINT 'SP_SET_PARA_VALUE(2,''PK_WITH_CLUSTER'', 0);'; PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_ENCRYPT'',0);'; --修改优化器相关参数 PRINT 'SP_SET_PARA_VALUE(2,''OLAP_FLAG'',2);'; PRINT 'SP_SET_PARA_VALUE(2,''VIEW_PULLUP_FLAG'',1);'; PRINT 'SP_SET_PARA_VALUE(2,''OPTIMIZER_MODE'',1);'; PRINT 'SP_SET_PARA_VALUE(2,''ADAPTIVE_NPLN_FLAG'',0);'; --开启并行PURGE PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_PURGE_FLAG'',1);'; --开启手动并行 PRINT 'SP_SET_PARA_VALUE(2,''PARALLEL_POLICY'',2);'; --UNDO_RETENTION如果放大,可以适当调大UNDO_EXTENT_NUM。负载高的时候,减少文件系统的申请/释放操作。 PRINT 'SP_SET_PARA_VALUE(2,''UNDO_EXTENT_NUM'',16);'; --开启SQL 注入HINT功能 PRINT 'SP_SET_PARA_VALUE(2,''ENABLE_INJECT_HINT'',1);'; END IF; select MEMORY_TARGET+BUFFER+RECYCLE+HJ_BUF_GLOBAL_SIZE+HAGR_BUF_GLOBAL_SIZE+CACHE_POOL_SIZE +DICT_BUF_SIZE+SORT_BUF_GLOBAL_SIZE+RLOG_POOL_SIZE; exception when others then raise_application_error (-20001,substr( ' 执行失败, '||SQLCODE||' '||SQLERRM||' '||dbms_utility.format_error_backtrace , 1, 400)); &lt;&lt;return_2000>> null; end; /
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服