
上一篇说过,ORACLE性能优化是一个非常复杂的过程,因为这个过程涉及的领域很多:网络、存储、操作系统等等。有人指望从论坛、技术文档那里获得帮助。一定程度上,谷歌确实可以减轻手头的工作,甚至可以直接解决你的问题,但是你们面对的的案例背景是不同的,你的问题背景包括:不同的数据库版本、不同的操作系统版本、不同的服务器架构......
在完成一系列的操作之初,首要任务是弄清楚问题是什么,不清楚问题,就不知道到底发生了什么?有的人不调查问题,就想着去解决问题。可是在这样的情况下,居然也会有解决方案,如果是这样,那么接下来要发生的事是这样子的:问题可能被临时解决,但是随后又会再现,甚至还会伴随其他的新问题一起出现。
So,How to do it...
1. 制定基线(baseline)
2. 调查问题
3. 制定解决方案、准备测试环境、制定回滚策略
4. 实施解决方案
5. 测试解决方案
6. 比较结果
7. 如果结果不及预期,再寻求其他方案
在第一步中,我们必须制定一个基线,因为如果没有基线做比较,我们将无法知道所采用的解决方案是不是真的解决了我们面临的问题。
比如说一个常见的问题---“响应时间长”,简单暴力的方式是直接给数据库服务器堆新的硬件资源(CPU,RAM),这可能会导致它的响应时间更长。如果有baseline,在加硬件资源之前,可以评估我们正在经历的问题是不是与缺乏足够的硬件资源有关。
要想获得一个好的基线,需要尽可能多的数据;大多数数据可以直接从数据库中获取。还有其他来源的信息:操作系统日志、性能计数器、应用程序日志、跟踪文件、网络统计等。
Oracle数据库可以帮助我们完成这项任务,它提供了不同的工具来监视数据库本身,并测量各种性能指标。下面是从数据库中获取性能数据的不同工具:
1.Data Dictionary and Dynamic Performance Views
Analyze command
Analyze schema and database with DBMS_UTILITY package
2.DBMS_STATS package
3.Statspack report
4.Alert log and trace files
5.Automatic Workload Repository (AWR)
6.Automatic Database Diagnostic Monitor (ADDM)
第三步,当我们有特定的解决方案时,在生产上实施之前,必须列出要做的所有更改,并为这些更改制定一个“回滚策略”。比如,我们需要在表T1上添加索引IX1来解决性能问题,那么必须准备一个SQL脚本来创建索引,并准备另一个SQL脚本来删除索引,以防出现问题时能及时回退。
Oracle数据库的最新版本中有几个自动诊断调优功能;SQL Tuning Advisor, SQL Access Advisor, Automatic Database Diagnostic Monitor. 这些工具都由Oracle提供,他们能够解决一些普通的性能问题,不要完全指望他们,因为他们也有失灵的时候。
常见的数据库性能问题主要在内存、I/O和SQL代码。在确定了性能问题相关的范围后,如前面说的,立刻提出解决方案&回滚策略,然后去实施,实施过程需要相当的谨慎。实施完毕后,将数据库(和应用程序)的性能与实施之前收集的基线进行比较,验证是不是达到预期的性能增益。如果结果说明问题依然存在,那么我们需要从第一步开始重新调查问题,提出解决方案,再实施......
性能调整过程是一个永无止境的循环;因为即使我们从A点解决了性能问题,也有机会从系统的B点再次进行调整以获得更好的性能。





