参数配置指引
Oracle_19c
一、 数据库参数
1.1 启用ASSM内存管理
AMM与Huge Page不兼容,AMM自动调整可能导致内存波动大。
修改方式:
alter system set sga_max_size=XX scope=spfile sid='*';
alter system set sga_target=XX scope=spfile sid='*';
alter system set pga_aggregate_target=XX scope=spfile sid='*';
alter system set memory_target=0 scope=spfile sid='*';
alter system set memory_max_target=0 scope=spfile sid='*';
alter system reset memory_max_target scope=spfile sid='*';
复制
建议:SGA配置为物理内存的40%,PGA配置为物理内存的20%。
1.2 为ASSM配置各内存池最小值
防止因频繁自动调整出现ORA-4031错误。
修改方式:
alter system set db_cache_size=xx;
alter system set shared_pool_size=xx;
复制
建议:DB_CACHE_SIZE配置为SGA的50%,SHARED_POOL_SIZE配置为SGA的15%以上。
1.3 关闭AUTO SGA
alter system set "_memory_imm_mode_without_autosga"=FALSE
复制
1.4 关闭初始化extent的延迟创建
如果表未曾插入记录,默认不会生成SEGMENT,EXPDP时候将出现报错
alter system set deferred_segment_creation=false scope=spfile sid='*';
复制
1.5 设置dump文件大小上限
避免异常时出现超过几十个G的trace,将文件系统撑爆。
alter system set max_dump_file_size='1024M' scope=spfile sid='*';
复制
1.6 死事务回滚调整
当事务回滚时候,将生成大量并行回滚子进程,可能耗尽存储IO性能,
alter system set fast_start_parallel_rollback=low;
alter system set recovery_parallelism=10 scope=spfile;
alter system set "_cleanup_rollback_entries"=10000 scope=spfile;
复制
1.7 文件写入失败实例不Crash
设置写入数据文件/临时文件错误不会导致instance crash。
alter system set "_datafile_write_errors_crash_instance"=false scope=spfile;
复制
1.8 禁用SQL自动优化
该任务在指定时间窗口内模拟执行高消耗SQL语句,并且可能Library Cache Latch问题。
exec dbms_auto_task_admin.disable(client_name => 'sql tuning advisor',operation => NULL,window_name => NULL);
复制
1.9 禁用空间自动优化
可能导致性能问题
exec dbms_auto_task_admin.disable(client_name => 'auto space advisor',operation => NULL,window_name => NULL);
复制
1.10 禁用Optimizer Statistics Advisor Task
可能导致SYSAUX表空间中SM/ADVISOR组件消耗过大
DECLARE
filter1 CLOB;
BEGIN
filter1 := DBMS_STATS.CONFIGURE_ADVISOR_RULE_FILTER('AUTO_STATS_ADVISOR_TASK','EXECUTE',NULL,'DISABLE');
END;
/
复制
1.11 AWR收集间隔
保留更长和更精确的性能数据库,方便出现问题后的原因分析。确保SYSAUX表空间至少为8GB。
exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>30*24*60);
复制
1.12 关闭Result_cache
如果数据修改较多,维护Result Cache需要较大成本。
Alter system set result_cache_max_size=0 scope=spfile sid='*';
复制
1.13 关闭自动串行直接路径读
10949事件用于关闭11g的自动serial direct path read特性。
避免出现过多的直接路径读,消耗过多的IO资源。
alter system set event='10949 trace name context forever,level 1' sid='*' scope=spfile;
复制
1.14 避免索引根节点分裂时间过长导致交易不稳定
alter system set event '43822 trace name context forever,level 1' sid='*' scope=spfile;
复制
为防止索引根节点分裂时间过长,需要设置事件43822,则索引根节点分裂的时候不会在空块寻找上花费很多时间,而是分配新的空块。
1.15 关闭延迟用户验证
alter system set "_sys_logon_delay"=0 scope=spfile;
复制
1.16 关闭DRM
因DRM导致的问题非常多
alter system set "_gc_policy_time"=0 sid='*' scope=spfile;
alter system set "_gc_undo_affinity"=false sid='*' scope=spfile;
复制
执行完上述操作需要重启实例。
1.17 恢复LGWR的post/wait通知方式
LGWR会自动选择两种方法来通知其他进程commit已经写入:post/wait、polling。前者LGWR负担较重,后者等待时间会过长,特别是高负载的OLTP系统中。在10g及之前的版本中是post/wait方式,将这个参数设置为false恢复到以前版本方式。
alter system set "_use_adaptive_log_file_sync"=false sid='*' scope=spfile;
复制
1.18 禁用LGWR并行
导致LGWR写入的IOPS次数高,影响存储性能。
alter system set "_use_single_log_writer" = TRUE scope=spfile sid='*';
alter system set "_max_outstanding_log_writes"=1 scope=spfile sid='*';
复制
1.19 设置并行子进程的数量上限
手工设置并行子进程的数量上限为物理CPU个数*2,避免数据库自动算的值太大。
备注:IBM POWER 7/8采用SMT4,虚拟CPU为物理CPU的4倍,该参数需要调小。
alter system set parallel_max_servers=128 scope=spfile sid='*';
复制
1.20 使并行会话改为使用Large Pool
并行会话默认使用的是shared pool用于并行执行时的消息缓冲区,并行过多时容易造成shared pool不足,使数据库报ORA-4031错误。
alter system set "_px_use_large_pool"=true sid ='*' scope=spfile;
复制
1.21 设置在线状态的回滚段数量
由于事务风暴、阻塞雪崩效应、应用重启、或者秒杀促销等高并发场景,数据库内短暂时间将需要将大量的undo seg从offline变成online,而smon没有处理得那么快,故可能出现短暂的大量enq:US-contention和 latch: rowcache objects等待。需要提前设置_ROLLBACK_SEGMENT_COUNT为一个较大的值,保持一定数量的undosegments始终是online状态
alter system set “_rollback_segment_count” =2000 scope=spfile sid='*';
复制
1.22 加大控制文件保留时间
默认为7天,每周1个全备情况下可能出现最早全备信息丢失,导致增备变成全备。
建议调整为全备周期的2~3倍时间
alter system set control_file_record_keep_time=60;
复制
1.23 latch: ges resource hash list等待事件
降低高负载期间latch: ges resource hash list等待事件
alter system set "_lm_res_hash_bucket"=4194250 scope=spfile;
复制
1.24 禁用 Expression statistics monitoring
12CR2以后版本,Oracle为了进一步实现在线统计信息的准确性,在DML时会自动将列数据变化的情况保存到数据库,类似modification那些数据字典里存的东西。这个功能在并发DML比较频繁的系统里,会非常影响性能。建议关掉:
alter system set "_column_tracking_level"=17 scope=both;
复制
1.25 防止View Merge安全特性对执行计划影响
如果视图不属于当前执行语句的用户,执行计划不会优先将过滤条件带入视图中。
修改参数:
alter system set optimizer_secure_view_merging=false;
复制
1.26 子游标过期参数
19c非CDB版本,该参数默认值已修改为8192.
alter system set "_cursor_obsolete_threshold"=100 scope=spfile;
复制
1.27 允许低版本客户端连接
Oracle用户
$ vi $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
复制
1.28 修改控制文件的Snapshot到共享存储
控制文件为文件级的锁,因此需要共享,否则备份控制文件失败
RMAN> configure snapshot controlfile name to '+FRA/snapcf_orcl.f';
复制
1.29 取消自动创建索引
alter system set "_optimizer_auto_index_allow"=NEVER scope=spfile;
alter system set "_optimizer_use_auto_indexes"=OFF scope=spfile;
复制