暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

3768.RAC上线前的调参,生产环境不可或缺

张鹏 3天前
5

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 xksppix,xksppi x, 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 [ MINPGgt0];thenNUMPG=echo"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 KERNin2.4)HUGETLBPOOL=echo"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” ;;
‘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多年来积累的经验,希望能帮到大家

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论