Oracle数据库升级迁移、SPA及统计信息
作者从一次真实的升级迁移讲起:某省级电信运营商将核心CRM系统的Oracle数据库,从IBM小型机上的10g RAC迁移至x86+VMware平台的11g RAC,成本降至十分之一。这引出了一个关键的后续问题:新系统上线后,应采用何种统计信息收集策略? 文章对比了两种方案:迁移旧库统计信息或在新库自动收集。作者团队最终选择了后者,原因是11gR2的自动收集机制已相对完善,且能为后续运维降低风险。但如何确保这一策略在上线时就安全可用?答案在于利用SPA(SQL性能分析器)。 团队使用了生产库三个时段及一个月AWR中的全部SQL,在新库上跑SPA测试。在测试前,先用`dbms_stats.gather_database_stats(options=>'gather auto')`执行一次增量收集。然而,直接这样做会导致新库的直方图信息严重缺失,因为自动收集依赖`col_usage$`表,而新库此表为空。解决方法是在SPA测试过程中,通过执行足够多的SQL来“喂饱”`col_usage$`,让系统“记住”哪些列需要被关注。最终,基于SPA的测试结果,用数十个SQL Profile固化了风险计划,保障了系统平稳上线。 这篇分享的价值在于,它清晰地展示了在大型跨版本迁移中,如何通过组合使用SPA和自动统计信息收集策略,来系统性规避性能风险,而不仅仅是凭经验手工调优。