技术开发 频道

调优DB2 v8.1及其数据库的非常好的实践

利用率和瓶颈

下面指出处于 DB2 调优领域之外的一些潜在的问题,这些问题同样能大大降低数据库的性能。

CPU 利用率

如果一个系统中 CPU 的总利用率(用户 + 系统)大于 80%,则认为该系统是 CPU 限制的(CPU bound)。经验法则是,保持 CPU 利用率(大部分情况下)低于 80%,这样可以为处理突然增加的大量活动预留 CPU 的处理能力。如果系统是 CPU 限制的,那么就很难总结出问题所在。这可以是从无效率的访问计划到需要更多 CPU 资源的并发连接过多的任何问题。

在 Unix 中,用 vmstat (例如 "vmstat 3")进行监视。在 Windows 中,用 Perfmon.exe 或 Task Manager 进行监视。忽略在遇到短的突发事件(1-3 秒)时 100% 运行的 CPU,而关注长期的平均 CPU 利用情况。

清单 19展示了来自 RedHat 8.0 Linux 的某个输出,其中重要的列用粗体强调。您需要观察的列是用户 CPU 利用率(us)和系统 CPU 利用率(sy)。id 列显示了空闲时间。每次都应该忽略掉第一行。这里我们看到的系统有相当高的用户 CPU 利用率,而系统利用率则一般。

清单 19. 示例 vmstat 输出

[db2inst1@65658161 db2inst1]$ vmstat 3
   procs                      memory    swap          io     system         
        cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    
        cs  us  sy  id
 0  0  0      0 704388  65460 165592   0   0     0    21   20     9  
         2   2   6
 0  1  1      0 642096  65660 206060   0   0   515  2149  911  1047  
        18   9  72
 2  1  0      0 639712  65668 208292   0   0   139  2287  862   938  
        30  10  60
 1  0  0      0 629772  65692 215496   0   0     0   581  568   422  
        94   1   4
 1  0  0      0 625764  65696 218956   0   0     0  1809  612   423  
        91   1   8
 1  0  0      0 623752  65704 220752   0   0    11  1741  712   549  
        85   8   7
 0  0  0      0 633548  65712 217768   0   0    11  1264  728   700  
        17   4  79
 1  0  0      0 633556  65712 217768   0   0     0    87  621   280  
         5   7  88
 0  0  0      0 633556  65712 217768   0   0     0     0  519   150  
         0   0 100
 1  0  0      0 633556  65712 217768   0   0     0     0  523   154  
         0   0 100
      

 

高的 CPU 利用率有时候要归因于对大型表的过度表扫描或索引扫描。通过分析 "rows read"值(在 SQL 快照中)很高的 SQL 语句,寻找建立索引的可能性。

还可以在进程级上进行监视,以更好地了解是什么正在消耗 CPU。在 UNIX 上用 ps (例如 "ps uax")进行监视,在 Windows 则用 Perfmon.exe 或 Task Manager 进行监视。忽略掉突发的(1 到 3 秒)100% 利用率的情况,只关注长期的平均值。

例如,在 RedHat Linux 8.0 上,我们可以通过发出 "ps uax" 查看每个进行占用多少的 CPU:

清单 20. 示例 ps 输出

[db2inst1@65658161 tmp]$ ps uax
user       PID 
        %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
db2inst1  9967 
         0.0  2.5 123416 26620 ?      S    Feb15   0:00 db2agent (idle)
db2inst1 10020 
         2.1  7.4 435200 76952 ?      R    Feb15   2:12 db2agent (TEST1)
db2inst1  3643 
         0.1  3.9 249544 41220 ?      S    13:17   0:00 db2loggw (TEST1)
db2inst1  3649 
         0.0  4.0 249540 41320 ?      S    13:17   0:00 db2pclnr
      

 

磁盘利用率

如果一个系统中磁盘利用率一般超过 45%,则认为该系统是 I/O 限制的。如果存在磁盘瓶颈,那么应确保表空间的容器分布在所有可用磁盘上。如果磁盘利用率仍然很高,那么很可能就需要更多的磁盘。

不幸的是,取决于所使用的操作系统,iostat 有不同格式的输出。在 UNIX 中,用 iostat (例如 "iostat 3")进行监视,而在 Windows 中则用 Perfmon.exe 进行监视。忽略掉突发(1-3 秒)的利用率 100% 的情况,只关注长期的平均利用率。

如果使用的是 Linux 操作系统,则使用 "iostat –d –x 3" 命令以便支持扩展的磁盘信息,并寻找服务时间大于 50 ms(svctm)的磁盘,以及利用率超过 45% 的磁盘。由于格式的关系,下面的输出中省略了某些数据列。

清单 21. 示例 iostat 输出

[db2inst1@65658161 tmp]$ iostat -d -x 3
Linux 2.4.18-14 (65658161.torolab.ibm.com)      02/18/2004
Device:     r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s  await 
         svctm  %util
/dev/hda   0.01  2.25    0.19   41.81     0.09    20.91   0.60 
          1.88   0.42
/dev/hda1  0.00  0.00    0.00    0.00     0.00     0.00 277.20 
        176.86   0.00
/dev/hda2  0.00  0.00    0.00    0.00     0.00     0.00   4.11 
          4.11   0.00
/dev/hda3  0.01  2.25    0.19   41.81     0.09    20.91   0.58 
          0.66   0.15
Device:     r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s  await 
         svctm  %util
/dev/hda   0.00 383.67   0.00 5632.00     0.00  2816.00   8.10 
          1.35  51.97
/dev/hda1  0.00  0.00    0.00    0.00     0.00     0.00   0.00 
          0.00   0.00
/dev/hda2  0.00  0.00    0.00    0.00     0.00     0.00   0.00 
          0.00   0.00
/dev/hda3  0.00 383.67   0.00 5632.00     0.00  2816.00   8.10 
          2.16  82.93
      

 

内存和调页空间的利用率

从 DB2 的角度来看,如果一个系统发生了换页,则称该系统是内存限制的(memory bound) 的。一旦开始换页,性能通常就会急剧下降。

在 UNIX 中,使用 "lsps 鈥揳" 列出调页空间的特征,并且用 vmstat (例如 "vmstat 3")进行监视。在 Windows 中,用 Perfmon.exe 或 Task Manager 进行监视。

例如,在 RedHat Linux 8.0 中,您需要注意交换(swap)信息。特别地,换入(si)和换出(so)列显示了从磁盘换入内存的空间大小和从内存换出到磁盘的空间大小,以 KB/sec 为单位(在 AIX 上是以 4K pages/sec 为单位的)。

清单 22. 示例 iostat 输出

[db2inst1@65658161 tmp]$ vmstat 3
   procs                      memory  
          swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  
        si  so    bi    bo   in    cs  us  sy  id
 0  0  0      0 675160  66088 175908  
         0   0     0    21   22     9   2   2   6
 0  0  0      0 675096  66088 175908  
         0   2     0    37  624   246   5   7  88
 2  0  0      0 665376  66088 183408  
         0   0    11    88  666   826   6   8  85
 1  0  0      0 665376  66088 183408  
         1   0     0    76  623   452   5   8  88
 2  0  0      0 654748  66096 191112  
         0   0    79    48  619   847   2   4  94
 3  0  0      0 652760  66096 191192  
         0   0    15    47  578   791   2   2  96
      

 

网络利用率

虽然通常网络不是一个重大的瓶颈,但在这方面进行某些调优也可以提高性能。如果一个系统的 CPU 和 I/O 利用率都很低,则认为该系统是网络限制的(Network bound),并且在通过网络与 DB2 服务器进行通信时存在性能问题。在一个分了区的数据库中,如果分区策略产生了一些非合并连接,则可能导致最严重的性能下降。

在 UNIX 中可以用 netpmon (例如 "netpmon -O all -o netpmon.out")进行监视,在 Windows 中可以用 Perfmon.exe 进行监视。

0
相关文章