İçindekiler
Performans testleri sırasında, sonuçları etkileyen birçok parametre vardır. Hardware özellikleri, (varsa) network hızı, işletim sistemi vs. Bir bütün olarak bütün bu parametreler önem kazanıyor.
İşte, bunlardan biri de harddisk okuma/yazma(disk I/O) hızıdır. Sonuçları iyi yorumlayabilmek adına, normal şartlarda diskin I/O değerlerini bilmemiz önemlidir.
Depolama satıcıları, ürünleri üzerinde sonsuz miktarda performans verisi sunar, ancak bilgiler, bir Oracle veritabanı tarafından kullanıldığında, depolamanın nasıl performans göstereceğini yansıtmaz. Burada, işletim sistemi seviyesinde ve Oracle tarafından sağlanan bazı yardımcı programlar da dahil olmak üzere depolama sistemlerinizin performansını test etmek için birkaç yoldan bahsedeceğiz.
NOT : Oracle araçları (utilities), Oracle veritabanı tarafından gerçekleştirilen işlem türlerini taklit etmek için benzetilmiş bir yük kullanır. Uygulamalarınızın ürettikleri performans seviyesini başarabileceklerinin garantisi yoktur.
Disk performans testleri, buffer ve gerçek disk hızı olarak ayrılmaktadır. Buffer ön belleğin verdiği tepki süresidir. Gerçek disk hızı ise, diskinizin fiziksel olarak yazma / okuma işlemlerine verdiği tepki süresidir. İşleme başlangıç süresi, işlemi bitirme süresi ve işlemin disk boyutu olarak kriterler bulunmaktadır.
Biz bu yazımızda disk performansını ölçmek için aşağıdaki araçları sırayla kullanacağız.
- dd
- hdparm
- ORION
- CALIBRATE_IO
dd komutu
Bir disk aygıtının Linux ve Unix benzeri bir sistemdeki yazma performansını izlemek için kullanılır.
Modern işletim sistemleri normalde derhal RAID sistemlerine veya sabit disklere dosya yazılmaz. Şu anda kullanımda olmayan temporary memory, yazma ve okumaları cache’e almak için kullanılacaktır. Bu nedenle I/O performans ölçümlerinde cacheden etkilenmeyecek şekilde yapılması daha doğru olur, bunuda dd komutunda oflag=dsync parametresi ile yapabiliriz.
[root@cloud-12c ~]# time sh -c "dd if=/dev/zero of=dd-test-file bs=8k count=1000000 oflag=dsync" 1000000+0 records in 1000000+0 records out 8192000000 bytes (8.2 GB) copied, 1532.25 s, 5.3 MB/s real 25m32.259s user 0m2.544s sys 4m8.520s
dd ile kullanılan ve kullanabileceğimiz parametereler aşağıdakiler gibidir;
- if : Verileri kopyalamak istediğiniz yerden bir kaynaktır ve ‘if^’, ‘input file’ anlamına gelir
- of :Veriyi yazmak/yapıştırmak istediğiniz yerdir ve ‘of’, ‘output file’ anlamına gelir
- bs : block boyutudur. Blok boyutunu belirtmezseniz, dd varsayılan bir blok boyutunu 512 bayt kullanır
- count : bs ile boyutları belirtilen bloklardan kaç adet kopyalanacağı
- oflag = dsync (oflag=dsync): Veriler için senkronize I/O kullanın. Bu seçenek vmfs önbelleğe alma işleminden kurtulmanızı sağlar ve size iyi ve doğru sonuçlar verir
- conv = fdatasyn: Yine, bu, dd’ye çıkmadan hemen önce bir kez tam bir “senkronizasyon” gerektirmesini söyler. Bu seçenek oflag = dsync’e eşdeğerdir.
[root@cloud-12c ~]# time sh -c "dd if=/dev/zero of=dd-test-file bs=8k count=1000000 && sync" 1000000+0 records in 1000000+0 records out 8192000000 bytes (8.2 GB) copied, 72.5792 s, 113 MB/s real 1m24.157s user 0m0.393s sys 0m28.039s [root@cloud-12c ~]# ls -ltrh dd-test-file -rw-r--r--. 1 root root 7.7G Jan 30 15:48 dd-test-file
Linux sistemler üzerinde iki farklı çeşit okuma özelliği mevcuttur. Birincisi disk üzerinde yapılan ve tekrarlanan işlemlerin daha hızlı tekrarlanması açısından ön belleğe (buffer) alınıp, bellekten daha hızlı okunmasıdır. Diğer ikinci bir okuma işlemi ise fiziksel diskimize yazılan verilerin okunması işlemidir.
[root@cloud-12c ~]# dd if=dd-test-file of=/dev/null bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 0.535511 s, 2.0 GB/s
Yukardaki komutu verdikten sonra çıktısı aşağıdaki gibi olabilir en sonda yer alan 2.0 GB/s sizin diskinizin saniyede okuyabildiği ön bellek miktarıdır.
Linux sunucular üzerinde diskinizin fiziksel (gerçek) olarak okuma hızını ölçmek için aşağıdaki komutları sırasıyla vermeniz yeterlidir.
/sbin/sysctl -w vm.drop_caches=3 [root@cloud-12c ~]# dd if=dd-test-file of=/dev/null bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 3.27164 s, 328 MB/s
Sunucumuz saniyede 328 MB okuyabilmektedir.
hdparm
Hdparm ile de aşağıdaki gibi disk I/O’yu ölçeriz.
hdparm -Tt /dev/sda /dev/sda: Timing cached reads: 16924 MB in 2.00 seconds = 8469.95 MB/sec Timing buffered disk reads: 1386 MB in 3.00 seconds = 461.50 MB/sec
ORION
ORION (Oracle IO Numbers), Oracle veritabanları tarafından gerçekleştirilen I/O türünü taklit eder; bu da, Oracle’ı yüklemeden depolama sistemleri için I/O performansını ölçmenize olanak tanır. OTN’den çok sayıda platform için indirmeye hazırdı, ancak bu indirme işlemi artık mümkün değil. Bunun yerine, Grid Infrastructure (GI) ve veritabanı kurulumlarının “$ORACLE_HOME/ bin” dizinine dahil edildi.
Kullanım bilgileri aşağıdaki komutla görüntülenir.
$ORACLE_HOME/bin/orion -help
Testi yapmak için Oracle için kullanacağınız LUN’ları bilmeniz gerekir.
mkdir /luns dd if=/dev/zero of=/luns/lun1 bs=1024k count=10 dd if=/dev/zero of=/luns/lun2 bs=1024k count=10 dd if=/dev/zero of=/luns/lun3 bs=1024k count=10 dd if=/dev/zero of=/luns/lun4 bs=1024k count=10
Ardından, LUN yapılandırmasını tutmak için bir dosya oluşturun. Dosyanın geçerli dizinde mevcut olduğu varsayılmaktadır.
cat ob-test.lun /luns/lun1 /luns/lun2 /luns/lun3 /luns/lun4
Sonra test yapacağız. Bir dizi küçük I/O işleminin (8K) performansını, büyük I/O işlemlerinin (1M) ile karşılaştırmak için tam bir grid testi yapacağım. Çalışmayı “normal” seçeneğini kullanarak yapmak uzun zaman alabilir, bu yüzden önce “basic” seçeneğini kullanmayı deneyebilirsiniz.
$ORACLE_HOME/bin/orion -run normal -testname ob-test
ORION: ORacle IO Numbers -- Version 12.1.0.2.0
ob-test_20140828_1804
Calibration will take approximately 190 minutes.
Using a large value for -cache_size may take longer.
Maximum Large MBPS=1672.01 @ Small=0 and Large=2
Maximum Small IOPS=16262 @ Small=13 and Large=1
Small Read Latency: avg=796 us, min=111 us, max=4927 us, std dev=254 us @ Small=13 and Large=1
Minimum Small Latency=148 usecs @ Small=1 and Large=0
Small Read Latency: avg=148 us, min=0 us, max=82630 us, std dev=209 us @ Small=1 and Large=0
Small Read / Write Latency Histogram @ Small=1 and Large=0
        Latency:                # of IOs (read)          # of IOs (write)
        0 - 1           us:             18                      0
        2 - 4           us:             0                       0
        4 - 8           us:             0                       0
        8 - 16          us:             3                       0
       16 - 32          us:             4                       0
       32 - 64          us:             5                       0
       64 - 128         us:             64513                   0
      128 - 256         us:             325674                  0
      256 - 512         us:             5759                    0
      512 - 1024        us:             139                     0
     1024 - 2048        us:             21                      0
     2048 - 4096        us:             3                       0
     4096 - 8192        us:             1                       0
     8192 - 16384       us:             0                       0
    16384 - 32768       us:             1                       0
    32768 - 65536       us:             0                       0
    65536 - 131072      us:             3                       0
   131072 - 262144      us:             0                       0
   262144 - 524288      us:             0                       0
   524288 - 1048576     us:             0                       0
  1048576 - 2097152     us:             0                       0
  2097152 - 4194304     us:             0                       0
  4194304 - 8388608     us:             0                       0
  8388608 - 16777216    us:             0                       0
 16777216 - 33554432    us:             0                       0
 33554432 - 67108864    us:             0                       0
 67108864 - 134217728   us:             0                       0
134217728 - 268435456   us:             0                       0
#
Testin tamamlanmasının ardından, ORION çalıştırılabilir dizininin bulunduğu dizin, her test için toplanan IOPS, MBPS ve gecikme hakkında bilgiler içeren birkaç yeni dosya içerecektir. İşte bu çalışma tarafından üretilen dosyalar.
ob-test_20140828_1804_summary.txt ob-test_20140828_1804_iops.csv ob-test_20140828_1804_mbps.csv ob-test_20140828_1804_lat.csv ob-test_20140828_1804_trace.txt ob-test_20140828_1804_hist.txt
DBMS_RESOURCE_MANAGER.CALIBRATE_IO
Oracle Database 11g Sürüm 1’de sunulan CALIBRATE_IO prosedürü, Oracle’ın içinden depolama sisteminin yetenekleri hakkında bir fikir verir. Prosedürle ilgili birkaç kısıtlama var.
- Prosedür, SYSDBA ayrıcalığına sahip bir kullanıcı tarafından çağrılmalıdır.
- TIMED_STATISTICS true olarak ayarlanmalıdır, varsayılan olarak STATISTICS_LEVEL TYPICAL olarak ayarlanır.
- Data file lara, asynchronous I/O kullanarak erişilmesi gerekir. ASM kullanıldığında varsayılan değer budur.
Aşağıdaki sorgu kullanarak mevcut asenkron I / O ayarlarınızı veri dosyalarınız için kontrol edebilirsiniz.
SELECT d.name,
       i.asynch_io
FROM   v$datafile d,
       v$iostat_file i
WHERE  d.file# = i.file_no
AND    i.filetype_name  = 'Data File';
NAME                                               ASYNCH_IO
-------------------------------------------------- ---------
/u01/app/oracle/oradata/DB11G/system01.dbf         ASYNC_OFF
/u01/app/oracle/oradata/DB11G/sysaux01.dbf         ASYNC_OFF
/u01/app/oracle/oradata/DB11G/undotbs01.dbf        ASYNC_OFF
/u01/app/oracle/oradata/DB11G/users01.dbf          ASYNC_OFF
/u01/app/oracle/oradata/DB11G/example01.dbf        ASYNC_OFF
Asynchronous I/O’yu açmak için aşağıdaki komutu verin ve veritabanını yeniden başlatın.
ALTER SYSTEM SET filesystemio_options=setall SCOPE=SPFILE;
Depolama biriminizin asynchronousI/O’yu desteklemesi koşuluyla, ASYNC_IO bayrağı şimdi değişmiş olmalıydı.
SELECT d.name,
       i.asynch_io
FROM   v$datafile d,
       v$iostat_file i
WHERE  d.file# = i.file_no
AND    i.filetype_name  = 'Data File';
NAME                                               ASYNCH_IO
-------------------------------------------------- ---------
/u01/app/oracle/oradata/DB11G/system01.dbf         ASYNC_ON
/u01/app/oracle/oradata/DB11G/sysaux01.dbf         ASYNC_ON
/u01/app/oracle/oradata/DB11G/undotbs01.dbf        ASYNC_ON
/u01/app/oracle/oradata/DB11G/users01.dbf          ASYNC_ON
/u01/app/oracle/oradata/DB11G/example01.dbf        ASYNC_ON
5 rows selected.
Şimdi aşağıdaki kodu çalıştırarak prosedürü çağırabilirsiniz.
CONN / AS SYSDBA
SET SERVEROUTPUT ON
DECLARE
  l_latency  PLS_INTEGER;
  l_iops     PLS_INTEGER;
  l_mbps     PLS_INTEGER;
BEGIN
   DBMS_RESOURCE_MANAGER.calibrate_io (num_physical_disks => 1, 
                                       max_latency        => 20,
                                       max_iops           => l_iops,
                                       max_mbps           => l_mbps,
                                       actual_latency     => l_latency);
 
  DBMS_OUTPUT.put_line('Max IOPS = ' || l_iops);
  DBMS_OUTPUT.put_line('Max MBPS = ' || l_mbps);
  DBMS_OUTPUT.put_line('Latency  = ' || l_latency);
END;
/
Max IOPS = 95
Max MBPS = 449
Latency  = 20
PL/SQL procedure successfully completed.
Ekranda görünmeye ek olarak, calibration çalışmasının sonuçları DBA_RSRC_IO_CALIBRATE viewi kullanılarak görüntülenebilir.
SET LINESIZE 100
COLUMN start_time FORMAT A20
COLUMN end_time FORMAT A20
SELECT TO_CHAR(start_time, 'DD-MON-YYY HH24:MI:SS') AS start_time,
       TO_CHAR(end_time, 'DD-MON-YYY HH24:MI:SS') AS end_time,
       max_iops,
       max_mbps,
       max_pmbps,
       latency,
       num_physical_disks AS disks
FROM   dba_rsrc_io_calibrate;
START_TIME           END_TIME               MAX_IOPS   MAX_MBPS  MAX_PMBPS    LATENCY      DISKS
-------------------- -------------------- ---------- ---------- ---------- ---------- ----------
20-JUL-010 18:07:21  20-JUL-010 18:13:55          95        449        461         20          1
https://kevinclosson.net/2012/02/06/introducing-slob-the-silly-little-oracle-benchmark/
https://oracle-base.com/articles/misc/measuring-storage-performance-for-oracle-systems
https://www.databasejournal.com/features/oracle/oracles-calibrateioprocedure-why-youshould-use-it.html
https://www.cyberciti.biz/faq/howto-linux-unix-test-disk-performance-with-dd-command/
Mustafa Bektaş Tepe
İyi Çalışmalar
 
 
 
 
 
 
 
          
    
    
          
   
 
	
 
 
  Twitter
 Twitter Facebook
 Facebook Google
 Google Email
 Email Skype
 Skype LinkedIn
 LinkedIn