潦草白纸

品味性能之道<三>:方法论

自顶向下的性能优化方法论
  系统优化是包括系统设计、开发、产品上线、平台优化的全过程,不同阶段的优化工作对全系统所带来的效益是不同的。理想的性能优化论应该采用自顶向下的优化方法,即在项目设计、开发和上线等各项目阶段,均全面贯彻性能优化思想。特别是从头就开始不仅考虑业务功能的实现,而且同时考虑性能和代价。
下图是Oracle公司总结的在不同阶段进行优化工作所带来的效益和代价变化图。
 
设计阶段囊括的优化相关工作包括:
  • 业务规则的优化设计;
  • 数据库体系结构的优化设计;
  • 数据库逻辑结构设计;
  • 数据库物理结构设计;
  • 应用系统的设计;
开发阶段囊括的优化相关工作包括:
  • 合理的索引策略;
  • 合理的访问路径;
  • 优化SQL语句的分析数;
  • 充分适用PL/SQL;
  • 减少锁冲突;
发布阶段能进行的优化工作主要包括:
  • 内存和CPU的优化和调整;
  • 磁盘I/O和物理结构的设计和调整;
  • 系统资源竞争的监测和调整;
  • 操作系统平台的优化;
-----------------------------------------------------------------------------------------------------------------------------------------------------
自底向上的性能优化方法论
  前面讲述的自顶向下的性能优化过程,是比较理想的优化方法论,即在项目设计、开发和上线等各项目阶段,均全面贯彻性能优化思想。特别是从头就开始不仅考虑业务功能的实现,而且同时考虑性能和代价。
  但是,咱们大多数系统都是在系统上线,甚至出现严重问题后才开始关注如何优化。此时,最为行之有效的方法就是自底向上,即从硬件&网络->操作系统->数据库->应用软件->系统架构->业务需求。这样的顺序来诊断和定位问题。
  毕竟越往下到硬件、网络带宽,越具有通用性,也越容易理解和下手;越往上到业务需求,越体现不同业务系统的特点,也越难理解和下手。
 
以下为Oracle公司提供的自底向上性能优化过程:
  1. 检查系统的利用率
  2. 检查等待事件
  3. 检查物理I/O
  4. 确定范围——系统级、模块机、用户级?!
  5. 确定最消耗资源的SQL,STATSPACK/AWR报告、Top Session in OEM
  6. 分析执行计划 explain plan
  7. 分析访问的对象(size/cardinality)
  8. 分析连接、访问方式
  9. 找出相关问题
  10. 确定解决方案
  11. 测试解决方案
  12. 生产环境实施解决方案
  13. 分析结果
根据oracle的经验,大多数系统的性能问题还是出在应用方面。如果能拿出详细的应用优化方案,特别是优化前后的对比数据。那便是极好的了。
 
应用优化不一定需要全面了解所有模块,只需了解最消耗资源的模块,以及这些模块的数据库设计和应用SQL就可以了。甚至可以不深入理解业务功能和SQL功能,关键会分析执行计划、数据分布、如何建立索引、如何优化表连接就可以了。总之,按照上述自底向上的方法论,就能诊断出很多性能问题。
 

posted on 2013-12-02 19:51  潦草白纸  阅读(869)  评论(0编辑  收藏  举报

导航