Skip to content

Oracle 性能相关参数

查询优化参数

优化器参数

参数名称默认值说明建议值
optimizer_modeALL_ROWS优化器模式ALL_ROWS:适合OLTP和DSS系统,FIRST_ROWS_n:适合需要快速返回前n行的场景
optimizer_features_enable数据库版本优化器特性启用建议设置为数据库版本,或根据需要降级以兼容旧系统
optimizer_dynamic_sampling2动态采样级别0-11,建议2-4,提高统计信息质量
optimizer_index_caching0索引缓存百分比0-100,建议70-90,模拟索引块在缓存中的比例
optimizer_index_cost_adj100索引成本调整1-10000,建议50-90,降低索引访问成本
optimizer_use_invisible_indexesFALSE使用不可见索引FALSE:默认不使用,TRUE:允许使用不可见索引
optimizer_use_sql_plan_baselinesTRUE使用SQL计划基线TRUE:启用SQL计划管理,FALSE:禁用
optimizer_capture_sql_plan_baselinesFALSE自动捕获SQL计划基线FALSE:默认不捕获,TRUE:自动捕获重复执行的SQL计划
optimizer_adaptive_plansTRUE自适应计划TRUE:启用自适应计划,FALSE:禁用
optimizer_adaptive_statisticsFALSE自适应统计信息FALSE:默认禁用,Oracle 12c后推荐禁用

SQL执行参数

参数名称默认值说明建议值
cursor_sharingEXACT游标共享模式EXACT:精确匹配,FORCE:强制共享,SIMILAR:相似共享
open_cursors300每个会话的最大打开游标数建议500-2000,根据应用需求调整
session_cached_cursors50会话缓存游标数建议100-500,减少硬解析
plsql_optimize_level2PL/SQL优化级别0-3,建议2或3,提高PL/SQL性能
plsql_code_typeINTERPRETEDPL/SQL代码类型INTERPRETED:解释执行,NATIVE:本地编译
result_cache_modeMANUAL结果缓存模式MANUAL:手动,FORCE:强制,AUTO:自动
result_cache_max_size自动结果缓存最大大小0:禁用,建议0或SGA的1-5%
result_cache_max_result5单结果最大缓存比例1-100,建议5-10%

并行处理参数

并行度控制参数

参数名称默认值说明建议值
parallel_degree_policyMANUAL并行度策略MANUAL:手动,AUTO:自动,LIMITED:有限自动
parallel_min_time_thresholdAUTO并行最小时间阈值AUTO:自动,或指定时间(秒)
parallel_max_servers自动最大并行服务器进程数建议2*CPU核心数
parallel_min_servers0最小并行服务器进程数建议0,根据负载动态调整
parallel_servers_target自动并行服务器目标数建议CPU核心数*2
parallel_execution_message_size16384并行执行消息大小建议16384或32768
parallel_force_localFALSE强制本地并行TRUE:强制本地执行,FALSE:允许跨实例并行
parallel_adaptive_multi_userTRUE自适应多用户并行TRUE:根据负载调整并行度

并行执行参数

参数名称默认值说明建议值
parallel_query_modeENABLED并行查询模式ENABLED:启用,DISABLED:禁用
parallel_dmlDISABLED并行DML模式DISABLED:默认禁用,需要显式启用
parallel_ddlENABLED并行DDL模式ENABLED:启用,DISABLED:禁用
parallel_degree_limitCPU并行度限制CPU:基于CPU数量,IO:基于I/O能力,或指定数值
parallel_servers_instances0并行服务器实例数0:自动,或指定实例数

I/O 优化参数

磁盘I/O参数

参数名称默认值说明建议值
db_file_multiblock_read_count自动多块读的块数自动优化,建议8-64,根据OS块大小调整
db_file_sequential_read_batch1顺序读批次数1-10,建议1-4,提高顺序读性能
disk_asynch_ioTRUE磁盘异步I/OTRUE:启用,FALSE:禁用,建议启用
filesystemio_optionsNONE文件系统I/O选项NONE:默认,ASYNCH:异步I/O,DIRECTIO:直接I/O,SETALL:启用所有选项
dbwr_io_slaves0DBWn I/O从进程数0:禁用,建议0或根据需要设置
db_writer_processes自动DBWn进程数自动计算,1个进程处理8个CPU核心
log_writer_processes自动LGWR进程数自动计算,建议1-4个,根据日志写入负载调整
log_buffer自动重做日志缓冲区大小建议10-100MB,避免频繁的日志写入

存储参数

参数名称默认值说明建议值
db_create_file_dest数据文件默认位置ASM环境建议+DATA,文件系统环境建议具体路径
db_create_online_log_dest_1在线日志默认位置1建议与数据文件分开,提高I/O性能
db_recovery_file_dest恢复文件目标位置建议+FRA或单独路径,用于闪回日志、控制文件自动备份等
db_recovery_file_dest_size0恢复文件目标大小建议数据库大小的10-20%
storage_clause自动默认存储子句建议根据表空间设置合理的存储参数

内存管理参数

缓冲区缓存参数

参数名称默认值说明建议值
db_cache_size自动数据库缓冲区大小占SGA的40-60%,根据数据库类型调整
db_keep_cache_size0保持缓冲区大小0:禁用,或根据需要设置,存放频繁访问且不常修改的表
db_recycle_cache_size0回收缓冲区大小0:禁用,或根据需要设置,存放临时访问的表
db_cache_adviceON缓冲区缓存建议ON:启用,OFF:禁用,READY:准备就绪
db_block_size8192数据库块大小创建数据库时指定,不可修改,建议8KB
db_block_checkingFALSE数据库块检查FALSE:默认禁用,TRUE:启用块检查
db_block_checksumTYPICAL数据库块校验和TYPICAL:典型,FULL:完全,OFF:禁用

共享池参数

参数名称默认值说明建议值
shared_pool_size自动共享池大小占SGA的15-25%,复杂查询多的系统可适当增大
shared_pool_reserved_size自动共享池保留大小自动计算,占共享池的5-10%
shared_pool_reserved_min_alloc4000共享池保留最小分配4000-8000,建议4000
cursor_space_for_timeFALSE游标空间保留时间FALSE:默认禁用,TRUE:启用会增加内存使用
session_cached_cursors50会话缓存游标数建议100-500,减少硬解析
open_cursors300每个会话的最大打开游标数建议500-2000,根据应用需求调整

PGA参数

参数名称默认值说明建议值
pga_aggregate_target自动PGA聚合目标大小一般为系统内存的20-30%,或SGA的50-75%
pga_aggregate_limit200% of pga_aggregate_targetPGA聚合上限建议为pga_aggregate_target的2-3倍
workarea_size_policyAUTO工作区大小策略AUTO:自动管理,MANUAL:手动管理
sort_area_size65536排序区大小仅在手动模式下使用,建议1-4MB
hash_area_size131072哈希区大小仅在手动模式下使用,建议2-8MB
bitmap_merge_area_size1048576位图合并区大小仅在手动模式下使用,建议1-4MB

事务处理参数

事务管理参数

参数名称默认值说明建议值
transactions派生值最大事务数自动计算,一般为sessions的1.1
transactions_per_rollback_segment5每个回滚段的事务数建议5-10
rollback_segments自动回滚段列表自动管理,建议使用UNDO表空间
undo_managementAUTOUNDO管理方式AUTO:自动,MANUAL:手动
undo_tablespace自动默认UNDO表空间建议显式指定
undo_retention900UNDO保留时间(秒)建议1800-7200,根据闪回查询需求调整
undo_retention_guaranteeFALSEUNDO保留保证FALSE:不保证,TRUE:保证
fast_start_mttr_target0故障恢复目标时间(秒)建议300-900,根据业务需求调整
fast_start_parallel_rollbackLOW并行回滚级别LOW:低并行度,HIGH:高并行度

锁管理参数

参数名称默认值说明建议值
dml_locks派生值DML锁数量自动计算,一般为processes的4倍
ddl_locks100DDL锁数量建议100-500
enqueue_resources派生值队列资源数量自动计算,建议足够大以避免锁争用
lock_sgaFALSE锁定SGA到内存FALSE:默认不锁定,TRUE:锁定SGA
max_rollback_segments30最大回滚段数建议30-100

统计信息参数

统计信息收集参数

参数名称默认值说明建议值
statistics_levelTYPICAL统计级别TYPICAL:典型,BASIC:基本,ALL:所有
timed_statisticsTRUE时间统计TRUE:启用,FALSE:禁用
timed_os_statistics0操作系统时间统计间隔0:禁用,建议60-300秒
stat_sid0统计会话ID0:所有会话,或指定会话ID
collect_cpu_statisticsTRUE收集CPU统计信息TRUE:启用,FALSE:禁用
_optimizer_gather_stats_on_loadTRUE加载时收集统计信息TRUE:启用,FALSE:禁用

统计信息使用参数

参数名称默认值说明建议值
optimizer_use_pending_statisticsFALSE使用待处理统计信息FALSE:默认不使用,TRUE:使用待处理统计信息
optimizer_inmemory_awareTRUE内存列存储感知TRUE:启用,FALSE:禁用
optimizer_secure_view_mergingTRUE安全视图合并TRUE:启用,FALSE:禁用
optimizer_check_stats_on_conventional_dmlTRUE常规DML时检查统计信息TRUE:启用,FALSE:禁用

常见问题(FAQ)

Q1: 如何优化SQL查询性能?

A: 可以通过以下参数优化SQL查询性能:

  1. 设置合适的优化器模式:

    sql
    ALTER SYSTEM SET optimizer_mode = 'ALL_ROWS' SCOPE=BOTH;
  2. 调整共享池大小,减少硬解析:

    sql
    ALTER SYSTEM SET shared_pool_size = 1G SCOPE=BOTH;
    ALTER SYSTEM SET session_cached_cursors = 200 SCOPE=BOTH;
  3. 启用SQL计划管理:

    sql
    ALTER SYSTEM SET optimizer_use_sql_plan_baselines = TRUE SCOPE=BOTH;

Q2: 如何启用并行查询?

A: 可以通过以下方式启用并行查询:

  1. 设置并行度策略:

    sql
    ALTER SYSTEM SET parallel_degree_policy = 'AUTO' SCOPE=BOTH;
  2. 设置并行服务器目标数:

    sql
    ALTER SYSTEM SET parallel_servers_target = 32 SCOPE=BOTH;
  3. 为表或索引设置并行度:

    sql
    ALTER TABLE employees PARALLEL 4;

Q3: 如何优化I/O性能?

A: 可以通过以下参数优化I/O性能:

  1. 启用异步I/O和直接I/O:

    sql
    ALTER SYSTEM SET disk_asynch_io = TRUE SCOPE=SPFILE;
    ALTER SYSTEM SET filesystemio_options = 'SETALL' SCOPE=SPFILE;
  2. 调整DBWn进程数:

    sql
    ALTER SYSTEM SET db_writer_processes = 4 SCOPE=SPFILE;
  3. 设置合适的日志缓冲区大小:

    sql
    ALTER SYSTEM SET log_buffer = 50M SCOPE=SPFILE;

Q4: 如何优化内存使用?

A: 可以通过以下参数优化内存使用:

  1. 使用自动内存管理:

    sql
    ALTER SYSTEM SET memory_target = 8G SCOPE=SPFILE;
    ALTER SYSTEM SET memory_max_target = 10G SCOPE=SPFILE;
  2. 调整SGA和PGA比例:

    sql
    ALTER SYSTEM SET sga_target = 6G SCOPE=SPFILE;
    ALTER SYSTEM SET pga_aggregate_target = 2G SCOPE=SPFILE;
  3. 优化缓冲区缓存:

    sql
    ALTER SYSTEM SET db_cache_size = 4G SCOPE=SPFILE;

Q5: 如何优化事务处理性能?

A: 可以通过以下参数优化事务处理性能:

  1. 设置合适的UNDO保留时间:

    sql
    ALTER SYSTEM SET undo_retention = 3600 SCOPE=BOTH;
  2. 调整故障恢复目标时间:

    sql
    ALTER SYSTEM SET fast_start_mttr_target = 300 SCOPE=BOTH;
  3. 启用自动UNDO管理:

    sql
    ALTER SYSTEM SET undo_management = 'AUTO' SCOPE=SPFILE;

最佳实践

  1. 根据系统类型调整参数:OLTP系统和DSS系统的参数配置差异较大,需要根据实际工作负载调整。
  2. 启用自动管理功能:对于大多数系统,建议启用自动内存管理、自动UNDO管理等自动功能,简化管理。
  3. 合理设置并行度:并行度不是越高越好,需要根据CPU核心数和I/O能力合理设置。
  4. 定期收集统计信息:定期收集数据库对象的统计信息,确保优化器生成高效的执行计划。
  5. 使用SQL计划管理:启用SQL计划管理,防止执行计划突然变化导致性能问题。
  6. 监控性能指标:使用AWR报告、ASH报告等工具监控性能指标,及时调整参数。
  7. 测试参数修改:在生产环境修改参数前,必须在测试环境进行充分测试,评估修改的影响。
  8. 保持参数文档化:记录所有参数的修改历史和原因,便于后续维护和故障排查。
  9. 遵循Oracle建议:对于不确定的参数,建议先使用Oracle的默认值或建议值,然后根据实际情况调整。
  10. 定期回顾参数配置:随着业务发展和系统变化,定期回顾和调整参数配置,确保最佳性能。