3768.RAC上线前的调参,生产环境不可或缺
重要提示:
RAC调整参数,切记一次只调整一个实例,重启确认无故障时,再调整另一个实例,如果是静态参数必须同时修改的除外,重大参数调整前注意备份。
慎用sid=’’
alter system set parallel_force_local=TRUE sid=’’ scope=spfile;
Oracle日常运维宝典系列
智能总结
复制
重新生成
本文主要介绍了 Oracle 数据库 RAC 上线前的参数调整,包括隐藏参数、常规参数、操作系统调参等方面。如对隐藏参数除非熟悉架构否则不建议修改;常规参数如最大数据文件数等需合理调整;操作系统调参涉及 HugePages 等;还提及其他如快速恢复区设置等内容,总结了 10 多年积累的调参经验。
关联问题:如何查看隐藏参数值常规参数怎样选值操作系统调参复杂吗
代码解读
复制代码
作者:IT邦德,Oracle、PostgreSQL ACE
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等
•••
@TOC
前言
系统上线前,Oracle数据库参数的调整至关重要,本文分享的一些行业经验,能帮助你避坑
1.隐藏参数
Oracle系统中有一类参数称之为隐藏参数 (hidden parameters) ,这些参数在所有 Oracle 官方提供的文档中都没有介绍,他们的命名有一个共同特征就是都以 ‘_’ 作为参数的首字符。当然这部分的参数是不建议用户进行修改的,除非你对ORACLE的整体架构相当熟悉,对整个参数修改所带来的影响有个清晰的认识。
ini
代码解读
复制代码
示例:如果想查看_db_block_hash_buckets的参数值
col ksppinm for a50
col ksppstvl for a50
col ksppdesc for a50
SELECT ksppinm, ksppstvl, ksppdesc
FROM xksppcv y
WHERE x.indx = y.indx AND ksppinm = ‘_db_block_hash_buckets’;
1.自适应游标共享开启可能会触发性能问题,建议关闭
alter system set “_optimizer_adaptive_cursor_sharing”=FALSE;
alter system set “_optimizer_extended_cursor_sharing”=‘NONE’;
alter system set “_optimizer_extended_cursor_sharing_rel”=‘NONE’;
2.行执行的从属进程在工作时需要交换数据和信息,
默认从 Shared Pool 中分配内存空间。
当 _PX_use_large_pool=TRUE 时并行进程将从 Large Pool 中分配内存,
减少对共享池(Shared Pool )的争用
alter system set “_PX_use_large_pool”=TRUE scope=spfile
3.避免出现UNDO表空间利用率过高
或者UNDO段争用的问题
alter system set “_undo_autotune”=FALSE;
3.如果有遇到Log file sync问题可以
考虑设上进行隔离规避,建议关闭此功
alter system set “_use_adaptive_log_file_sync”=FALSE;
4.DRM负责将 Cache 资源 Remaster 到频繁访问这部分数据的节点上,
从而提高 RAC 的性能。但是 DRM 在实际使用中存在诸多 Bug ,
频繁的 DRM 会引发实例长时间 Hang 住甚至是宕机,建议关闭 DRM
alter system set “_gc_policy_time”=0;
alter system set “_gc_undo_affinity”=FALSE;
5.避免表初始化分区过大
alter system set “_partition_large_extents”=FALSE;
6.关闭自适应执行计划
alter system set “_optimizer_adaptive_plans”=FALSE
7.12c 中关闭result_cache ,容易触发latch free 等bug
alter system set “_optimizer_ads_use_result_cache” = FALSE;
8.延迟降级锁的时长(隐含参数)如果延迟降级锁的时间过低,
可能导致节点之间心跳超时,导致脑裂。
alter system set “_gc_defer_time” = 3;
9.减少对LOBs字段频繁的update
alter system set “_securefiles_concurrency_estimate” = 50;
10当非系统表空间的数据文件出现I/O问题时,不强制将实例crash
alter system set “_datafile_open_errors_crash_instance” = FALSE;
alter system set “_datafile_write_errors_crash_instance” = FALSE;
2.常规参数
sql
代码解读
复制代码
1.最大数据文件数默认值为200,建议调大
system set db_files=2000 scope=spfile;
2.限制trc文件大小,避免文件系统使用率过高
alter system set max_dump_file_size=104857600 scope=both;
3.RAC环境,为了降低集群间的数据交互,
建议并行进程强制在本地实例分配,
以便降低集群间的数据交互。
alter system set parallel_force_local=TRUE scope=spfile;
4.由于审计表(AUD$ )存放在SYSTEM 表空间,
因此为了不影响系统的性能,保护SYSTEM 表空间,
建议把AUD$ 移动到其他的表空间上,或者关闭审计。
alter system set audit_trail=‘NONE’;
5.调整undo信息保存时间3小时,
增加后需关注Undo表空间使用率
alter system set undo_retention=10800 scope=both;
6.指定会话可缓存在用户私有区的游标数目
建议根据实际情况调整
alter system set session_cached_cursors=300 scope=both;
7.延迟段创建会导致使用 Direct 方式的
Export 出来的 DMP 文件无法正常导入
alter system set deferred_segment_creation=FALSE;
8.多列统计信息自动收集功能是自适应查询优化器的一部分,
一般来说自动功能bug比较多,建议设置为fasle进行规避
alter system set optimizer_adaptive_plans=FALSE scope=both;
9.默认7天,建议控制文件中的元数据保留时间设置为31天
alter system set control_file_record_keep_time=31 scope=both;
10.数据库默认连接方式为独占模式,
共享连接模式几乎不用,建议设置为0关闭。
alter system set max_shared_servers=0 scope=both;
alter system set shared_servers=0 scope=both;
3.操作系统调参
bash
代码解读
复制代码
1.HugePages
HugePages是Linux内核与2.6版本集成的一个特性。
这个特性基本上提供了4K页面大小(IA64为16K)的替代方案,
提供更大的页面。HugePages是一种拥有更大页面的方法,
它对于处理非常大的内存非常有用
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 [ 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 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” ;;
‘3.8’) echo “Recommended setting: vm.nr_hugepages = $NUM_PG” ;;
‘3.10’) echo “Recommended setting: vm.nr_hugepages = $NUM_PG” ;;
‘4.1’) echo “Recommended setting: vm.nr_hugepages = $NUM_PG” ;;
‘4.14’) echo “Recommended setting: vm.nr_hugepages = $NUM_PG” ;;
‘5.4’) echo “Recommended setting: vm.nr_hugepages = $NUM_PG” ;;
*) echo “Kernel version $KERN is not supported by this script (yet). Exiting.” ;;
esac
End
chmod +x hugepages_settings.sh
将上面脚本生成内容写入到/etc/sysctl.conf中,
通过下面命令生效
sysctl -p
2.RAC的私网
在/etc/sysctl.conf中添加以下内容并生效,
这样可以避免一些异常网络发包带来的一些问题:
net.ipv4.ipfrag_high_thresh=16777216
net.ipv4.ipfrag_low_thresh=15728640
一般要求DB服务器和心跳交换机的 mtu 值一致
3.limits.conf
memlock计算的原则:物理内存的90%(单位是KB)
vi /etc/security/limits.conf
4.修改内核参数
kernel.shmmax参数:需要根据实际物理内存计算,
此处按节点物理内存128GB计算;建议kernel.shmmax参数取值为节点物理内存的70%,
单位为字节,
即12870%102410241024=96207267430.4(向上取整为96207267430)。
kernel.shmall参数:根据SGA/PAGE_SIZE计算。
kernel.sem参数:如果客户单个数据库需要支持的process数超过12000,
请按照实际情况配置。
生效命令:/sbin/sysctl --system
4.其他
sql
代码解读
复制代码
1.列出回收哪些段空间可以回收,
给出建议(在实际运维中,实用性非常低)
BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name => ‘sql tuning advisor’,
operation => NULL,
window_name => NULL);
END;
/
commit;
2.检测高负载的 SQL语句性能,
并给出调优建议(在实际运维中,实用性非常低)
BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name => ‘auto space advisor’,
operation => NULL,
window_name => NULL);
END;
/
commit;
3.密码策略取消
alter profile default limit PASSWORD_LIFE_TIME unlimited;
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;
alter profile default limit PASSWORD_LOCK_TIME unlimited;
alter profile default limit PASSWORD_GRACE_TIME unlimited;
4.低版本客户端登录
报错:ORA-28040: No matching authentication protocol
sqlnet.ora文件中加
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
5.快速恢复区的设置
SYS@mesdb1> show parameter recover;
NAME TYPE VALUE
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
db_unrecoverable_scn_tracking boolean TRUE
recovery_parallelism integer 0
remote_recovery_file_dest string
6.快速恢复区设置
是一个默认放置所有备份恢复操作有关文件的地方,
包括:控制文件在线镜像、在线重做日志、归档日志、外来归档日志、控制文件镜像复制、数据文件镜像复制、RMAN备份片和闪回日志。
如果启用的快速恢复区,它就成了RMAN备份默认的去处,无论是RMAN备份片、镜像复制、还是控制文件自动备份,
只要没有在RMAN配置或则backup命令中指明路径就全部进入快速恢复区。
SQL> alter system set db_recovery_file_dest_size=40G scope=spfile;
SQL> alter system set db_recovery_file_dest=’+ARCH’ scope=spfile;
5.总结
Oracle数据库的参数调整对于数据库性能至关重要,本文涉及参数调整均来10多年来积累的经验,希望能帮到大家