Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:oracle_rac_global_cache_block_lost

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
linux:oracle_rac_global_cache_block_lost [2015/03/28 17:27] – [Netzwerkprobleme auf einen Oracle RAC Interconnect untersuchen - Global Cache Block Lost Events auf Netwerkprobleme zurückführen] gpipperrlinux:oracle_rac_global_cache_block_lost [2015/03/28 17:28] (aktuell) – [Monitoring] gpipperr
Zeile 1: Zeile 1:
 +=====Netzwerkprobleme auf einen Oracle RAC Interconnect untersuchen - Global Cache Block Lost Events auf Netwerkprobleme zurückführen=====
 +
 +**11g/12c**
 +
 +
 +In einer RAC Umgebung werden jeden Tag über den OEM zur selben Zeit viele "Global Cache Block Lost" Events protokolliert.
 +
 +Zugleich fallen bei der Untersuchung des Interconnects "dropped network packages" ins Auge.
 +
 +
 +===Analyse ===
 +
 +
 +siehe auch => Troubleshooting gc block lost and Poor Network Performance in a RAC Environment (Doc ID 563566.1)
 +
 +
 +Überprüfen mit **ethtool**:
 +
 +<code bash>
 + ethtool -S eth0 | grep -i drop
 +
 +</code>
 +
 +
 +Ring Buffer des Nics prüfen:
 +<code bash>
 + ethtool -g eth0
 +</code>
 +Falls "Pre-set maximums"  >> "Current hardware settings" sollte der Buffer vergrößert werden.
 +
 +
 +Flow Control überpürfen:
 +<code bash>
 +ethtool -a eth0
 +
 +Pause parameters for eth0:
 +Autonegotiate:  off
 +RX:             on
 +TX:             on
 +</code>
 +Falls off, einschalten mit "ethtool -K eth0 rx on"
 +siehe auch => LINUX: POOR RAC-INTERCONNECT PERFORMANCE AFTER UPGRADE FROM RHEL3 TO RHEL4/OEL4 (Doc ID 400959.1)
 +
 +=== "Receive fragment size" anpassen ===
 +
 +Eine Lösung bei einer höheren Anzahl vn TX drops (TX-DRP) kann von das Erhöhen der "Receive fragment size" auf der Netzwerkkarte sein.
 +
 +
 +Aktuellen Wert überprüfen (Emulex network interface) , falls extra gesetzt:
 +<code bash>
 +cat /sys/bus/pci/drivers/be2net/module/parameters/rx_frag_size
 +8192
 +
 +#setzen in der 
 +cd /etc/modprobe.d
 +
 +vi be2net.conf
 +..
 +options be2net rx_frag_size=8192
 +..
 +
 +</code>
 +
 +
 +siehe auch => http://support.hp.com/us-en/document/c03854197 für ein Emulex network interface 
 +
 +
 +===Monitoring===
 +
 +
 +Ein Script für das Monitoring erstellen.
 +Das Script fragt das Netzwerk Interface des Interconnects (bei Bonding das Bond Interface verwenden!) ab und rolliert jeden Tag den Logfile
 +<code bash>
 +#!/bin/sh
 +#
 +#
 +#  read the interface statistic and write the information to a log file
 +#
 +########## Environment ##############
 +DAY_OF_WEEK="`date +%w`"
 +export DAY_OF_WEEK 
 +
 +DAY="`date +%d`"
 +export DAY
 +
 +# Home of the scrips
 +SCRIPTPATH=$(cd ${0%/*} && echo $PWD/${0##*/})
 +SCRIPTS=`dirname "$SCRIPTPATH{}"`
 +export SCRIPTS
 +
 +########## Configuration ##############
 +INTERFACE="eth1"
 +HOST=`hostname -a`
 +
 +
 +######### Log file Handling ###########
 +OVERWRITE="false"
 +
 +# check if a new file must be created
 +if [ ! -e $SCRIPTS/${HOST}_${INTERFACE}_${DAY}.log ]; then
 +  OVERWRITE="true"
 +else
 +  # check the age of the file
 +  # if older then one day overwrite
 +  FILEAGE_SECONDS=`date -d "now - $( stat -c "%Y" $SCRIPTS/${HOST}_${INTERFACE}_${DAY}.log ) seconds" +%s`
 +  
 +  if [ -z "$FILEAGE_SECONDS"  ]; then 
 +    FILEAGE_SECONDS=0;
 +  fi
 +  
 +  if [ "$FILEAGE_SECONDS" -gt 86400 ]; then
 + OVERWRITE="true"
 +  fi
 +  
 +fi
 +
 +if [ "$OVERWRITE" = "true" ]; then
 + echo "----------------------- start new Day ${DAY} -------------------------------"          >  $SCRIPTS/${HOST}_${INTERFACE}_${DAY}.log 2>&1
 + echo "Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg"   >> $SCRIPTS/${HOST}_${INTERFACE}_${DAY}.log 2>&1
 +fi
 +
 +
 +# get the figures
 +/bin/netstat -i | /bin/grep "${INTERFACE} "  | /bin/awk '{print strftime("%Y-%m-%d %r") ":" $0; }' >> $SCRIPTS/${HOST}_${INTERFACE}_${DAY}.log
 +
 +#
 +</code>
 +
 +
 +Über die Crontab einen Job einrichten der jede Minute das Interface des Interconnects abfragt:
 +<code bash>
 +crontab –l
 +
 +#get the network statistic from the interconnect interface
 +*/1 * * * * /opt/oracle/diag/network/racdb01/checkDroppedPackage.sh
 +..
 +</code>
 +
 +Für die Auswertung werden die Log Files sortiert und per "awk" zeilenweise eingelesen, der Wert der "dropped packages" wird pro Zeile in eine Variable gespeichert, und mit dem Wert der Zeile zuvor verglichen.
 +
 +Ergibt sich eine Differenz sind Netzwerk Pakete verloren gegangen und der Wert wird protokolliert.
 +
 +
 +Die erzeugten Logfiles auswerten mit:
 +<code bash>
 +
 +#Auswertung mit
 +cat *.log | awk 'NR>4 { wert=$8-zuvor; if ( wert != 0) eol="  Package Losts"; else eol="" ; print $0 "  -> " wert eol } {zuvor=$8}'| grep Package | grep -v AM | grep -v Day | sort
 +
 +</code>
 +Verbesserungsvorschlag=> Wert beim Überlauf von einem Tag auf den anderen passt nicht durch den Header in jeder einzelnen Datei. 
 +
 +
 +
  
linux/oracle_rac_global_cache_block_lost.txt · Zuletzt geändert: 2015/03/28 17:28 von gpipperr