21 Mart 2013 Perşembe

Linuxda prosesi kill etmek


Bazı durumlarda sistem üzerinde çalışan bir prosesin sonlandırılmasına ihtiyaç duyulabilir.
Bunun için aşağıdaki komutlar kullanılabilir.

//Önce proses aranır

> ps -ef| grep yedek


//sonra ilgili proses id yazılarak sonlandırılır.
> kill -9 pid

4 Mart 2013 Pazartesi

UNDO Parametresinin Optimize Edilmesi

Bu makale ile ORACLE ayrılmaz parçası UNDO muzu nasıl optimize edebiliriz sorusunun cevabını inceliyor olacağız.

Veritabanında oluşan transaction undo bilgileri commit veya rollback yapılana kadar rollback segmentlerinde tutulmaktadır. Bazen veritabanındaki uzun süren sorgularımız “ORA-01555:Snapshot Too Old” hatası ile karşılaşmaktadır. Bu UNDO parametrelerimizin doğru konfigüre edilmediğinden kaynaklanmaktadır.  UNDO_RETENTION parametresiyle, biz veritabanının commit sonrası ne kadar undo verisini tutacağına karar veririz. Bu parametre default 900 sn gelmektedir. Sonradan bu değeri yükseltmek bizim elimizdedir. 900sn(15 dk) değerini yükseltmek doğru orantılı olarak daha fazla space gerektirecektir. Rollback segmentlerini tanımlamak ve yönetmek zahmeti yerine, undo tablespace i oluşturmak ve undo yönetimini oracle a bırakmak oldukça kolaydır. UNDO_MANAGEMENT parametresini AUTOolarak set ettiğinizde ORACLE gerisini kolay bir şekilde halledecektir. “ORA-01555:Snapshot Too Old” hatasından kurtulmanın yolları UNDO_RETENTION parametresi ve UNDO Tablespace büyüklüğünün doğru konfigure edilmesinden geçmektedir. 
Peki UNDO_RETENTION süremiz ne kadar olmalıdır? Bu sorunun cevabı UNDO Tablespace büyüklüğünüzle orantılıdır. UNDO Tablespace için diskinize ve verilerinizin kritikliğine göre bir alan verebilirsiniz. Bu büyüklüğe görede optimum süreyi hesaplayarak UNDO_RETENTIONparametresini set etmelisiniz.
Şimdi biraz matematiksel hesap yapalım. Önce Undo tablespace büyüklüğümüzü aşağıdaki sorgu ile tespit edelim;
SELECT SUM(a.bytes) as UNDO_SIZE
  FROM v$datafile a,
       v$tablespace b,
       dba_tablespaces c
 WHERE c.contents = 'UNDO'
   AND c.status = 'ONLINE'
   AND b.name = c.tablespace_name
   AND a.ts# = b.ts#;
Sonra saniye başına undo block sayısını bulalım;
SELECT MAX(undoblks/((end_time-begin_time)*3600*24)) as UNDO_BLOCK_PER_SECOND
  FROM v$undostat;
Son olarak veritabanı block size ımızı bulalım;
SELECT TO_NUMBER(value) as DB_BLOCK_SIZE
 FROM v$parameter
WHERE name = 'db_block_size';
Şimdi elde ettiğimiz üç sonuca göre optimum UNDO_RETENTION süremizi hesaplayacağız. Kullanacağımız formül şu şekilde;
 UNDO RETENTION TIME=(UNDO SIZE)/(DB BLOCK SIZE × UNDO BLOCK PER SECOND)
 Yukarıda hesapladığımız değerleri bu formülde yerlerine yerleştirdiğimizde optimumUNDO_RETENTION süremizi bulmuş olacağız.
Şimdi olaya tersden bakalım. Yeteri kadar disk yerimiz ve kritik veritabanı işlemlerimiz varsa, commitlenmiş undo verilerimizi tutmak için  UNDO RETENTION süremizi 1 saat (3600 sn) olarak düşünüyorsak optimum UNDO büyüklüğümüzü yukarıda vermiş olduğum formülden yararlanarak hesaplayabiliriz. Bu durumda formülümüz;
UNDO SIZE=UNDO RETENTION TIME × DB BLOCK SIZE × UNDO BLOCK PER SECOND
Son olarak hepsini tek bir sorgu ile çözelim. Optimum UNDO_RETENTION süresini bulmak için;
SELECT d.undo_size/(1024*1024) as UNDO_SIZE,
       SUBSTR(e.value,1,25) as UNDO_RETENTION,
       ROUND((d.undo_size / (to_number(f.value) *
       g.undo_block_per_sec))) as OPTIMUM_UNDO_RETENTION
  FROM (
       SELECT SUM(a.bytes) undo_size
          FROM v$datafile a,
               v$tablespace b,
               dba_tablespaces c
         WHERE c.contents = 'UNDO'
           AND c.status = 'ONLINE'
           AND b.name = c.tablespace_name
           AND a.ts# = b.ts#
       ) d,
       v$parameter e,
       v$parameter f,
       (
       SELECT MAX(undoblks/((end_time-begin_time)*3600*24))
              undo_block_per_sec
         FROM v$undostat
       ) g
WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size';
Belirleyeceğimiz UNDO RETENTION süresine göre optimum UNDO büyüklüğünü bulmak için;
SELECT d.undo_size/(1024*1024) as UNDO_SIZE,
       SUBSTR(e.value,1,25) as UNDO_RETENTION,
       (TO_NUMBER(e.value) * TO_NUMBER(f.value) *
       g.undo_block_per_sec) / (1024*1024)
      as NEEDED_UNDO_SIZE"
  FROM (
       SELECT SUM(a.bytes) undo_size
         FROM v$datafile a,
              v$tablespace b,
              dba_tablespaces c
        WHERE c.contents = 'UNDO'
          AND c.status = 'ONLINE'
          AND b.name = c.tablespace_name
          AND a.ts# = b.ts#
       ) d,
      v$parameter e,
       v$parameter f,
       (
       SELECT MAX(undoblks/((end_time-begin_time)*3600*24))
         undo_block_per_sec
         FROM v$undostat
       ) g
 WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size';
Veritabanımızın son açıldığı andan itibaren kaç ORA-1555 hatası aldığını merak ediyorsanız aşağıdaki sorgu ile bulabilirsiniz.
  select '"ORA-01555 (Snapshot too old)" hata sayısı: '
  || sum(ssolderrcnt)
  from v$undostat;

Alıntıdır: http://taliphakanozturk.wordpress.com/tag/undo-tablespace/

ASM Komutları

ASM Kullanırken işinize yarayabilecek komutlar.....


ASM Disk grupları listeleme

      SELECT * FROM V$ASM_DISKGROUP;

ASMCMD’de ise aynı işlemi lsdg ile yapabiliriz.



ASM Disk grup silme

      ALTER DISKGROUP diskgrup DROP DISK disk ;
      DROP DISKGROUP diskgroup_name   ; 

ASCMD’de ise drop işlemini dropdg ile gerçekleştiririz
dropdg -r DATA
 -f : force anlamındadır.
 -r : tüm içeriği kapsar.

ASM Disk Ekleme
                ALTER DISKGROUP  <diskgrup adı>  ADD DISK '…path…'; 

ASM Diskleri listeleme
SELECT * FROM V$ASM_DISK; 
SELECT name,mount_status,total_mb,path FROM V$ASM_DISK;

Bağlı olan ASM instance’lar için V$ASM_CLIENT’ı sorgularız.
                SELECT * FROM V$ASM_CLIENT;    

Aynı bilgiyi ASMCMD’de lsct komutu ile alabiliriz. (11gR2 )
                lsct DGDBA        -> V$ASM_CLIENT’da bulunan  bilgilerini verir.
                lsct  -g DGDBA  -> G$ASM_CLIENT’dan instance id ile bize getirir bilgileri..

ASM Disk Boyutlandırması 
1.       OS disk yapısına göre ASM’de tanımlı olan diskgruplarının boyutlarını düzenleyebiliriz.
                ALTER DISKGROUP <disk_grup>  RESIZE DISK <disk> SIZE <boyut> ;
               ALTER DISKGROUP dg_data_1 RESIZE DISK diska1 SIZE 150G;

2.       AFail durumdaki diskgruplarının boyutlarının düzenlenmesi.
ALTER DISKGROUP <disk_grup> RESIZE DISKS IN FAILGROUP <disk> SIZE <boyut>;
ALTER DISKGROUP  data_1 RESIZE DISKS IN FAILGROUP fg1 SIZE 50G;

3.       Tüm disk gruplarının boyutlarının düzenlenmesi
ALTER DISKGROUP dg_data_1 RESIZE ALL SIZE 100G;

ASM Disklerini UNDROP etmeden unmounts modda bırakan komuttur.
      ALTER DISKGROUP  <disk_grup>  UNDROP DISKS;
      ALTER DISKGROUP   disk_groupUNDROP DISKS

Online Disk komutu.
      Disk adlarını verebiliriz…
                 ALTER DISKGROUP data ONLINE DISK 'disk_0000', 'disk_0001';
    Failgrup adı vererek ONLINE yapabiliriz.
 ALTER DISKGROUP data ONLINE DISKS IN FAILGROUP  ‘fg1’; 
    Bütün diskgrupları NLINE moda alırız
                 ALTER DISKGROUP data ONLINE ALL;

Online komutunun ASMCMD’deki eşleneği online komutudur.
                online {[-a] -G diskgroup|-F failgroup|-D disk} [-w]
                                a : Bütün diskgrupları
                                w : Bekleme opsiyonudur.

ASMCMD [+] > online -G data -F failgrup –w
ASMCMD [+] > online -G data -D data01

ASM disklerini OFFLINE  moda alabiliriz.
Belli diskleri OFF moda alırız.
ALTER DISKGROUP data OFFLINE DISK 'disk_0000', 'disk_0001';
Failgrup ile diski OFF moda alırız.
ALTER DISKGROUP data OFFLINE DISKS IN FAILGROUP 'fg_99';
Belli bir süre sonra diskin offline olmasını sağlayabiliriz
ALTER DISKGROUP data OFFLINE DISK d1_0001 DROP AFTER 30m;

ASMCMD’deki kaşılığı offline komutudur.
                offline -G diskgroup {-F failgroup|-D disk} [-t {minutes|hours}]
                               t : Süre olarak ne zaman yapılacağını belirten parametredir.

ASM Disk Mount
ALTER DISKGROUP ALL MOUNT;  Bütün diskler mount edilir.
ALTER DISKGROUP data2 MOUNT;  Data2 diski mount edilir
ALTER DISKGROUP data2 MOUNT RESTRICTED; 
ASMCMD’de bu işlemi mount komutu ile yapabiliriz.
mount [--restrict] {[-a] | [-f] diskgroup[,diskgroup,...]}
a : “ALL” parametresinin karşılığıdır.
f : Force modunda işlem yapar
ASMCMD [+] > mount -f data
ASMCMD [+] > 
mount --restrict data
ASMCMD [+] > 
mount -a

ASM Disk Dismount
ALTER DISKGROUP ALL DISMOUNT; Bütün disk gruplarını dismount etme komutu
ALTER DISKGROUP diskgrup DISMOUNT;  Belli bir disk grubu dismount etme
ASMCMD’de unmounts komutu ile buişlem yapılabilir.
                umount {-a | [-f] diskgroup}
ASMCMD [+] > umount -a
ASMCMD [+] > 
umount -f data

ASM Disk REBALANCE  işlemi
      Bir önceki yazıda da belirttiğim üzere disk eklendiği veya kaldırıldıında Oracle disklerin üzerindeki veriyi disklere dağıtır. Biz bu bilgiyi v$asm_operation view’nda tutar.
                SELECT  * FROM V$ASM_OPERATION;

      Ancak biz bu işlemi elle ALTER DISKGROUP cümlesi ile de yapabiliriz. Burada eğer POWER parametresini kullanacaksak ASM_POWER_LIMIT parametresini set ederiz. ASM_POWER_LIMIT parametresi 0 ile 11 arasında değer alarak işlemin hızını belirler.
ALTER DISKGROUP disk_group_1 REBALANCE POWER 6;

Bu komutun ASMCMD’de ki karşılığı rebal komutudur.
rebal [--power power_value] [-w] diskgroup
--power : 0 – 11 arasında bir değer veririz
w : bekleme parametresidir.

ASM Disk grup istatistiklerini V$ASM_DISK_IOSTAT view’ı sorgulayarak bilgileri alırız.
                SELECT * FROM V$ASM_DISK_IOSTAT;

ASMCMD ise bu bilgiyi iostat ile alırız.
iostat [-etH] [--io] [--region] [-G diskgroup] [interval]
e : Oluşan hataları gösteren parametresi (Read_Err, Write_Err)
t : Zaman istatistikleri (Read_time, Write_time)
--io : IO bilgileri bytes formatında.
--region: Cold ve Hot alan bilgileri (Cold_Reads, Cold_Writes, Hot_Reads, Hot_Writes)
-G : Diskgrup istatistikleri
                   Interval : Saniye değerindeki zaman aralıkları ile istatistikleri yenileme.


Alıntıdır : http://www.datawarehouse.gen.tr/Makale.aspx?ID=586