awr报告中无指标直接对应init.ora参数调整,所有“参考配置”均需通过等待事件与性能指标反推因果链;关键看争用信号(如buffer_busy_waits)、参数联动影响(如gcs_server_processes与cluster_interconnects)及sql执行计划稳定性,而非孤立数值。
awr报告里哪些指标直接对应init.ora参数调整
awr本身不生成“修改建议”,它只记录历史负载和等待事件;所谓“参考配置”,其实是通过指标反推参数是否成为瓶颈。关键不是看数值高低,而是看指标与参数的因果链是否成立。
常见误判:看到 db_cache_size 命中率 92% 就调大——但若 physical_reads 本身极低,说明缓存已够用,再调反而挤占 PGA;真正该盯的是 buffer_busy_waits 或 read_by_other_session 这类争用信号。
-
log_file_sync等待时间高 → 检查commit_logging、commit_wait和磁盘写入延迟,而非盲目调大log_buffer -
library cache lock高 → 优先排查硬解析(SQL未绑定变量),不是立刻增大shared_pool_size -
enq: TX - row lock contention频繁 → 参数无关,是应用事务设计问题,transactions或rollback_segments不解决根本
哪些init.ora参数在AWR周期内根本不会生效
很多DBA拿着AWR里“PGA使用峰值”去调 pga_aggregate_target,却忘了这个参数是动态可改的,但改完要等新会话才生效——而AWR统计的是过去一小时所有会话,混杂了旧配置下的行为。
同理,sga_target、memory_target 这类自动内存管理参数,其内部组件(如 db_cache_size)在运行时可能被Oracle自动重分配,AWR里看到的“cache size”是快照时刻值,不代表稳定配置。
- 静态参数(如
processes、db_block_size)必须重启才生效,AWR无法反映修改后效果 -
_kghdsidx_count这类隐含参数即使动态修改,AWR也不采集,仅影响内部哈希桶分布 - AWR默认每小时采样一次,短时突发参数需求(如批量导入临时调大
sort_area_size)压根不会出现在报告中
用AWR定位参数冲突的真实案例
某系统AWR显示 gc cr block busy 高,DBA调大 gcs_server_processes 后发现更卡——因为没注意到 cluster_interconnects 实际走的是千兆私网,而 gcs_server_processes 增加导致跨节点消息陡增,网络打满。
这种参数“联动失效”在RAC环境极常见:单看一个参数的等待指标没问题,但组合起来就出问题。
-
parallel_max_servers调太高 +resource_manager_plan未配 → 大量并行进程抢占CPU,resmgr:cpu quantum等待飙升 -
optimizer_mode=first_rows_10+ AWR里elapsed_time长的SQL全是分页查询 → 实际是优化器放弃索引合并,该换optimizer_index_cost_adj而非调并行 -
filesystemio_options=setall在ASM环境下无效,AWR里direct_path_read仍高,得关掉这个参数再开disk_asynch_io=true
为什么直接套用AWR里的“Top SQL”调参数往往失败
AWR导出的“Top SQL by Elapsed Time”列表,90%以上是OLAP类长SQL,它们本就不该靠调 db_cache_size 或 shared_pool_size 来优化——这些SQL走的是全表扫描+临时表空间排序,真正瓶颈在磁盘I/O或TEMP空间,不是SGA。
更隐蔽的问题是:同一SQL在不同AWR周期可能执行计划突变,sql_id 不变,但 plan_hash_value 已不同。拿旧周期的执行计划去反推参数,等于拿错病历开药。
- 先过滤出
executions > 100且elapsed_time/executions > 1的SQL,再查其plan_hash_value是否稳定 - 对
parse_calls/executions> 0.8 的SQL,重点看cursor_sharing和绑定变量,不是调open_cursors - AWR里
SQL ordered by Gets比Elapsed Time更适合找内存参数问题,因为Logical Reads直接受db_cache_size影响
参数调优不是填数字游戏,AWR只是把系统反应录下来,而反应背后可能是SQL写法、索引缺失、统计信息陈旧,甚至存储条带配置错误——这些都不会在init.ora里体现,但会彻底扭曲你对参数的理解。










