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/
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#;
SELECT
MAX(undoblks/((end_time-begin_time)*3600*24)) as UNDO_BLOCK_PER_SECOND
FROM
v$undostat;
SELECT
TO_NUMBER(value) as DB_BLOCK_SIZE
FROM
v$parameter
WHERE name =
'db_block_size';
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';
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';
select '"ORA-01555 (Snapshot too
old)" hata sayısı: '
|| sum(ssolderrcnt)
from v$undostat;
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
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
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
Kaydol:
Kayıtlar (Atom)