=====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**: ethtool -S eth0 | grep -i drop Ring Buffer des Nics prüfen: ethtool -g eth0 Falls "Pre-set maximums" >> "Current hardware settings" sollte der Buffer vergrößert werden. Flow Control überpürfen: ethtool -a eth0 Pause parameters for eth0: Autonegotiate: off RX: on TX: on 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: 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 .. 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 #!/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 # Über die Crontab einen Job einrichten der jede Minute das Interface des Interconnects abfragt: crontab –l … #get the network statistic from the interconnect interface */1 * * * * /opt/oracle/diag/network/racdb01/checkDroppedPackage.sh .. 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: #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 Verbesserungsvorschlag=> Wert beim Überlauf von einem Tag auf den anderen passt nicht durch den Header in jeder einzelnen Datei.