糟糕!升级到19C后业务卡顿频发,该怎么办?
“系统升级后反而更卡了!”——这是许多DBA在将Oracle升级到19C后最头疼的问题。作为长期支持版本,19C的稳定性备受期待,但隐藏的性能杀手却可能让业务陷入卡顿泥潭。
这里小编结合一线运维经验,为你揭秘根因并提供“急救指南”!以下是前几天,现场的小伙伴迁移升级到19C之后的一次案例,出现了大面积硬解析,很多核心业务SQL执行计划变了。
以下是一些常见的原因及排查方法,分享给大家
1. 参数配置不当
升级后,Oracle 19C的默认参数可能与之前的版本不同,导致性能下降。例如,内存分配、并行度、优化器模式等参数可能需要调整。
-- 检查当前参数设置
SHOW PARAMETER;-- 检查内存相关参数
SELECT * FROM v$parameter
WHERE name IN
('memory_target',
'memory_max_target',
'sga_target',
'pga_aggregate_target'
);
-- 自适应执行计划
optimizer_adaptive_plans参数(默认TRUE)
一般设置为FALSE,
优化器将使用固定的执行计划,不进行自适应调整。
SELECT * FROM v$parameter
WHERE name = 'optimizer_adaptive_plans';
2. 统计信息不准
升级后,表的统计信息可能未及时更新,导致执行计划选择不当,进而引发性能问题。
1.fix表统计信息收集BEGIN
DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
END;
2.数据字典收集
exec dbms_stats.gather_dictionary_stats(estimate_percent=>100,degree=>8,cascade=>true);
3.schema统计信息收集
exec dbms_stats.gather_schema_stats(
ownname => 'SCOTT',
options => 'GATHER AUTO'
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size repeat',
degree => 15,
granularity=> 'AUTO',
no_invalidate=> false
force=>false
cascade=>true,
)
-- 检查统计信息最后更新时间
SELECT owner, table_name, last_analyzed
FROM dba_tables
WHERE last_analyzed IS NULL
OR last_analyzed < SYSDATE - 7;
3.资源争用
升级后,某些资源(如CPU、I/O、锁)可能成为瓶颈,导致性能卡顿。
-- 检查等待事件
SELECT event, total_waits, time_waited
FROM v$system_event
ORDER BY time_waited DESC;-- 检查锁争用
SELECT blocking_session, sid, serial#, wait_class, event
FROM v$session
WHERE blocking_session IS NOT NULL;
-- 检查I/O性能
SELECT file_name, phyrds, phywrts, readtim, writetim
FROM v$filestat
JOIN dba_data_files ON v$filestat.file# = dba_data_files.file_id;
4.SQL执行计划变化
Oracle 19C的优化器可能生成与之前版本不同的执行计划,导致某些SQL性能下降。
-- 查找高负载SQL
SELECT sql_id, executions, elapsed_time, cpu_time, disk_reads, buffer_gets
FROM v$sql
ORDER BY elapsed_time DESC;-- 获取SQL的执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id'));
使用SQL Profile或SQL Plan Baseline固定执行计划
-- 创建SQL Plan Baseline
DECLARE
l_plans_loaded PLS_INTEGER;
BEGIN
l_plans_loaded := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id => '&sql_id');
END;
总结
Oracle 19C升级后性能卡顿的原因可能涉及参数配置、统计信息、执行计划、资源争用、新特性兼容性、硬件资源、对象失效、日志错误、版本Bug以及业务负载变化等多个方面。
更多内容请关注视频号
👇👇👇👇