Oracle
面试宝典
-
参数篇
请问在安装完
Oracle
数据库后,你会去调整哪些参数?
一
audit_trail
审计(Audit
)用于监视用户所执行的数据库操作,审计记录可存在数据字典表,当数据库的审计是开启时,在语句执行阶段产生审计记录。由于审计表(AUD$
)存放在SYSTEM
表空间,因此为了不影响系统的性能,保护SYSTEM
表空间,建议把AUD$
移动到其他的表空间上,或者关闭审计。
参考命令:alter system set audit_trail='NONE' #INSTANCE# scope=spfile;
二
_optimizer_adaptive_cursor_sharing
隐含参数 _optimizer_adaptive_cursor_sharing
能控制自适应式游标共享的部分行为,由 Oracle
自适应的处理绑定变量的窥探,但这可能会触发性能问题。 Oracle
建议在非技术指导下,将其关闭掉。
参考命令:alter system set "_optimizer_adaptive_cursor_sharing"=FALSE #INSTANCE#;
三
_optimizer_extended_cursor_sharing
建议禁用自适应游标共享,将隐含参数_optimizer_extended_cursor_sharing
设置为 NONE
。
参考命令:alter system set "_optimizer_extended_cursor_sharing"='NONE' #INSTANCE#;
四
_optimizer_extended_cursor_sharing_rel
建议禁用自适应游标共享,将隐含参数_optimizer_extended_cursor_sharing_rel
设置为 NONE
。
参考命令:alter system set "_optimizer_extended_cursor_sharing_rel"='NONE' #INSTANCE#;
五
parallel_force_local
为了降低集群间的数据交互,建议并行进程强制在本地实例分配,以便降低集群间的数据交互。
参考命令:alter system set parallel_force_local=TRUE #INSTANCE#;
六
_gc_policy_time
DRM
(Dynamic Resource Mastering
)负责将 Cache
资源 Remaster
到频繁访问这部分数据的节点上,从而提高 RAC
的性能。但是 DRM
在实际使用中存在诸多 Bug
,频繁的 DRM
会引发实例长时间 Hang
住甚至是宕机,建议关闭 DRM
。
参考命令:alter system set "_gc_policy_time"=0 #INSTANCE# scope=spfile;
七
_gc_undo_affinity
建议关闭集群 Undo Affinity
,降低集群 交互,避免触发相关 BUG
。
参考命令:alter system set "_gc_undo_affinity"=FALSE #INSTANCE# scope=spfile;
八
_optimizer_use_feedback
基数反馈(Cardinality Feedback
)是 Oracle 11.2
中引入的关于 SQL
性能优化的新特性,该特性主要针对统计信息陈旧、无直方图或虽然有直方图但仍基数计算不准确的情况,Cardinality
基数的计算直接影响到后续的 JOIN COST
等重要的成本计算评估,造成 CBO
选择不当的执行计划。但是该参数存在不稳定因素,可能会带来执行效率的问题,建议关闭优化器反馈。
参考命令:alter system set "_optimizer_use_feedback"=FALSE #INSTANCE#;
九
deferred_segment_creation
延迟段创建会导致使用 Direct
方式的 Export
出来的 DMP
文件无法正常导入(文档 ID 1604983.1
),建议关闭延迟段创建的特性。
参考命令:alter system set deferred_segment_creation=FALSE #INSTANCE#;
十
_undo_autotune
隐含参数 _undo_autotune
负责 undo retention
(即 undo
段的保持时间)的自动调整,若由 Oracle
自动负责 undo retention
,则 Oracle
会根据事务量来占用 undo
表空间,可能会形成 undo
表空间的争用,建议将其关闭。
参考命令:alter system set "_undo_autotune"=FALSE #INSTANCE#;
十一
_optimizer_null_aware_antijoin
参数 _optimizer_null_aware_antijoin
是在 Oracle 11g
引入的新参数,它用于解决在反连接(Anti-Join
)时,关联列上存在空值(NULL
)或关联列无非空约束的问题。但是该参数不稳定,存在较多的 Bug
,为避免触发相关 Bug
,建议关闭。
参考命令:alter system set "_optimizer_null_aware_antijoin"=FALSE #INSTANCE#;
十二
_PX_use_large_pool
并行执行的从属进程在工作时需要交换数据和信息,默认从 Shared Pool
中分配内存空间。当 _PX_use_large_pool=TRUE
时并行进程将从 Large Pool
中分配内存,减少对共享池(Shared Pool
)的争用。
参考命令:alter system set "_PX_use_large_pool"=TRUE scope=spfile #INSTANCE#;
十三
_partition_large_extents
建议关闭分区使用大的初始化区(Extent
)。
参考命令:alter system set "_partition_large_extents"=FALSE #INSTANCE#;
十四
_use_adaptive_log_file_sync
Oracle
默认启用 _use_adaptive_log_file_sync
参数,使得 LGWR
进程写日志的方式能自动在 post/wait
和 polling
两种方式之间进行取舍,可能会导致比较严重的写日志等待(log file sync
的平均单次等待时间较高),
建议关闭此功能。
参考命令:alter system set "_use_adaptive_log_file_sync"=FALSE #INSTANCE#;
十五
_memory_imm_mode_without_autosga
alter system set "_memory_imm_mode_without_autosga"=false sid='*' scope=spfile;
说明:11.2.0.3
开始,即使是手工管理内存方式下,如果某个POOL
内存吃紧,Oracle
仍然可能会自动调整内存,用这个参数来关闭这种行为。
十六
event
alter system set event='28401 trace name context forever,level 1','10949 trace name context forever,level 1' sid='*' scope=spfile;
说明:这个参数主要设置2
个事件:
1
) 10949
事件用于关闭11g
的自动serial direct path read
特性,避免出现过多的直接路径读,消耗过多的IO
资源。
2
) 28401
事件用于关闭11g
数据库中用户持续输入错误密码时的延迟用户验证特性,避免用户持续输入错误密码时产生大量的row cache lock
或library cache lock
等待,严重时使数据库完全不能登录。
十七
_b_tree_bitmap_plans
alter system set “_b_tree_bitmap_plans”=false sid=’*’ scope=spfile;
说明:对于OLTP
系统,Oracle
可能会将两个索引上的ACCESS PATH
得到的rowid
进行bitmap
操作再回表,这种操作有时逻辑读很高,对于此类SQL
使用复合索引才能从根本上解决问题。
十八
enable_ddl_logging
alter system set enable_ddl_logging=true sid='*' scope=spfile;
说明:在11g
里面,打开这个参数可以将ddl
语句记录在alert
日志中。以便于某些故障的排查。建议在OLTP
类系统中使用。
十九
parallel_max_servers
alter system set parallel_max_servers=cpu_count
逻辑CPU
数 sid='*' scope=spfile;
说明:这个参数默认值与CPU
相关,OLTP
系统中将这个参数设置小一些,可以避免过多的并行对系统造成冲击。
二十
_optimizer_ads_use_result_cache
alter system set "_optimizer_ads_use_result_cache" = FALSE scope=spfile sid='*';
说明:12c
中关闭result_cache
,容易触发latch free
等bug
。
二十一
_datafile_write_errors_crash_instance
alter system set "_datafile_write_errors_crash_instance"=FALSE scope=spfile sid='*';
说明:在 PDB
由于某些原因丢失数据文件后,允许 CDB
继续运行。注意:
只对 PDB
的非系统数据文件有效。
二十二
_optimizer_adaptive_plans
alter system set "_optimizer_adaptive_plans"=FALSE scope=spfile sid='*';
说明:关闭自适应执行计划。
二十三
_optimizer_aggr_groupby_elim
alter system set "_optimizer_aggr_groupby_elim"=FALSE scope=spfile sid='*';
19567916.8
,Wrong results when GROUP BY uses nested queries in 12.1.0.2
二十四
_optimizer_reduce_groupby_key
alter system set "_optimizer_reduce_groupby_key"=FALSE scope=spfile sid='*';
说明:Wrong results from OUTER JOIN with a bind variable and a GROUP BY clause
二十五
_optimizer_cost_based_transformation
alter system set "_optimizer_reduce_groupby_key"=off scope=spfile sid='*';
说明:关闭COST
查询转换。
二十六
job_queue_processes
alter system set job_queue_processes=cpu_core
(CPU
核数) scope=spfile sid='*';
说明:默认1000
,建议调整为CPU
核数。
二十七
optimizer_dynamic_sampling(
默认
2)
alter system set optimizer_dynamic_sampling=4 scope=both sid='*';
说明:动态采样,有些场景下,可根据时间情况调大采样级别,比如调到4
。
二十八
optimizer_index_cost_adj(
默认
100)
alter system set optimizer_index_cost_adj=40 scope=both sid='*';
说明:优化器计算通过索引扫描访问表数据的cost
开销
某些场景下,值越大优化器越倾向于使用全表扫描。相反,值越小,优化器越倾向于使于索引扫描。可根据实际情况进行调整,比如调小到40
。
二十九
_optimizer_mjc_enabled
alter system set "_optimizer_mjc_enabled" = false scope=both sid='*';
说明:
某些场景下,需要MERGE JOIN CARTESIAN
;
注意:
参数和说明,参考墨天轮
查询参数值:
select
a.ksppinm
name
,
b.ksppstvl
value
,
a.ksppdesc
description
from
x$ksppi a
,
x$ksppcv b
where
a.indx
=
b.indx
and
a.ksppinm
in
(
'_optimizer_adaptive_cursor_sharing'
,
'_optimizer_extended_cursor_sharing'
,
'_optimizer_extended_cursor_sharing_rel'
,
'_gc_policy_time'
,
'_gc_undo_affinity'
,
'_optimizer_use_feedback'
,
'_undo_autotune'
,
'_optimizer_null_aware_antijoin'
,
'_partition_large_extents'
,
'_use_adaptive_log_file_sync'
,
'_memory_imm_mode_without_autosga'
,
'_b_tree_bitmap_plans'
,
'_optimizer_mjc_enabled'
,
'_optimizer_ads_use_result_cache'
,
'_datafile_write_errors_crash_instance:'
,
'_optimizer_adaptive_plans'
,
'_optimizer_aggr_groupby_elim'
,
'_optimizer_reduce_groupby_key'
,
'_optimizer_cost_based_transformation'
,
'audit_trail'
,
'deferred_segment_creation'
,
'event'
,
'enable_ddl_logging'
,
'job_queue_processes'
,
'optimizer_dynamic_sampling'
,
'optimizer_index_cost_adj'
)
order
by
1
;
如何查看当前系统设置过哪些
event?
SQL> alter system set event='28401 trace name context forever,level 1','10949 trace name context forever,level 1' sid='*' scope=spfile;
SQL> shutdown immediate
SQL> startup
---1
直接查看参数
---2 oradebug
SQL> oradebug setmypid
Statement processed.
SQL> oradebug eventdump system
28401 trace name context forever,level 1
10949 trace name context forever,level 1
---3
告警日志
[oracle@cjcos ~]$ cd /u01/app/oracle19/diag/rdbms/cjcdb01/cjcdb01/trace/
[oracle@cjcos trace]$ vim alert_cjcdb01.log
欢迎关注我的微信公众号
"IT
小
Chen"
,共同学习,共同成长!!!