当前位置: 首页 > news >正文

【真实经验分享】PDB未按预期时间执行自动统计信息收集问题分析

问题描述

某客户发现一个问题,查看 dba_optstat_operations 发现2026-02-09 为周一但是 gather_database_stats (auto) 在2026-02-09 (02时,06时,10时,14时) 白天执行了4次自动统计信息收集

查看Scheduler windows显示周一的执行窗口开始时间为22时,总时长为4h,与我们查出来的实际执行时间不相符

下面我们将针对两个疑点进行解答:
问题1:为何每隔4小时多次运行自动统计信息收集?
问题2:2/9 为周一,按照Scheduler windows结果,周一的执行时间应为22时,为何在白天时间段运行?

分析:为何每隔4小时多次运行自动统计信息收集?

参考19c官方手册:
https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-automated-database-maintenance-tasks.html#GUID-BF691BB0-DC60-4829-A790-4C5BEB281FF1

官方手册里提到:如果维护窗口时长很长,则除Automatic SQL Tuning Advisor以外的所有自动维护任务都会每隔四小时重新开始运行。此功能可以确保维护任务定期运行,无论窗口的大小如何。
这里说明了为何会出现每4h执行一次统计信息收集

分析:2/9 为周一,按照Scheduler windows结果,周一的执行时间应为22时,为何在白天时间段运行?

参考官方文档:KB140350

官方文档中提到,由于在12c,18c,19c 中使用DBCA通用模板创建数据库时,CDB与PDB中Scheduler默认时区不同。
使用DBCA通用模板建库时无论CDB的Scheduler默认时区如何,在19c中PDB的Scheduler 默认时区为PST8PDT,这是Oracle预期行为。

查看环境中CDB$ROOT与PDB的Scheduler 默认时区果然不同

PRC时区与PST8PDT时区在非夏令时期间相差16h。
通过 dba_autotask_job_history 中的WINDOW_STATR_TIME 与 JOB_START_TIME的差异也可以看出 UTC 的2月11日14时对应的PST8PDT 2月10日 22时,两个时间确实相差16h

通过这个结论换算一下 UTC的2月9日2时、6时、10时、14时实际为PST8PDT的2月8日10时、14时、16时、20时,2月8日为周天,按照预期是在白天执行的自动统计信息收集,再结合前面得出的每4h跑一次scheduler的结论,换算后的执行时间完全符合预期

问题结论

问题1:为何每隔4小时多次运行自动统计信息收集?
解答:参考19c官方手册,如果维护窗口时长很长,则除Automatic SQL Tuning Advisor以外的所有自动维护任务都会每隔四小时重新开始运行。此为Oracle的预期行为。

问题2:2/9 为周一,按照Scheduler windows结果,周一的执行时间应为22时,为何在白天时间段运行?
解答:参考官方文档KB140350,2月9日周一白天运行自动统计信息收集任务的原因实际为CDB$ROOT Scheduler默认时区(PRC)比PDB Scheduler默认时区(PST8PDT)快16h导致的差异,PDB层面是按照PST8PDT的Scheduler时区执行的自动调度任务,也就是按照PST8PDT时区2月8日6时的周日调度任务,实际在北京时间2月8日22时开始执行,结合前一个结论间隔4小时运行一次,也会在2月9日2时、6时、10时、14时再调度一次。

解决方案

1.调整PDB的Scheduler默认时区与CDB$ROOT一致,若对生产无影响,不建议调整,以避免产生其他未知的问题

参考官方文档 KB139437

在PDB中执行

--查看PDB当前scheduler时区与时间戳selectdbms_scheduler.stimefromdual;--在PDB中修改Scheduler默认时区与CDB$ROOT一致execDBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('default_timezone','PRC');--再次PDB查看当前scheduler时区与时间戳selectdbms_scheduler.stimefromdual;select*fromdba_scheduler_global_attributewhereATTRIBUTE_NAMElike'%TIMEZONE%';

2.后续使用DBCA通用模板创建数据库,请设置PDB Scheduler 的默认时区

http://www.cnnetsun.cn/news/2713941.html

相关文章:

  • 基于Arduino与光敏电阻的智能感应装置:从传感器到执行器的IoT实践
  • Windows HEIC缩略图终极解决方案:5分钟让iPhone照片在资源管理器完美预览
  • 中大企业知产管理升级:汉知宝以全场景能力成为优选方案
  • 【UniApp小程序知识点总结】uni-app 微信小程序本地持久化存储实现
  • 从博弈论到你的Jupyter Notebook:手把手拆解SHAP值计算原理与实战调优
  • 【字节跳动】「第六篇」山西大同太行算力中心 全类目完整落地数据清单(全量化·精确3位小数·无遗漏
  • Matlab版TSA-DELM预测工具包:多输入单输出回归建模,含完整训练、优化与可视化流程
  • 深度解析Navicat Premium macOS试用期重置机制与自动化实现方案
  • C++20新特性解析:从概念到协程的全面指南
  • 3.3 Linux权限操作
  • 手把手教你学Simulink--交错并联 Buck 变换器的均流控制与热应力分析仿真
  • AI模型漂移导致SPC失控?——实时质量监控系统失效的4类根源及12小时热修复方案
  • 点点数据人均启动接口逆向实录:你以为在解密,其实你在读 Protobuf
  • Audiveris终极指南:10分钟学会将纸质乐谱转为可编辑数字格式
  • 告别命令行!RedisInsight 2.0保姆级安装与连接Redis数据库实战(Windows/Mac/Linux)
  • 2026年适配知网降AIGC网站横评:亲测8款工具,将AIGC特征彻底弱化淡化
  • 基于RAG的智能问答系统:从原理到实践,构建企业知识大脑
  • 如何快速掌握AI视频生成:面向创作者的完整指南
  • Overleaf字体避坑指南:为什么你的 extbf{}加粗没效果?可能是 amilydefault在搞鬼
  • Vivado 2023.2 实战:手把手教你封装一个带LED闪烁功能的AXI-Lite IP核
  • 用Arduino和光敏电阻模块DIY一个天黑自动亮的小夜灯(附完整代码)
  • Obsidian插件翻译终极指南:3种智能解决方案让英文插件秒变中文
  • 3分钟免费获取macOS鼠标指针:Windows和Linux用户的桌面美化神器
  • 音频编辑成本高、操作复杂?Audacity免费开源音频编辑器让你轻松搞定专业级音频处理
  • Cocos Creator开发者看过来:如何把Tiled编辑器做的.tmx地图无缝用到你的项目里?
  • PHP数据同步与CDC变更数据捕获
  • 别再只调参了!深入MAE源码,手把手教你如何将它适配到自己的主干网络(以ResNet为例)
  • 如何快速部署AI编程助手:OpenCode 5分钟配置终极指南
  • 告别云打包!用Android Studio离线打包UniApp APK的保姆级避坑指南
  • Java面试必问的10大核心问题及高分回答技巧