Pages

Linux / Solaris etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Linux / Solaris etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

6 Ocak 2012 Cuma

ASMLIB sürücüsünün “update-driver” komutu ile güncellenmesi

ASMLib sürücüsünün bir ASM instance ını yönetmek için kullanıp kullanmamak hala tartışmalı bir konudur, ancak Oracle’ın bu konuda ısrarlı tavsiyeleri sonucunda Linux platformlarda kullanmayı şahsen ben tercih etmekteyim. Bu noktada, linux kernel güncellemesi öncesi veya sonrasında ASMLib sürücüsününde güncellenmesi gerekmektedir, aksi durumda sürücü uyumsuzluğu sebebiyle ASMLib modülü sisteme yüklenemez. 

Bilindiği üzere ASMLib sürücüsü,  kernel bağımlıdır ve aynı kernel versiyonunu ile eşleşmesi gerekmektedir.  Bu noktada, Oracle web sitesinden ASMLib sürücüsünün güncel versiyonu bulunabilir, siteden ücretsiz olarak indirilip, Linux sisteme kurulabilir. Oracleasm-support 2.1.0 sürümünden itibaren “update-driver” gömülü komutu kullanılarak, hem zamandan tasarruf sağlanabilir, hemde ASMLib sürücüsü güncelleme işlemi basitleştirilebilir.

Peki bu komut nasıl çalışmaktadır?Örnek olarak,  kernel sürücüsünü 2.6.18-194.8.1.0.1.el5 x86_64 versiyonuna yükselttik, ancak ASMLib sürücüsü hala eski versiyonda.  Neticede, açılış sonrasında ASMLib modülü yüklenirken aşağıdaki hata mesajı alınacak ve modul başlatılamayacaktır.

7 Eylül 2011 Çarşamba

Dünün STATSPACK snapshotlarındaki bekleme olayları delta değişimlerinin e-mail ile otomatik olarak alınması

Bir gün evvel STATSPACK snapshotlarından bekleme olaylarının delta değişimlerinin email ile otomatik olarak alınması için aşağıdaki shell script kullanılabilir ve ardından bu script crontab içerisine eklenerek her gün çalıştırılması sağlanabilir. Bu tip shell scriptleri içine istenen SQL sorguları eklenebilir ve bu şekilde proaktif bir performans izleme yolu kolayca devreye alınabilir.

#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 SID"
exit 1
fi
# source oracle OS variables
. /var/opt/oracle/oraset $1
#
BOX=`uname -a | awk '{print$2}'`
#
sqlplus -s <<EOF
/ as sysdba
spo $HOME/bin/log/statspackdelta.txt
set lines 80
set pages 100
SELECT s1.snap_time,
w1.event,
s1.snap_id,
ROUND((w1.time_waited_micro/1000000/total_waits),4) "Avg_wait_sec",
LAG(ROUND((w1.time_waited_micro/1000000/total_waits),4))
OVER (ORDER BY ROUND((w1.time_waited_micro/1000000/total_waits),4)) prev_value,
ROUND((w1.time_waited_micro/1000000/total_waits),4) - LAG(ROUND((w1.time_waited_micro/1000000/total_waits),4))
OVER (ORDER BY ROUND((w1.time_waited_micro/1000000/total_waits),4)) delta_value
FROM stats\$snapshot s1,
stats\$system_event w1
WHERE s1.snap_id between (SELECT MIN(snap_id) FROM stats\$snapshot WHERE  snap_time>=TRUNC(sysdate-1)+5/1440)
AND (SELECT MIN(snap_id) FROM stats\$snapshot WHERE snap_time>TRUNC(sysdate)+5/1440)
AND s1.snap_id = w1.snap_id
ORDER BY 1 desc,4 desc,6 desc;
EOF
cat $HOME/bin/log/statspackdelta.txt | mailx -s "Statspack wait event delta report on DB: $1 $BOX" u.inal@xxx.com
exit 0

Ardından crontab içine günlük rütin çalışması için eklenir.

# Wait event delta degisim rapor
16 11 * * * /orahome/oracle/bin/statspackdelta.bsh DBA1

10 Haziran 2011 Cuma

Sistem aktivite raporu(SAR) ile CPU kullanımını izleme

UNIX ve Linux sunucularda sar komutunu –u parametresi ile kullanarak CPU kullanımını izleyebiliriz. sar komutu ne kadar CPU kaynağının çıkmaza girdiğini veya kullanıldığını ile ilgili hızlı bir snapshot çeker. Sisteminiz yavaşladığı zaman bu komutu çalıştırarak pekçok darboğazın kaynağını gözlemleyebilirsiniz.

sar –u <nümerik_değer1> <nümerik_değer2>
nümerik_değer1: sar okumaları arasındaki saniye değeri
nümerik_değer2: sar komutunun kaç sefer çalıştırılacağını belirten değer

$ sar -u 10 5
Linux 2.4.21-37.0.0.1.4.ELhugemem (ap6188rt)    01/06/2011
10:48:24 PM      CPU    %user     %nice   %system   %iowait   %idle
10:48:34 PM       all       22.07      0.00     14.36         0.03         63.54
10:48:44 PM       all       16.70      0.00     13.93         0.17         69.20
10:48:54 PM       all        8.80       0.00       8.15         0.25         82.80
10:49:04 PM       all        2.52       0.00       3.55         0.00         93.92
10:49:14 PM       all        2.05       0.00       4.00         0.00         93.95
Average:             all       10.43      0.00       8.80         0.09         80.69

24 Mayıs 2011 Salı

“CPU Time” Oracle bekleme olayı ve CPU önceliklerinin değiştirilmesi

“CPU Time” olayını, performans olaylarını incelerken genellikle Top5 bekleme olayı listesi içinde gözlemleriz. DBA penceresinden bakınca yaygın düşünce, CPU bekleme olayının bir darboğaz olduğu şeklindedir.  Aslında Oracle dökümanlarında da CPU tüketimi ilgili bir takım bekleme olaylarının darboğaz oluşturduğu şeklinde açıklamalar vardır.

Peki eğer sistem içindeki istatistiklerde CPU Tüketimi(%Util ve Çalışma Kuyruğu) kabul edilebilir seviyeler içindeyse ve yeterli kapasiteye sahiplerse, ancak Oracle hala CPU Time bekleme olayını Top 5 bekleme olayı içerisinde listeliyorsa ne yapılmalıdır?

Bu arada yüksek derecede istemsiz içerik değişmesi(Solaris üzerinde mpstat ile) veya içerik değişmesi(Linux üzerinde vmstat ile) gözlemlenebilir.  Burada açık olarak söylemek gerekirse bazı şeylerin doğru hesaplanmadığı anlaşılmaktadır.


CPU süresi, bir prosesin aşağıdaki iki noktadan birisi anlamına geldiğini gösterir;

  • CPU üzerinde bu proses için zamanlanmış bir çalışma kuyruğu beklemesi vardır.
  • Veya, proses bir CPU üzerinde halihazırda çalışmaktadır. 
Aslında bir DBA olarak bu durumda bizi ilgilendiren noktalar;

  • Çalışma kuyruğu üzerinde bekleme süresini azaltarak, oturumun CPU üzerinde en kısa süre içinde çalışabilmesini sağlamak. Bu prosesin önceliğinin ele alınmasıyla ayarlanabilir.
  • CPU üzerinde çalışmaya başlangıcından görev sonlanana kadar bir prosesin kesintiye uğramadan çalışmasının sürdürülmesi. CPU üzerinde proses için uygun zaman miktarı “Time Quanta-Zaman Ayarı” olarak tanımlanmaktadır.
Yukardaki her iki görüşte OS Zamanlayıcısı veya OS Dispatcher tarafından kontrol edilmektedir. Aşağıda bilgisayar terminolojisinde zamanlamanın(scheduling) ne anlama geldiğini açıklayan bir açıklama yer almaktadır.

5 Nisan 2011 Salı

Bir DBA’in penceresinden UNIX/LINUX sistem performansını izleme araçları



IBM AIX için;

  • IBM AIX sistemlerde en son kullanılan ve yoğun CPU çalıştıran kullanıcı proseslerini bulma 
#  ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15

  • Thread ve proseslerin sınırlandığı thread ve CPU ları listeleme. TID kolonu threadID’yi belirtir.Thread kavramını kısaca açıklamak gerekirse; thread, bir program aracılığıyla kontrol sıralı akış demektir. Thread’ler pek çok açıdan faydalıdır. Birden fazla CPU üzerinde paralel olarak çalışabilmekte ve böylece tek bir programın çalışmasını, birden fazla CPU arasında bölümlendirebilmektedir. Bunun yanında veritabanı performansında önemli olan, örtüşen eşzamanlı olmayan I/O işlemleri (ASYNC I/O) ve grafiksel kullanıcı arayüzleri gibi bazı sunucu programlarında da, pekçok thread işbirliği yaparak bu tarz programların daha efektif çalışmasını tetikler.
#  ps -efmo THREAD

  • Oldukça yüksek CPU kullanan prosesleri listeleme
#  ps -eo pid,pcpu,args | sort +1n

  • CPU kullanmakta olan bilinen bir prosesin thread ID sini(TID) bulma
#  ps -mp <PROSES_PID_NO> -o THREAD

  • Yüksek fiziksel bellek tüketen prosesleri listeleme
#  ps -eo pid,vsz,args | sort +1n

  • Top prosesler, CPU kullanımı, fiziksel bellek tüketimi, sanal bellek kullanımı, paging alanı ve I/O yüklemesi gibi sunucu kaynak kullanımı gözlemleme
#  topas

  • IBM AIX sistemlerde paging alanını en fazla kullanan 10 kullanıcıyı listeleme
#  svmon -Pgt 10

  • IBM AIX sistemlerde en fazla fiziksel bellek kullanan 10 kullanıcıyı listeleme
#  svmon -Put 10

  • IBM AIX sistemlerde fiziksel bellek kullanımını izleme
#  svmon -u | more
#  svmon -P | more

  • IBM AIX sistemlerde en fazla bellek tüketen prosesleri bulma
#  svmon -P -t 1
#  svmon -Pau 1

8 Ocak 2011 Cumartesi

Paylaşımlı bellek ve semaforlar – Oracle

Veritabanı bazı durumlarda düzgün bir şekilde kapatılmadığında paylaşımlı bellek serbest bırakılmayabilir. Bu durumda oturum açmak istediğinizde veritabanı açılışında aşağıdaki hatayı alırsınız.

$ sqlplus /nolog
SQL> connect / as sysdba

ERROR:
ORA-03113: end-of-file on communication channel

Bu gibi sorunları çözmek için geçersiz Oracle prosesleri tarafından kilitlenmiş veya bloklanmış paylaşımlı bellek ve semaforları kontrol edebilirsiniz. Ancak bundan önce UNIX mimarisinde paylaşımlı bellek segmentlerinin ve semaforların ne olduğunu kısaca anlamak gerekiyor.

6 Ocak 2011 Perşembe

Linux’ta “Huge Pages” yapılandırması

“Big/Huge pages” özelliği Oracle SGA gibi paylaşımlı bellekler için ne kadar fiziksel ardışık büyük bellek sayfalarının tahsis edilebileceğini ve RAM ‘e iliştirileceğini tanımlayan bir özelliktir. Örneğin,  her biri 2GB SGA’ya sahip 3 tane Oracle instance için en azından 6GB büyük sayfa(large pages) tahsis edilmelidir. Böylece, 3 SGA da büyük sayfa kullanacak ve ana fiziksel bellek içinde kalacaktır. Bununla beraber aynı sistem içinde eğer ASM kullanılırsa ilave olarak 200MB paylaşımlı belleğe ihtiyaç olacaktır. Tabi bunun yanında başka Oracle prosesleride ilave paylaşımlı belleğe ihtiyaç duyacaktır.

3 Ocak 2011 Pazartesi

Oracle 10g veritabanı için Solaris sistemde TLB/TSB Misses ve Pages Fault oranlarının iyileştirmesi

TLB ve TSB terminolojisi 

Bir proses bellek talep ettiğinde bu talep için sadece sanal bellek ayrılılır. Fiziksel bellek henüz ayrılmamıştır. Bir proses bu ayrılan sanal bellek içindeki sayfaya(page)  erişim talep ettiğinde, sayfa hatası(page fault) oluşur. Sonuçta, bu prosesin sanal sayfasına boş listeden bir fiziksel sayfa ile eşleştirilir.
Bu eşleşme yazılım içindeki sanal bellek sistemi tarafından oluşturulur ve HAT Mapping Entries(HME) formunda HPT(Hash Page Tables) içinde saklanır. Ayrıca bunun bir kopyasıda TLB ve TSB içine Translation Table Entries(TTE) olarak girilir.

2 Ocak 2011 Pazar

Solaris 10 üzerinde host ismi ve ip adresini değiştirme

Oracle 10g RAC(Real Application Clusters) kurulumunda, eğer Solaris 10 yüklü düğümlerin host isimlerini büyük harfle girmişseniz Oracle Clusterware yazılımı yüklemesinde hata mesajı alırsınız. Bu hata mesajından tek kurtuluş düğümün host ismini küçük harfli olarak alttaki gibi değiştirmektir. Bunun yanında, network adresini değiştirmek gerektiğindede bu düğümün ip adresini değiştirmek için alttaki adımları izleyebilirsiniz.

1 Ocak 2011 Cumartesi

Oracle çalışan Linux/UNIX sistemlerde “Out of memory” hatası

Linux veya UNIX sistemlerde çalışan Oracle tabanlı uygulama için işletim sisteminde paylaşımlı belleğin serbest bırakılıp bırakılmadığını kontrol etmek için alttaki programı derleyin ve çalıştırın.

20 Aralık 2010 Pazartesi

Oracle 10g için Linux kernel parametresi hesaplaması

 /etc/sysctl.conf içi parametre değeri
Tanımı
MINIMUM Değer
Hesaplama
net.wmem_max

Maksimum gönderilen TCP paket değeri - byte
1048576
(100Mbps bant genişliği ve ortalama 5.2 saniyelik latency değeri için)
>= 1048576
Formulü -> BDP = bant_genişliği_bytedeğeri* RTT(saniye) değeri ile çıkan sonucun 2 katıdır.
net.wmem_default

Varsayılan gönderilen TCP paket değeri - byte
262144
>= 262144
net.wmem_max değerinin dörtte biridir.
net.rmem_max

Maksimum alınan TCP paket değeri - byte
4194304
>= 4194304
net.wmem_max değerinin 4 katıdır.
net.rmem_default

Ortalama alınan TCP paket değeri - byte
262144
>= 262144
net.wmem_max değerinin dörtte biridir.
net.ip_local_port_range
Kullanılacak minumum ve maksimum port sayısı
Minimum: 9000
Ayar yoktur. Sabitleyin
Maximum: 65500
kernel.shmmni
Sistem tarafında paylaşımlı bellek segment sayısı
4096
4096'ya  fikslenmektedir. PAGE_SIZE değeridir.Huge pages kullanıldığında değer dahada yüksek olacaktır. 
kernel.shmmax
Linux prosesisinin ayırdığı maksimum single paylaşımlı bellek segment  boyutu (bytes değeri olarak)
1/2 den 2/3 e kadar fiziksel bellek değeri; 32 bit için max. 4GB -1, 64 bit için max. 4TB.
en yüksek SGA_MAX_SIZE değeri, SGA_TARGET,MEMORY_MAX_SIZE veya tüm instancelerin MEMORY_TARGET değeri

Varsayılan: 536870912
kernel.shmall
Sistem tarafında kullanabilen paylaşımlı bellek sayfalarının toplam sayısı
2097152
shmmax/PAGE_SIZE

(PAGE_SIZE değeri Big/Huge Pages kullanılmadığı takdirde genellikle 4096 byte'dır.

PAGESIZE şu şekil bulunur:
"getconf PAGESIZE"
kernel.sem:semopm
semop çağrısı olarak maksimum operasyon sayısı
100
semmsl değerine eşit
kernel.sem:semmsl
Her set için toplam semaphores
256. Enaz 100 tavsiye edilir.
Maksimum(PROCESS değeri) +10
kernel.sem:semmns
Sistem tarafında toplam semaphores sayısı
32000
semmsl * semmni 


kernel.sem:semmni
Toplam semaphores seti
128. Enaz 100 olması tavsiye edilir.
semmsl / semmns
kernel.msgmax
Maksimum mesaj kuyruk boyutu
8192
Fiziksel RAM değeri (MB olarak)
fs.file-max
Sistem tarafında maksimum açılacak dosya sayısı
327679
512 * PROCESSES
kernel.sem
Eşzamanlı bekleyen I/O çağrıları
250 32000 100 128






  • 250 değerinin olduğu kısım SEMMSL değeridir ve 64 bit Oracle 10g platformunda PROCESSES parametre değerinin on katı olması lazımdır.












  • 32000 değerinin olduğu kısım SEMMSL*SEMMNI değeri çarpımı çıkan değer olması gerekir.












  • 100 değerinin olduğu kısım SEMOPM değeridir ve SEMMSL ile aynı değerde tutulması tavsiye edilir.







  •