引起数据库性能问题的原因也有很多,本节主要讲的是当数据库发生性能故障时笔者的分析思路,以及收集现场数据的方法。只有准确地收集到了现场数据,才能快速找到故障原因。
1.4.1 性能类故障的处理思路
处理数据库性能类故障时,笔者喜欢自上而下的分析方法,即先宏观地了解系统状况,然后再具体问题具体分析。以下为分析思路:
(1)了解主机的硬件情况,业务系统的拓扑架构,了解业务最近是否发生了变动。
(2)登录到主机,查看主机的资源消耗情况,主要使用top、vmstat、iostat等常见的操作系统命令。观察主机资源的消耗情况时主要查看是否因CPU资源耗尽而产生了大量的运行队列、是否因I/O资源耗尽而产生了大量的阻塞队列,以及是否因内存资源耗尽而产生了大量的系统交换。此外还需观察是否存在消耗比较多的操作系统资源的业务进程,如果存在,则使用以下命令跟踪这些客户端进程,观察SQL的执行计划:
SQL> oradebug setospid xxx;
SQL> oradebug unlimit;
SQL> oradebug event 10046 trace name context forever, level 12;
SQL> oradebug event 10046 trace name context off;