适用范围
数据库的默认参数对于大型系统来说,还远远不够。需要调整和设置如下的参数,保证系统稳定性、性能、可靠性等。
此文档主要基于云和恩墨客户众多客户案例和产品环境,总结提炼的Oracle 19c初始化参数设置。
参数详情
参数名称 | 参数值 | 参数含义 | 额外说明 |
_optimizer_adaptive_cursor_sharing | false | 控制自适应游标共享功能是否开启 | 关闭adaptive cursor sharing,避免Oracle根据绑定变量的值改变执行计划,从而造成性能的波动 |
_optimizer_extended_cursor_sharing | none | 是否允许优化器使用扩展游标共享 | 避免出现cursor sharing导致的子游标过多的问题 |
_optimizer_extended_cursor_sharing_rel | none | 是否允许优化器针对关系对象使用扩展游标共享 | 避免出现cursor sharing导致的子游标过多的问题 |
_optimizer_use_feedback | false | 是否开启优化器使用执行时的统计信息反馈功能 | 避免根据返回结果确定cardinality,该功能会造成执行计划不稳定易导致性能问题 |
_optimizer_gather_feedback | false | optimizer gather feedback |
|
_gc_policy_time | 0 | 控制oracle DRM功能是否开启 | 关闭RAC的DRM(dynamic remastering)特性,避免频繁的DRM使系统性能不稳定、严重的时候使数据库挂起。同时也关闭Read-mostly Locking新特性,这个特性目前会触发大量的BUG,严重时使数据库实例宕掉 |
_gc_undo_affinity | false | 控制Oracle是否对于UNDO数据块开启DRM功能 | 关闭RAC的DRM(dynamic remastering)特性,避免频繁的DRM使系统性能不稳定、严重的时候使数据库挂起 |
_undo_autotune | false | 是否开启UNDO的自动调整功能 | 关闭UNDO表空间的自动调整功能,避免出现UNDO表空间利用率过高或者UNDO段争用的问题 |
_use_adaptive_log_file_sync | false | 是否启用自适应log file sync工作模式 | 关闭11203开始引入的LGWR自适应工作方式,这种方式存在bug,会导致前台log file sync等待延迟远远高于日志写的延迟,并引发严重的性能问题 |
_optimizer_mjc_enabled | false | 是否优化器启用MERGE JOIN CARTESIAN功能 | 避免优化器在评估驱动表很小的情况下,选择MERGE JOIN CARTESIAN执行计划,如果出现评估错误或统计信息不准确的情况,笛卡尔积的出现将导致执行计划完全不可接受,出现严重的性能问题 |
_b_tree_bitmap_plans | false | 是否允许优化器启用BITMAP索引转换功能 | 避免优化器考虑将BTREE索引转换为BITMAP索引,通过BITMAP索引的AND/OR操作后在转换为BTREE的ROWID方式,此种执行计划对于OLTP环境而言不应该出现,且Oracle难以准确的评估转换后的SQL性能 |
_partition_large_extents | false | 是否针对分区使用大的扩展 | 避免分区表使用大的扩展,如果空分区较多将会导致严重的空间浪费 |
_index_partition_large_extents | false | 是否针对索引分区使用大的扩展 | 避免分区索引使用大的扩展,如果空分区较多将会导致严重的空间浪费 |
audit_trail | none | 开启或关闭Oracle的审计功能。 支持的值: none或false: 关闭数据库审计 os: 开启数据库审计,审计记录写到操作系统的审计目录下 db或true:开启数据库审计,审计记录写入数据库审计表中(SYS.AUD$). db_extended: 开启数据库审计,审计记录写入数据库审计表中(SYS.AUD$)。此外,将SQLBIND 和SQLTEXT的信息写入到SYS.AUD$ 表中. | 关闭存储在数据库中的审计功能,避免造成SYSTEM表空间或AUD$表的快速增长 |
parallel_force_local | ture | 是否强制并行子进程仅在并行语句发起节点启动 | 对于RAC环境,将并行进程完全在当前实例启动,避免并行进程启动到多个实例,从而造成的进程间数据交互导致的性能问题 |
deferred_segment_creation | false | 是否开启延迟段创建的功能 | 关闭延迟段创建特性,该特性主要目的是为了避免空段造成的空间浪费,但是可能引发很多bug |
_cursor_obsolete_threshold | 200 | 一个父游标下允许保留多少个子游标 | 设置为200,避免单个父游标下子游标过多造成的cursor mutex等待 |
_optimizer_cartesian_enabled | false | 关闭优化器通过笛卡尔积方式进行优化 | 优化器可能会选择返回结果为1的表与其他表进行笛卡尔积,从而达到优化执行计划的目的,但是如果统计信息不准确,可能会导致严重的性能问题,因此关闭这个优化设置 |
control_file_record_keep_time | 31 | CONTROL_FILE_RECORD_KEEP_TIME设置控制文件中记录被重用的最小保留时间。当需要记录新的信息,且最老的记录还无法重用时,控制文件会进行扩展. 如果参数设置为0,则控制文件不会扩展,里面记录信息的空间根据需要会进行覆盖重用。 这个参数设置的是控制文件中循环使用的部分,比如归档记录和备份记录。而数据文件,表空间以及REDO线程配置等信息,不会被重用和覆盖,也不受这个参数的影响。 默认值:7 (days) 范围: 0 to 365 (days) | 设置31天保证归档和备份信息不会过早被覆盖 |
result_cache_max_size | 0 | RESULT_CACHE_MAX_SIZE指定SGA中用于Result Cache的最大内存空间。参数值大于0时,会取整到下一个32K的整数倍。如果设置为0,则关闭Result Cache功能。 在RAC环境中,可以在所有节点设置0值关闭该功能,或者所有节点设置非0值,启用该功能。如果在某些节点启用,某些节点关闭则可能导致不正确的结果。 | 对于OLTP系统,关闭Result Cache功能 |
_datafile_write_errors_crash_instance | false | datafile write errors crash instance | 数据文件发生写错误是否导致实例崩溃 |
_clusterwide_global_transactions | false | enable/disable clusterwide global transactions | 当_clusterwide_global_transactions=false时,ORACLE会将这些本地事务当做单独的事务通过多阶段提交协调处理。 |
_keep_remote_column_size | true | remote column size does not get modified | 避免通过DBLINK创建对象Oracle根据字符集长度的差异自动扩展列的长度 |
_cleanup_rollback_entries | >=2000 | no. of undo entries to apply per transaction cleanup | 设置较大的值可以加快死事务回滚的速度 |
_rollback_segment_count | 2000 | 实例上设置的回滚段数量 | 对于OLTP系统,设置较高的回滚段数量可以降低回滚段争用 |
_sql_plan_directive_mgmt_control | 0 | controls internal SQL Plan Directive management activities |
|
autotask_max_active_pdbs | 4 | 控制同一时间窗口最大同时执行自动任务的pdb个数 |
|
awr_pdb_autoflush_enabled | true | 指定是否为CDB中的所有PDB或CDB中的单个PDB启用或禁用自动工作负载存储库(AWR)快照 |
|
enable_ddl_logging | true | 是否开启记录DDL日志 |
|
job_queue_processes | 300 | 最大job队列进程个数 |
|
_ash_size | 250M | To set the size of the in-memory Active Session History buffers |
|
_lm_tickets | 5000 | GES messaging tickets |
|
_optim_peek_user_binds | false | enable peeking of user binds |
|
_report_capture_cycle_time | 0 | Time (in sec) between two cycles of report capture daemon |
|
_dlm_stats_collect | 0 | DLM statistics collection(0 = disable, 1 = enable (default)) |
|
_drop_stat_segment | 1 | drop ilm statistics segment |
|
_cursor_reload_failure_threshold | 36 | Number of failed reloads before marking cursor unusable |
|
_sys_logon_delay | 0 | The failed logon delay for the database instance |
|
_use_single_log_writer | true | Use a single process for redo log writing |
|
_serial_direct_read | NEVER | 从oracle 11g开始,有个新特性(自动serial direct path read特性),在进行全表扫描的时候会产生direct path read等待事件,可以设置参数“_serial_direct_read”的值为“NEVER” ,禁用这个新特性。出现这个等待事件时,一般物理IO都比较大。一般情况下,新装的11g、12c数据库,建议关闭掉这个新特性。 | 参考Higher ‘direct path read’ Waits in 11g when Compared to 10g (文档 ID 793845.1) |
_part_access_version_by_number | FALSE | 这个bug仅和分区表相关,在TRUNCATE操作之后访问分区的对象可能会报ORA-8103 (or ORA-600)错误。这个bug也体现在对分区表的查询可能给出错误的结果集。 | Bug 19689979 - ORA-8103 or ORA-600 [ktecgsc:kcbz_objdchk] or Wrong Results on PARTITION table after TRUNCATE in 11.2.0.4 or above (文档 ID 19689979.8) |
_lm_sync_timeout | 1200 | 设置这个参数是防止重构时和DRM超时 | “大于100G SGA的情况下,需要设置。 参考文档:Best Practices and Recommendations for RAC databases with SGA size over 100GB (文档 ID 1619155.1)” |
LOG_ARCHIVE_MAX_PROCESSES | 4 | 设置同时启动的最大归档进程数量 | 该默认值根据CPU数量生成,默认值太大,当standby产生大量gap时容易造成网络传输高峰导致网络带宽用满,从而导致正常业务受到影响 |