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
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)
Çok faydalı bir yazi, tesekkurler.
YanıtlaSilArtık sistem/storage admin'lerine karsi DBA'lerin de elinin kuvvetli olması gerekiyor :)
Evet aynen öyle :))
YanıtlaSil