Pages

19 Eylül 2011 Pazartesi

ASM disk ve disk grubu I/O performansının izlenmesi

Oracle 11.2 sürümü ile gelen iostat özelliği ile disk başına okuma ve yazma işlemleri gerek I/O operasyonu olarak gerekse bytes değeri şeklinde listelenebilmektedir.

iostat [-et][--io] [--suppressheader] [--region] [-G diskgroup] [interval]

-e  takısı hata istatistiklerini gösterir (yazma/okuma)
-t  TIMED_STATISTICS değeri TRUE olarak ayarlandıktan sonra saniyenin yüzdesi değerinde toplam I/O zamanını veren zaman bazlı istatistik.
-G  izlenecek disk grubunun adı
-interval   komutun x saniye aralıklarla tekrarı

Pek çok iostat komutu gibi ilk aralıkta çalışma işlemi toplam istatistikleri getirmektedir ve arkadan gelen aralıklar önceki rapordan itibarenki süreyi kapsar.

ASMCMD> iostat -t -G DATA01 5

Group_Name  Dsk_Name                    Reads         Writes        Read_Time     Write_Time
DATA01        DATA01 _CD_00_ED2HCELL12  368823115776  398765133824  15652.064264  115609.999195
DATA01        DATA01 _CD_00_ED2HCELL13  360830513152  399665251328  15293.415546  108496.371997

Group_Name Dsk_Name                 Reads   Writes  Read_Time Write_Time

DATA01     DATA01_CD_00_ED2HCELL12   0.00      0.00  0.00      0.00
DATA0      DATA01_CD_00_ED2HCELL13   0.00   6553.60  0.00      0.00

Bu bilgi V$ASM_DISK_IOSTAT görünümünden de çıkarılmaktadır.

ASM disk grubu I/O istatistikleri

Bunun yanınd ASM disk grup performansını gözlemlemek için V$ASM_DISKGROUP_STAT ve V$ASM_DISK_STAT görünümleride kullanılabilmektedir.

Eğer ASM deposu kümelenmişse(RAC veritabanındaki gibi) GV$ASM_DISK_STAT görünümüyle ASM diskleri paylaşan tüm cluster sunucularından istatistikler toplanır; V$ASM_DISK_STAT görünümü sadece bağlı olduğu sunucu ile ilgili ASM istatistiklerini toplamaktadır. Aşağıdaki örnekte GV$ASM_DISK_STAT görünümü ile ASM disk grup IO istatistikleri görüntülenmektedir:

SQL> SELECT name, ROUND(total_mb / 1024) total_gb, active_disks,
reads / 1000 reads1k, writes / 1000 writes1k,
ROUND(read_time) read_time, ROUND(write_time) write_time,
ROUND(read_time * 1000 / reads, 2) avg_read_ms
FROM v$asm_diskgroup_stat dg
JOIN
      (SELECT group_number, COUNT(DISTINCT disk_number)
active_disks,
SUM(reads) reads, SUM(writes) writes,
SUM(read_time) read_time, SUM(write_time)
write_time
FROM gv$asm_disk_stat
WHERE mount_status = 'CACHED'
GROUP BY group_number) ds
ON (ds.group_number = dg.group_number)
ORDER BY dg.group_number;

Diskgroup   Size   Active  Reads Writes Read Time Write Time Avg Read
Name         GB    Disks  /1000  /1000  Secs      Secs          ms
------------ ----- ------ ------ ------ --------- ---------- --------
DATA01       155        3 13,178  1,007    68,032    27,080       5.16
DATA02        94        2 62,913    921   132,546     6,574       2.11
DATA03        72        7 890       141    13,011     3,571      14.62

Disk grubu istatistiklerine bakmanın ana sebeplerinden birisi mevcut disk gruplarının IO taleplerine yeterli gelip gelmediğinin gözlemlenmesidir.Eğer disk grubuna yetersiz sayıda disk tahsis edilmişse, muhtemelen yüksek ortalama servis süresi görülecektir.Yukardaki örnekte en son disk grubu oldukça yüksek servis süresine maruz ka ve daha fazla disk gerekmektedir.

ASM disk I/O istatistikleri

IO nun ASM disk seviyesinde incelenmesi grup içinde dengesizlik olup olmadığının belirlenmesine yardımcı olabilmektedir. ASM, veriyi disk grubundaki tüm diskler üzerinde dağıtır. Aşağıdaki sorgu farklı boyutlardaki disklerin disk gruplarını göstermektedir. ASM, blokları diskler üzerinde boyutlarına orantılı olarak tahsis etmektedir ve böylece daha büyük diskler daha yüksek IO ile servis vermekte ve bozulmuş cevap süreleri vermektedir. /dev/sdh2 diski aşağıdaki örnekte yaklaşık %56 lık I/O dan sorumludur, cevap süresi buna paralel olarak bozulmuştur:

SQL> SELECT d.PATH disk_path, d.total_mb,
ROUND(ds.read_secs * 1000 / ds.reads, 2) avg_read_ms,
ds.reads/1000 + ds.writes/1000 io_1k,
ds.read_secs +ds.write_secs io_secs,
ROUND((d.reads + d.writes) * 100 /
SUM(d.reads + d.writes) OVER (),2) pct_io,
ROUND((ds.read_secs +ds.write_secs)*100/
SUM(ds.read_secs +ds.write_secs) OVER (),2) pct_time
FROM v$asm_diskgroup_stat dg
JOIN v$asm_disk_stat d ON (d.group_number = dg.group_number)
JOIN (SELECT group_number, disk_number disk_number,
SUM(reads) reads,
SUM(writes) writes, ROUND(SUM(read_time), 2)
read_secs,
ROUND(SUM(write_time), 2) write_secs
FROM gv$asm_disk_stat
WHERE mount_status = ‘CACHED’
GROUP BY group_number, disk_number) ds
ON (ds.group_number = d.group_number
AND ds.disk_number = d.disk_number)
WHERE dg.name = ‘&diskgroup_name’
AND d.mount_status = ‘CACHED’
ORDER BY d.PATH;

Enter value for diskgroup_name: DATA

                     Avg Read         IO      IO       Pct      Pct
Disk Path         MB        (ms)    /1000   seconds    IO       Time
--------------- --------- -------- -------- -------- -------  -------
/dev/sdb1         2,000      10.80    34       494     2.98      2.28
/dev/sdc2         2,500       6.15    13       113     1.11       .52
/dev/sde3         1,000       8.73    21       247     1.80      1.14
/dev/sdg1         3,000       8.35    69       812     6.07      3.75
/dev/sdh2        43,617      19.63    783    13,219    55.85     60.36

Bunun yanında ASM performans izleme ile ilgili aşağıdaki Metalink notlarıda oldukça faydalıdır.

·         ASMIOSTAT Script to collect iostats for ASM disks (Doc ID 437996.1)
·         How To Identify If A Disk/Partition Is Still Used By ASM, Has Been Used by ASM Or Has Not Been Used by ASM (Unix/Linux)? (Doc ID 603210.1)
·         How to identify files with imbalanced allocation in an ASM diskgroup (Doc ID 818171.1)
·         How To Trace ASMCMD on Unix (Doc ID 824354.1)

2 yorum:

  1. Çok faydalı bir yazi, tesekkurler.
    Artık sistem/storage admin'lerine karsi DBA'lerin de elinin kuvvetli olması gerekiyor :)

    YanıtlaSil