Birden fazla diski olan sistemlerde datafileların yoğunluğuna göre aktif (çok kullanılan) tabloları ve indexleri, veritabamızdaki tablespacelere dengeli olarak dağıtmak için datafileların ne kadar aktif kullanıldığını bilmekte yarar var.
Oracle bu bilgileri alabilmemiz için V$FILESTAT dinamik viewini sunar. V$FILESTAT, datafilelardaki fiziksel okuma ve yazma sayısını, okunan ve yazılan blok sayını ve okuma ve yazma işlemlerinin toplam ne kadar süre aldığı bilgilerini tutar:
SQL> SELECT * FROM V$FILESTAT;
Bu sorgu bize datafileların isimleri yerine numaralarını döndürecektir. Sorgunun döndürdüğü sonucunu daha yalın ve okunaklı hale getirebilmek için V$DATAFILE görünümünde datafile isimlerini sorguya ekleyebiliriz:
SQL> SELECT name, phyrds, phywrts FROM V$DATAFILE, V$FILESTAT WHERE V$DATAFILE.file# = V$FILESTAT.file#;
Ben V$FILESTAT görünümündeki en önemli iki veri olan PHYRDS ve PHYWRTS’ı çekmeyi yeterli buldum. PHYRDS, datafile’dan yapılan okuma sayısını, PHYWRTS ise datafile’a yapılan yazma sayısını gösterir. Bu iki değeri toplayarak toplam IO sayısını elde edebilirsiniz:
SQL> SELECT name “Datafile”, phyrds “Okuma”, phywrts “Yazma”, phyrds + phywrts “Toplam IO” FROM V$DATAFILE, V$FILESTAT WHERE V$DATAFILE.file# = V$FILESTAT.file#;
Bu değerlere bakarak veritabanızda en aktif datafileları bulup, gerekirse onları farklı disklere taşıyabilir ve daha yüksek IO performansı elde edebilirsiniz. Eğer bu mümkün değilse, IO dağılımını iyileştirmek için veritabanınızda çok kullanılan tabloları ve indexleri, farklı disklerde bulunan tablespacelere (dolayısı ile farklı datafilelara) taşıyabilirsiniz. Eğer veritabanınızda en çok okuma/yazma işlemi yapılan tablo ve indexleri bilmiyorsanız, şu sorguyu kullanabilirsiniz:
SQL> SELECT owner || ‘.’ || object_name, SUM (VALUE)
FROM v$segment_statistics
WHERE statistic_name IN (‘physical reads’, ‘physical writes’)
AND tablespace_name NOT IN (‘SYSTEM’, ‘SYSAUX’)
GROUP BY owner || ‘.’ || object_name
ORDER BY 2 DESC;


25 Ocak 2009
Oracle