安装最新 PSU 版本
参看Quick Reference to Patch Numbers for Database PSU, SPU(CPU), Bundle Patches and Patchsets ( 文档 ID 1454618.1) 文档,下载目前基于GI 的最新版本的PSU
根据文档下载最新的GI PSU 并安装文档内容安装最新的PSU 。
创建数据磁盘组
grid 用户执行:
打开Xmanager-passice
export DISPLAY=xxx.xxx.xxx.xxx:0.0(xxx.xxx.xxx.xxx 为操作机器的IP 0.0 为xxmanager 的端口)
grid 用户运行asmca
asmca
下一步:创建DATA 磁盘组
输入磁盘组名:DATA
选择冗余方式为 Extenal
如果未发现磁盘,选择右下角Change Ddisk Discovery Path 修改磁盘发现路径
编辑Database Compatibility 为12.2.0.0.0 (修改后12.2 之前数据库将无法使用此磁盘组)
勾选需要创建磁盘组的磁盘
下一步:创建磁盘组
下一步:磁盘组创建成功
创建实例
运行命令
Oracle 用户执行dbca 命令:
export DISPLAY=xxx.xxx.xxx.xxx:0.0(xxx.xxx.xxx.xxx 为操作机器的IP 0.0 为xxmanager 的端口)
$dbca
安装截图
选择高级配置:
下一步:选择创建集群类型数据库,并选择数据库类型
选择节点
下一步:填写实例名字,以及可选的cdb 参数
下一步:选择数据存放的磁盘组,
下一步,快速恢复区和归档选项,可以不选,事后可添加
可不选 oracle vault 选项
内存配置
Process 配置
字符集设置
EM 设置(不建议此处配置)
下一步:输入用户密码
选择创建数据库选项
预先的环境检查
以上报错可以忽略
下一步概要信息
数据库创建中
数据库创建完成
安装结束
参数优化
运维部分
密码过期时间 ,从 11g 开始, oracle 对数据库所有密码默认过期时间 180 天:
SQL> alter profile default limit PASSWORD_LIFE_TIME unlimited;
密码登陆错误次数 , 对于输入错误密码导致数据库账号被锁定 :
SQL> alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;
密码大小写敏感 ,该参数默认值是TRUE ,因此,默认情况下密码大小写是敏感的
SQL> alter system set SEC_CASE_SENSITIVE_LOGON=false;
审计策略
Oracle 的审计从11g 开始,默认为开启,在12c 中依然建议关闭:
SQL> alter system set audit_trail=none scope=spfile sid='*';
关闭延迟段创建
从 11.2 开始,这个值的默认值是 true ,建议 12c 中设置成 false 。
备注:延迟段创建会导致 10g 客户端 exp 导出 12g 文件无法导出空表等
关闭跨节点并行查询
ALTER SYSTEM SET =TRUE SCOPE=BOTH;
12g 会智能的将查询分布在所有的节点,但是在普通心跳网络模式下,会加剧心跳压力,在非 IB 交换机模式下建议关闭
直接路径读
对于大表, Oracle 12c 倾向于直接路径读。如果 AWR 中,关于直接路径读的等待事件较高,可以考虑关闭该等待事件。
alter system set "_serial_direct_read"=never scope=spfile sid='*';
9.1.6 调整 JOB 进程数量
11g 和12.1 里面默认是1000 ,12.2 里这个值默认是4000 ,建议设置成和CPU core 相等的值(以8 core 的cpu 为例)。
alter system set "JOB_QUEUE_PROCESSES" = 8 scope=spfile;
调整 _use_single_log_writer 隐含参数
alter system set "_use_single_log_writer"=true scope=spfile;
参考文档:
Multiple Log Writers in 12c Causing Enabling and Disabling of Adaptive Scalable Log Writer Workers Which Cause High 'log file sync' Wait Event ( 文档 ID 2174075.1 )
该参数主要有三个可选值 true, false, adaptive, 默认值为ADAPTIVE。
对于ADAPTIVE 和False 如果CPU个数大于一个则会有多个lg0n进程
对于true 则不会生成多个lg0n进程,而如同12.1之前那样仅有单个LGWR
里面关闭 DRM
alter system set "_gc_policy_time"=0 scope=spfile sid='*';
alter system set "_gc_undo_affinity"=false scope=spfile sid='*';
DRM 本身是需要消耗资源的,并且存在诸多bug,对于一个设计较差的系统而言,频繁的DRM,也会引发Library cache lock而导致实例挂住。
优化部分
9.2.1 关闭自适应执行计划调整
自适应执行计划调整为oracle 自动优化机制,异常情况下会导致执行计划不稳定。
alter system set OPTIMIZER_ADAPTIVE_PLANS =false;
自适应游标共享调整
自适应游标共享为oracle 自动优化机制,异常情况下会导致执行计划不稳定及内存使用异常。
alter system set "_optimizer_adaptive_cursor_sharing"=false scope=spfile;
alter system set "_optimizer_extended_cursor_sharing"=none scope=spfile;
alter system set "_optimizer_extended_cursor_sharing_rel"=none scope=spfile;
关闭 feedback
一些通过feedback 修正执行计划的行为可能导致执行计划不稳定及内存使用异常。
alter system set "_optimizer_use_feedback"=false scope=spfile;
alter system set "_optimizer_gather_feedback"=false scope=spfile;
调整 SCN 参数
alter system set " "=1 scope=spfile sid='*';
alter system set "_external_scn_logging_threshold_seconds"=600 scope=spfile sid='*';
SCN 递增的一个极限阀值,模式是 24 小时,调整到 1 小时有助于减少 dblink 报错:无效的 SCN
第二个参数为了检测当数据库被同步一个很大 SCN 后告警日志能够及时检测,防止出现 SCN 过度传染
以上两个参数需要在 11.2.0.3 以上版本设置,低于该版本需要 patch 一定补丁才可以设置。
内存抖动参数
alter system set " "=false scope=both;
备注:
当数据库系统由于 shared pool(large pool..) 中的内存被耗尽而将产生 ORA-4031 错误时 , 即使没有使用自动内存管理的特性 , 数据库也会通过缩小 buffer cache 的内存 , 然后扩展 shared pool 内存的大小 , 从而避免发生 ORA-4031 错误 . 当将参数” _memory_imm_mode_without_autosga ”设置为 FALSE 时 , 可以关闭该特性 , 但数据库仍然会像以前一样受到 ORA-4031 错误的威胁 . 注意 , 从实际使用中的观察结果看来 , 这种内存调整是不可逆的 , 就是说当 shared pool 存在大量空闲内存时并不会释放上次从 buffer cache' 借用 ' 的内存 . 建议如果有存在内存抖动的问题,还是以优化 SQL 为主,建议关闭该参数。
开启 DDL 记录操作
alter system set enable_ddl_logging=true;
备注:
对于希望监控 DDL 操作的,可以将次参数打开,相关 DDL 操作会记录到数据库告警日志中
内存参数优化
在 64G 主机内存的情况下,建议 ORACLE 内存设置如下 :
|
SGA |
25G |
|
PGA |
5G |
|
SHARED_POOL |
5G |
以上参数设置相对保守,可以自行决定具体参数设置范围,但是不能让 SGA+PGA 内存 >60%OS_Mem 并且确保主机交换空间充足
在线日志调整
在线 redo 日志组建议,每个节点 5 组,每组一个日志文件,每个日志文件大小在 200M-500M (视具体业务情况而定),但是默认的 4 组每个节点 2 组 每组 50M 的默认设置明显是不够的
部分参数优化
磁盘组兼容性
compatible 参数(数据库的兼容版本)还确定启用的功能。该参数适用于数据库实例或 ASM 实例,具体取决于 instance_type 参数。例如,将该参数设置为 10.1 将禁止使用 Oracle Database 11g 中引入的任何新功能(磁盘联机 / 脱机、可变区等)。
建或变更 ASM 磁盘组时,可以使用 CREATE DISKGROUP 命令或 ALTER DISKGROUP 命令新增的 ATTRIBUTE 子句更改其属性。
调整 ASM 内存参数 ( 影响版本 Release 11.2 to 12.2)
该部分参考 RAC 规模,如果主机 CPU 数量低于 32 内存小于 64G ASM 磁盘组规模低于 4T 则不需要设置该部分参数
MEMORY_TARGET 参数又基于 PROCESSES 参数相关连,有可能导致缺省配置不足,在内存充裕的情况下建议调整( asm 实例修改 ):
SQL> alter system set memory_max_target=4096m scope=spfile; SQL> alter system set memory_target=1536m scope=spfile;
|
备注:参看 文档 ID In 11.2.0.3/11.2.0.4, the " PROCESSES" parameter will be default to "available CPU cores * 80 + 40" (in the ASM spfile). As the default value for " MEMORY_TARGET" is based on " PROCESSES", it can be insufficient if there is a large number of CPU cores or large number of diskgroups which could cause issues (i.e. Grid Infrastructure stack fails to stop with ORA-04031 etc) per & , it is recommended to increase the value of MEMORY_MAX_TARGET & MEMORY_TARGET before upgrading/installing to 11.2.0.3/11.2.0.4 (does not apply to 10g ASM).
1) If PROCESSES parameter is explicitly set: The MEMORY_TARGET should be set to no less than: 256M + PROCESSES * 132K (64bit) or 256M + PROCESSES * 120K (32bit) 2) If PROCESSES parameter is not set: The MEMORY_TARGET should be set to no less than: 256M + (available_cpu_cores * 80 + 40) * 132K (64bit) or 256M + (available_cpu_cores * 80 + 40) * 120K (32bit)
|
监控部署
监控部署对于 RAC 有着至关重要的作用,在出现故障或者出现疑难杂症的时候,必要的监控部署对问题的解决有着关键帮助
部署
OSwatch 作为监控主机性能及资源的工具,由 oracle 开源提供,建议每个工程师都会部署该工具
详见文档:
301137.1 OS Watcher User Guide
580513.1 How To Start OSWatcher Black Box Every System Boot (Linux specific)
策略调整
默认 30 分钟执行一次,保留 10 天(一个业务周期)
exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>10*24*60);
exec dbms_workload_repository.modify_baseline_window_size(10);
内存开启大页(物理内存大于 128g 开启)
HugePages 详解
参考文档:
HugePages and Oracle Database 11g Automatic Memory Management (AMM) on Linux ( 文档 ID 749851.1)
HugePages on Linux: What It Is... and What It Is Not... ( 文档 ID 361323.1)
HugePages on Oracle Linux 64-bit ( 文档 ID 361468.1)
Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration ( 文档 ID 401749.1)
/proc/meminfo Does Not Provide HugePages Information on Oracle Enterprise Linux (OEL5) ( 文档 ID 860350.1)
Hugepages are Not used by Database Buffer Cache ( 文档 ID 829850.1)
正文:
HugePages 是通过使用大页内存来取代传统的 4kb 内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能。尤其是对于 8GB 以上的内存以及较大的 Oracle SGA size ,建议配值并使用 HugePage 特性
huge page 的大小
huge page 的大小取决于所使用的操作系统的内核版本以及不同的硬件平台 可以使用 $grep Hugepagesize /proc/meminfo 来查看 huge page 的大小,对于较大的系统内存以及 sga ,使用 hugepage 可以极大程度的提高 Oracle 数据库性能
正确配置huge page
本次配置过程详见文档: HugePages on Oracle Linux 64-bit ( 文档 ID 361468.1)
本操作基于 RHEL 6 进行测试:
[root@rehl6 ~]# more /etc/redhat-release
Red Hat Enterprise Linux Server release 6.2 (Santiago)
[root@rehl6 ~]# uname -a
Linux rehl6 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
1.
查看当前系统是否配置 HugePages
下面的查询中HugePages相关的几个值都为0,表明当前未配置ugePages,其次可以看到[root@rehl6 ~]#
AnonHugePages: 1142784 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
2.
修改用户的memlock限制
通过修改/etc/security/limits.conf 配置文件来实现
该参数的值通常配置为略小于当前的已安装系统内存,如当前你的系统内存为64GB,可以做如下设置
* soft memlock 60397977
* hard memlock 60397977
上述的设置单位为kb,不会降低系统性能。至少也要配置为略大于系统上所有SGA的总和。
使用ulimit -l 来校验该设置
3. 禁用AMM(Oracle 11g)
如果当前的Oracle 版本为10g,可以跳过此步骤。
如果当前的Oracle 版本为11g、12c,由于AMM(Automatic Memory Management)特性与Hugepages不兼容,需要禁用AMM。
ALTER SYSTEM RESET memory_target SCOPE=SPFILE;
ALTER SYSTEM RESET memory_max_target SCOPE=SPFILE;
ALTER SYSTEM SET sga_target=<n>g SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=<n>g SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
4.
计算vm.nr_hugepages 值
简单的计算方法如下:(只做系统估计)
简单的计算原理是total SGA_MAX_SIZE(多个instance的总和)/hugepagesize + N
N 为少量内存盈余,一般多出100就足够了。如果主机内存128GB,计划70GB用于SGA共享内存,则大页内存需70×1024/2=35840
使用Oracle 提供的脚本hugepages_settings.sh的脚本来计算vm.nr_hugepages的值(这个值设置的是hugepage momory 的大小)
在执行脚本之前确保所有的Oracle 实例已启动以及ASM也启动(存在的情形下)
$ ./hugepages_settings.sh
该文档脚本可以参看MOS文档,附录一提供摘录
:
Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration ( 文档 ID 401749.1)
5. 设置vm.nr_hugepages参数
编辑/etc/sysctl.conf 来设置vm.nr_hugepages参数
$ sysctl -w vm.nr_hugepages = 1496 (该值为上述脚本获得的值, vm.nr_hugepages指明了内存页数)
$ sysctl -p
6. 重启实例及服务:
上述的所有步骤已经实现了动态修改,但对于HugePages的分配需要重新启动主机server才能生效。
7. 验证
HugePages 相关参数的值会随着当前服务器上的实例的停止与启动而动态发生变化
通常情况下,HugePages_Free的值应当小于HugePages_Total的值,在HugePages被使用时HugePages_Rsvd值应当为非零值。
$ grep Huge /proc/meminfo
HugePages_Total: 131
HugePages_Free: 20
HugePages_Rsvd: 20
Hugepagesize: 2048 kB
如下面的情形,当服务器上仅有的一个实例被关闭后,HugePages_Rsvd的值为零。且HugePages_Free等于HugePages_Total
$ grep Huge /proc/meminfo
HugePages_Total: 131
HugePages_Free: 131
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
后续备注:
/etc/security/limits.conf 配值文件中memlock参数的值通常配值位略小于当前的已安装系统内存
2. Huge pagesize LINUX 的大页的大小为 2M 这是不能改变的,而且大页在 oracle 服务器上只与参数 sga_max_size 有关, hugepage 目前只能用于共享内存段等少量内存类型,例如 oracle SGA 。 PGA 则不适用,所以不能随便乱设置大页内容,如果没有 oracle 提供的脚本,我们只需要简单的计算原理: total SGA_MAX_SIZE( 多个 instance 的总和) /hugepagesize + N N 为稍微超出一点的内存大小,如果主机内存 128GB ,计划 70GB 用于 SGA 共享内存,则大内存页需 70×1024/2=35840
vm.nr_hugepages 参数指定了大页的数目,大页数目*2(2048K大页每页的大小)就是可以使用的内存大页总大小。
huge page 的大小 huge page 的大小取决于所使用的操作系统的内核版本以及不同的硬件平台 可以使用 $grep Hugepagesize /proc/meminfo 来查看 huge page 的大小 下面是不同平台常用的 huge page 的大小。 HW Platform Source Code Tree Kernel 2.4 Kernel 2.6 ----------------- --------------------- ------------ ------------- Linux x86 (IA32) i386 4 MB 4 MB * Linux x86-64 (AMD64, EM64T) x86_64 2 MB 2 MB Linux Itanium (IA64) ia64 256 MB 256 MB IBM Power Based Linux (PPC64) ppc64/powerpc N/A ** 16 MB IBM zSeries Based Linux s390 N/A 1 MB IBM S/390 Based Linux s390 N/A N/A
附录一: ( 该脚本不同版本或许会有些许变化,建议参考文件重新下载)
hugepages_settings.sh
|
#!/bin/bash # # hugepages_settings.sh # # Linux bash script to compute values for the # recommended HugePages/HugeTLB configuration # # Note: This script does calculation for all shared memory # segments available when the script is run, no matter it # is an Oracle RDBMS shared memory segment or not. # # This script is provided by Doc ID 401749.1 from My Oracle Support #
# Welcome text echo " This script is provided by Doc ID 401749.1 from My Oracle Support () where it is intended to compute values for the recommended HugePages/HugeTLB configuration for the current shared memory segments. Before proceeding with the execution please note following: * For ASM instance, it needs to configure ASMM instead of AMM. * The 'pga_aggregate_target' is outside the SGA and you should accommodate this while calculating SGA size. * In case you changes the DB SGA size, as the new SGA will not fit in the previous HugePages configuration, it had better disable the whole HugePages, start the DB with new SGA size and run the script again. And make sure that: * Oracle Database instance(s) are up and running * Oracle Database 11g Automatic Memory Management (AMM) is not setup (See Doc ID 749851.1) * The shared memory segments can be listed by command: # ipcs -m
Press Enter to proceed..."
read
# Check for the kernel version KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'` if [ -z "$HPG_SZ" ];then echo "The hugepages may not be supported in the system where the script is being executed." exit 1 fi
# Initialize the counter NUM_PG=0
# Cumulative number of pages required to handle the running shared memory segments for SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | grep "[0-9][0-9]*"` do MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q` if [ $MIN_PG -gt 0 ]; then NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q` fi done
RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`
# An SGA less than 100MB does not make sense # Bail out if that is the case if [ $RES_BYTES -lt 100000000 ]; then echo "***********" echo "** ERROR **" echo "***********" echo "Sorry! There are not enough total of shared memory segments allocated for HugePages configuration. HugePages can only be used for shared memory segments that you can list by command:
# ipcs -m
of a size that can match an Oracle Database SGA. Please make sure that: * Oracle Database instance is up and running * Oracle Database 11g Automatic Memory Management (AMM) is not configured" exit 1 fi
# Finish with results case $KERN in '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`; echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;; '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;; *) echo "Unrecognized kernel version $KERN. Exiting." ;; esac
# End |
