6f429244e498457b8400e72e4af683b0 Alberto Blog: Script Maintenance e Tuning per OS Solaris - Oracle

giovedì 10 marzo 2011

Script Maintenance e Tuning per OS Solaris - Oracle

Oggi vorrei scrivere un post descrivendo alcuni miei script che sono molto utili quando si deve effettuare del tuning di un DB Oracle in ambiente OS Solaris.
Quando si parla di tuning di sistema è sempre meglio suddividere l'analisi in 2 punti:

  1. OS che in che questo post si parlerà di Solaris
  2. DB Oracle
Questo articolo si sviluppa intorno al primo punto, magari in un secondo momento si potrà descrivere un approccio di tuning (almeno il mio) per il secondo.
Il primo script chiamato mem.sh esegue un controllo della memoria attraverso il comando iostat messo in loop con la pecurialità, che accompagna tra l'altro tutti gli script successivi di mandare, una mail qualora si verifichino delle condizioni, in questo caso quanto la CPU Idle è inferiore a 5%.
Questo significa che il sistema sta lavorando a pieno regime e quindi è necessario eseguire un check per verificare che processi stiano utilizzando la cpu correttamente.

mem.sh

MULTI_INSTANCE=0
set +u
USER=$(whoami)
LOGFILE="/tmp/LogMEM"
HOST=$(hostname)
OSTYPE=$(uname)

for i in 1 2 3 4 5 6 7 8 9 10 11 12
        do 
        MEM=" "
        MEM="$(iostat -c 5 8 |sort -nr | head -n1 | awk '{print $4}')$MEM" 
        if [ "$MEM" -le 5  ] ; then
        echo " \n$(date) La CPU idle del sistema è $MEM%" . ATTENZIONE >> $LOGFILE
        iostat -c 5 8 |sort -nr | head -n1 | awk '{print $4}' > /tmp/log_mem
        mailx -s "La CPU idle del sistema è $MEM%. ATTENZIONE " mail@domain.com 
        else
        echo "\n$(date) La CPU idle del sistema è $MEM%" >> $LOGFILE
                
fi
        sleep 285
        done

Il secondo script si chiama statcpu.sh, molto simile al primo ma con la caratteristica di inserire i dati campionati sempre con il comando iostat in loop, in una tabella Oracle.
Questo potrebbe essere utile in caso di analisi e statistiche in un periodo di tempo medio/lungo per poterli poi eleborare e presentare con grafici ed altro.

statcpu.sh

SERVER_NAME=`uname -a|awk '{print $2}'`
typeset -u SERVER_NAME
export SERVER_NAME


for i in 1 2 3 4 5 6 7 8 9 10 11 12
do
   CPUUSR=" "   
   CPUIDLE=" "
   CPUSYS=" "
   CPUWAY=" "
   CPUUSR="$(iostat -c 1 2 |sort -nr | head -n1 | awk '{print $1}')$CPUUSR"
   CPUSYS="$(iostat -c 1 2 |sort -nr | head -n1 | awk '{print $2}')$CPUSYS"
   CPUWAY="$(iostat -c 1 2 |sort -nr | head -n1 | awk '{print $3}')$CPUWAY"
   CPUIDLE="$(iostat -c 1 2 |sort -nr | head -n1 | awk '{print $4}')$CPUIDLE"

      $ORACLE_HOME/bin/sqlplus -s  scott/tiger <<EOF
      insert into cpu_stat values (
                             SYSDATE,
                             $CPUUSR,
                             $CPUSYS,
                             $CPUWAY,
                             $CPUIDLE,
                             '$SERVER_NAME');

      commit;                            
      EXIT
EOF

        sleep 285
   done

Il terzo e ultimo script serve per controllare sempre in tempo reale con il comando ps quali processi che superano un certa soglia di cpu in questo caso il 15% .
Questo potrebbe essere utile se stiamo effettuando un tuning attivo.
Quando la condizione si verifica, cpu per un processo cha va oltre il 15% il sistema manda un mail.

cpu_new.sh

MULTI_INSTANCE=0
set +u
USER=$(whoami)
LOGFILE="/tmp/LogCPU"
HOST=$(hostname)
OSTYPE=$(uname)

for i in 1 2 3 4 5 6 7 8 9 10 11 12
        do 
        CPU=" "
        CPU="$(ps -efo pcpu,pid,args | sort -nr | head -n 1|awk '{print $1}')$CPU" 

        if [ "$CPU" -ge 15.0  ] ; then
        echo " \n$(date) Trovato processo maggiore del 15% di CPU. Massimo utilizzo di CPU è di $CPU%" >> $LOGFILE
        ps -efo pcpu,pid,args | sort -nr | head -n 1 > /tmp/log
        ps -efo pcpu,pid,args | sort -nr | head -n 1 >> $LOGFILE
        mailx -s " Trovato processo maggiore di 15% di CPU in `uname -n`. Massimo utilizzo di CPU è di $CPU% " nome@domain.com < /tmp/log
        else
        echo "\n$(date) Non è stato trovato nussun processo maggiore del 15% di CPU. Massimo utilizzo di CPU è di $CPU%" >> $LOGFILE
        ps -efo pcpu,pid,args | sort -nr | head -n 1 >> $LOGFILE
        
fi
        sleep 285
        done


Tutti questi script, in realtà ne ho altri, sono stati scritti in Korn Shell in principio, ma si possono benissimo adattare anche ad una shell più friendly come la Bourne.

Utilizzando questi script e parallelamente gli strumenti che il db Oracle ci mette a disposizione, tipo AWR, Statepack, ADDM e altri, abbiamo tutti i dati per poter al meglio effettuare un analisi completa sul nostro sistema.

HTH

 

Nessun commento:

Posta un commento