记一次19C统计信息引发的数据库卡顿问题

来源:这里教程网 时间:2026-03-03 21:44:53 作者:

问题现象:       业务侧反馈下午1点左右出现数据库相应较慢, 影响业务,无具体报错。 问题排查:      反馈数据库较慢,首先查看故障时间段的历史会话视图,以及awr报告,大致定位问题,发现在该时间点,数据库存在大量library cache lock异常等待。这个等待事件也是个老演员了,本质是共享内存资源的并发控制冲突。我们重点排查DDL、统计信息、绑定变量以及是否有会话异常。      我们首先确认DDL情况,明确在故障期间并没有对象DDl和编译动作。      其次,我们确认统计信息。查看统计信息计划,并未人工调整时间,sql如下:

select t1.window_name,t1.repeat_interval,t1.duration from dba_scheduler_windows t1,dba_scheduler_wingroup_members t2
where t1.window_name=t2.window_name and t2.window_group_name in ('MAINTENANCE_WINDOW_GROUP','BSLN_MAINTAIN_STATS_SCHED');

进一步确认统计信息作业调度情况,sql如下:

select t.log_id, t.LOG_DATE, t.JOB_NAME, t.STATUS, t.ACTUAL_START_DATE, to_char((to_timestamp_tz(ACTUAL_START_DATE) at time zone '+08:00'), 'yyyy-mm-dd hh24:mi:ss') "ACTUAL_START_DATE_+8", t.RUN_DURATION, t.con_id from cdb_scheduler_job_run_details t where job_name LIKE 'ORA$AT_OS%' and con_id = 3 order by log_date;

发现调度时间设置为晚上10点,但是实际作业执行时间为第二天下午1点,正好是故障时间期间。注意到这里出现的PST8PDT,需要进一步确认下数据库时区。 在CDB中执行如下命令,确认CDB和PDB的当前默认时区设置:

SELECT t.CON_ID, t.ATTRIBUTE_NAME, t.VALUE 
FROM CDB_SCHEDULER_GLOBAL_ATTRIBUTE t 
WHERE t.ATTRIBUTE_NAME = 'DEFAULT_TIMEZONE' 
ORDER BY 1;

      发现CDB的时区是中国标准时间(PRC, UTC+8),但是PDB 的时区设置的是PST8PDT。 问题处理:          修改PDB的时区,以解决调度窗口错乱问题。

ALTER SESSION SET CONTAINER=pdb1;
EXEC DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('default_timezone', 'PRC');

参考文档:      Default Scheduler Timezone Value In PDB$SEED Different Than CDB (Doc ID 2702230.1)

相关推荐