磁盘过载情况的案例分析

可以标识过载的磁盘以及驻留在那些磁盘上的数据库空间。 找出超负荷的磁盘后,即可更正该问题。

以下案例分析说明了一种磁盘过载的情况。此案例分析显示了根据用户提供的初始报告离析症状和找出问题时所需采取的步骤,还描述了所需的更正方法。

不具有所需吞吐量的数据库应用程序将受到检查,以便确定如何提高性能。操作系统监视工具表明,很大一部分进程时间都处于等待 I/O 的闲置状态。数据库服务器管理员增加了 CPU VP 数量,使更多的处理器可用于处理并发 I/O。 但是不会增加吞吐量,这表明一个或多个磁盘已超负荷。

要验证 I/O 瓶颈,数据库服务器管理员必须标识过载的磁盘以及驻留在这些磁盘上的数据库空间。

要标识过载的磁盘以及驻留在那些磁盘上的数据库空间,请执行以下操作:

  1. 要检查异步 I/O (AIO) 队列,请使用 onstat -g ioq图 1 显示了输出。

    图: onstat -g ioq 选项的输出

    AIO I/O queues:
    q name/id    len maxlen totalops  dskread dskwrite  dskcopy
    opt   0      0      0        0        0        0        0
    msc   0      0      0        0        0        0        0
    aio   0      0      0        0        0        0        0
    pio   0      0      1        1        0        1        0
    lio   0      0      1      341        0      341        0
    gfd   3      0      1      225        2      223        0
    gfd   4      0      1      225        2      223        0
    gfd   5      0      1      225        2      223        0
    gfd   6      0      1      225        2      223        0
    gfd   7      0      0        0        0        0        0
    gfd   8      0      0        0        0        0        0
    gfd   9      0      0        0        0        0        0
    gfd  10      0      0        0        0        0        0
    gfd  11      0     28    32693    29603     3090        0
    gfd  12      0     18    32557    29373     3184        0
    gfd  13      0     22    20446    18496     1950        0
    

    图 1 中,maxlentotalops 两列显示了重要的结果:

    • maxlen 列显示了在队列中积累的 I/O 请求的最大储备。最后的三个队列比此列列表中的任何其他队列长得多。
    • totalops 列显示了通过最后三个队列完成的 I/O 操作比此列列表中其他任何队列多 100 倍以上。

    maxlentotalops 列显示 I/O 负载严重失衡。

    检查 I/O 活动的另一方法是使用 onstat -g iov。此选项对所有 VP 的显示稍欠详细。

  2. 要检查与每个队列关联的每个磁盘设备的 AIO 活动,请使用 onstat -g iof,如图 2 所示。

    图: onstat -g iof 选项的部分输出

    gfd pathname         bytes read     page reads  bytes write    page writes io/s
    3  /dev/infx5      85456896       41727       207394816      101267      572.9
    	op type     count          avg. time
    	seeks       0              N/A
    	reads       13975          0.0015
    	writes      51815          0.0018
    	kaio_reads  0              N/A
    	kaio_writes 0              N/A

    根据您的大块是如何安排的,几个队列可与同一设备相关联。

  3. 要确定说明 I/O 负载的数据库空间,请使用 onstat -d,图 3 显示。

图: onstat -d 选项的输出

   Dbspaces
   address  number   flags    fchunk   nchunks  flags    owner    name
      c009ad00 1        1        1        1        N        gbasedbt rootdbs
      c009ad44 2        2001     2        1        N T      gbasedbt tmp1dbs
      c009ad88 3        1        3        1        N        gbasedbt oltpdbs
      c009adcc 4        1        4        1        N        gbasedbt histdbs
      c009ae10 5        2001     5        1        N T      gbasedbt tmp2dbs
      c009ae54 6        1        6        1        N        gbasedbt physdbs
      c009ae98 7        1        7        1        N        gbasedbt logidbs
      c009aedc 8        1        8        1        N        gbasedbt runsdbs
      c009af20 9        1        9        3        N        gbasedbt acctdbs
        9 active, 32 total
   
   Chunks
   address  chk/dbs offset   size     free     bpages   flags pathname
      c0099574 1   1   500000   10000    9100              PO-   /dev/infx2
      c009960c 2   2   510000   10000    9947              PO-   /dev/infx2
      c00996a4 3   3   520000   10000    9472              PO-   /dev/infx2
      c009973c 4   4   530000   250000   242492            PO-   /dev/infx2
      c00997d4 5   5   500000   10000    9947              PO-   /dev/infx4
      c009986c 6   6   510000   10000    2792              PO-   /dev/infx4
      c0099904 7   7   520000   25000    11992             PO-   /dev/infx4
      c009999c 8   8   545000   10000    9536              PO-   /dev/infx4
      c0099a34 9   9   250000  450000    4947              PO-   /dev/infx5
      c0099acc 10  9   250000  450000    4997              PO-   /dev/infx6
      c0099b64 11  9   250000  450000    169997            PO-   /dev/infx7
        11 active, 32 total

“块”输出中,路径名列指示了磁盘设备。chk/dbs 列显示驻留在每个磁盘上的大块和数据库空间的数量。在此案例中,每个过载的磁盘上只定义了一个大块。每个大块都与数据库空间编号 9 相关联。

“数据库空间”输出显示与每个数据库号相关联的数据库空间的名称。在此案例中,所有三个过载的磁盘都是 acctdbs 数据库空间的一部分。

尽管原始的磁盘配置将三个完整的磁盘都分配给 acctdbs 数据库空间,但是该数据库空间中的活动表明三个磁盘是不够的。由于三个磁盘上的负载大致相同,因此不大可能是表的布局不合理或者分段不恰当。不过,您可以将其他磁盘上的分段添加到此数据库空间中的一个或多个大型表中,也可以将一些表移动到其他负载较少的磁盘上,从而获取更好的性能。