<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>de.credativ-Blog</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/" />
    <link rel="self" type="application/atom+xml" href="http://blog.credativ.com/de/atom.xml" />
    <id>tag:blog.credativ.com,2010-03-04:/de//1</id>
    <updated>2011-10-12T14:42:36Z</updated>
    <subtitle>All about Linux and Open Source</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.37</generator>

<entry>
    <title>Deutsche PostgreSQL Konferenz</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2011/10/deutsche-postgresql-konferenz.html" />
    <id>tag:blog.credativ.com,2011:/de//1.203</id>

    <published>2011-10-12T14:31:10Z</published>
    <updated>2011-10-12T14:42:36Z</updated>

    <summary> Im Rahmen der alljährlichen OpenRheinRuhr, einer jährlichen Konferenz rund um Freie Software, wird die deutschsprachige PGConf.DE am 11. November 2011 in Oberhausen das Rheinland besuchen. Als Fortsetzung des sehr erfolgreichen PGDay.EU im letzten Jahr, werden auch in diesem Jahr...</summary>
    <author>
        <name>Bernd Helmle</name>
        
    </author>
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="konferenz" label="Konferenz" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pgconfde" label="PGConf.DE" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="postgreslogo.png" src="/de/static/postgreslogo.png" width="97" height="100" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></p>

<p><em><br />
Im Rahmen der alljährlichen <a href="http://openrheinruhr.org/">OpenRheinRuhr</a>, einer jährlichen Konferenz rund um Freie Software, wird die deutschsprachige <a href="http://2011.pgconf.de">PGConf.DE</a> am 11. November 2011 in Oberhausen das Rheinland besuchen. <br />
</em></p>

<p>Als Fortsetzung des sehr erfolgreichen <a href="http://2010.pgday.eu/">PGDay.EU</a> im letzten Jahr, werden auch in diesem Jahr interessante und informative Vorträge rund um PostgreSQL angeboten. Entwickler und Anwender, aber auch Interessierte anderer Bereiche, treffen auf PostgreSQL-Entwickler, -Spezialisten oder erfahrene Anwender zum Erfahrungsaustausch und um die neuesten Entwicklungen rund um das freie Datenbanksystem zu erfahren.</p>

<p>Das <a href="http://pgconf.openrheinruhr.de/day_2011-11-11.de.html">Vortragsprogramm</a> ist online verfügbar, ebenso wie die <a href="http://2011.pgconf.de/de/anmeldung.html">Registrierung</a> der Konferenz bereits möglich ist. Besucher, die sich vorab registrieren erhalten einen Kostenvorteil von 10 € gegenüber dem Eintrittspreis an der Tageskasse. Der Eintrittspreis berechtigt gleichzeitig auch zum Besuch der OpenRheinRuhr für das ganze Wochenende.</p>

<p>Mitarbeiter der credativ GmbH, die die PGConf.DE als Goldsponsor unterstützt, werden selbstverständlich ebenfalls anwesend sein und in ihren Vorträgen von ihren Erfahrungen berichten.</p>

<p>Alle Blog-Artikel zum Thema PostgreSQL werden auch als <a href="/de/postgresql/">Kategorie PostgreSQL</a> samt eigenem Feed angeboten. Wir helfen auch gerne mit <a href="http://www.credativ.de/home/software/softwareubersicht/datenbanken/postgresql_brief/">Support und Services für PostgreSQL</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>VACUUM FULL - Viel hilft viel?</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2011/04/postgresql-vs-vacuum-full.html" />
    <id>tag:blog.credativ.com,2011:/de//1.198</id>

    <published>2011-04-26T13:00:00Z</published>
    <updated>2011-10-12T14:10:08Z</updated>

    <summary> VACUUM in PostgreSQL ist seit jeher mit Mythen und falschen Informationen behaftet. Besonders verbreitet ist offenbar die Einstellung, VACUUM FULL helfe vorbeugend. Das genaue Gegenteil ist häufig der Fall. VACUUM - Der Staubsauger Seit der Einführung von MVCC (Multi...</summary>
    <author>
        <name>Bernd Helmle</name>
        
    </author>
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="postgreslogo.png" src="/de/static/postgreslogo.png" width="97" height="100" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></p>

<p><em><br />
<a href="http://www.postgresql.org/docs/9.0/static/sql-vacuum.html">VACUUM</a> in PostgreSQL ist seit jeher mit Mythen und falschen Informationen behaftet. Besonders verbreitet ist offenbar die Einstellung, VACUUM FULL helfe vorbeugend. Das genaue Gegenteil ist häufig der Fall.<br />
</em></p>

<h2>VACUUM - Der Staubsauger</h2>

<p>Seit der <a href="http://www.postgresql.org/docs/9.0/static/release-6-5.html">Einführung von MVCC</a> (Multi Version Concurrency Control) in PostgreSQL 6.5 im Jahr 1999 gibt es das Kommando VACUUM. Mit Hilfe dieses Kommandos wird der sogenannte Heap, also die Dateien, die die Tabellendaten enthalten, defragmentiert und nicht mehr belegter Speicherplatz freigegeben. Dies ist notwendig, da PostgreSQL Zeilen bei UPDATE oder DELETE nicht etwa physikalisch löscht, sondern eine neue Version der Zeile anlegt bzw. die Zeile einfach als gelöscht markiert. Die alte Version muss noch so lange beibehalten werden, wie es auch Transaktionen gibt, die diese Zeilenversion noch "sehen" können. Ist eine Tabelle sehr stark durch UPDATE oder DELETE/INSERT frequentiert, und passiert VACUUM zu selten (beispielsweise weil Autovacuum nicht verwendet wird), so kann der sogenannte "tote" Speicherplatz in einer Tabelle sehr stark anwachsen.</p>

<h2>VACUUM FULL - Vorbeugende Reorganisation?</h2>

<p>Viele Administratoren sind daher der Auffassung, dass es aus diesem Grund angebracht ist, dies im Vorfeld durch nächtliche <a href="http://www.postgresql.org/docs/9.0/interactive/sql-vacuum.html">VACUUM FULL</a> Jobs dem Anwachsen der Tabelle vorzubeugen. Dies ist eine schlechte Strategie, aus mehreren Gründen:</p>

<ol>
	<li>VACUUM FULL benötigt im Gegensatz zu normalem VACUUM eine exklusive Tabellensperre, d.h. der Zugriff ist für alle nebenläufigen Transaktionen nicht möglich (auch reine Leseanfragen).</li>
        <li>VACUUM FULL führt eine komplette physische Reorganisation der Tabelle durch, nicht jedoch der Indexe. Dies hat sich mit PostgreSQL 9.0 geändert. Eine exklusive Tabellensperre ist weiterhin notwendig.</li>
        <li>Läuft eine Datenbank mit WAL-Archiving, so kommt es durch VACUUM FULL zu massiv erhöhtem Datenaufkommen im Transaktionslog. Dies kann Probleme mit dem Backuparchiv nach sich ziehen.
        <li>Man benötigt auf jeden Fall ein Wartungsfenster für exklusiven Zugriff der Tabellen.</li>
        <li>Im Gegensatz zu normalen VACUUM ist VACUUM FULL daher nicht für den Einsatz in 24/7-Datenbanken geeignet.
</ol>

<p>Während sich die meisten Nachteile durch ein Wartungsfenster umschiffen lassen, sind die Nachteile durch sehr häufiges VACUUM FULL gravierender. Besonders PostgreSQL-Versionen bis einschließlich 8.4 sind davon betroffen. Um das zu verstehen, muss man sich die Funktionsweise des VACUUM FULL Kommandos in diesen Versionen ansehen:</p>

<ol>
	<li>VACUUM FULL untersucht die Tabelle sequentiell nach totem Speicherplatz. Hierzu werden die gefundenen toten Bereiche während VACUUM FULL in einem Array im Hauptspeicher gespeichert. Ist das Array voll (begrenzt durch maintenance_work_mem), so werden sichtbare (also aktive) Zeilen von unten her in die gefundenen toten Bereiche verlagert (sofern Platz hierfür ausreichend zur Verfügung steht).</li>
        <li>Sind Indexe auf der Tabelle vorhanden, so müssen diese ebenfalls aktualisiert werden.</li>
        <li>Ist das Array abgearbeitet, beginnt der Algorithmus wieder von vorne, solange, bis das Ende der Tabelle erreicht ist.
        <li>Anschließend wird die Tabelle physisch verkleinert. 
</ol>

<p>Das Hauptproblem ist das Umsortieren der Zeilen in den freigewordenen Speicherplatz. Dies sorgt für massive I/O auf dem Speichersystem. Noch schwerwiegender ist jedoch die Tatsache, dass beim Umsortieren der Index ebenfalls aktualisiert werden muss. Passiert das sehr häufig, so kann es passieren, dass der Index selbst sehr stark fragmentiert. In diesem Fall wächst der Index selbst an, man spricht dann vom sogenannten <em>Index Bloat</em>. Daher kann es erforderlich sein, direkt nach dem VACUUM FULL ein <a href="http://www.postgresql.org/docs/9.0/interactive/sql-reindex.html">REINDEX</a> auf die Tabellen auszuführen, insbesondere wenn Tabellen sehr stark fragmentiert waren und viele Tupel umsortiert wurden. Dies alles sorgt bei sehr großen Tabellen auch für sehr lange Laufzeiten.</p>

<p>Ab PostgreSQL 9.0 verhält sich VACUUM FULL wie das <a href="http://www.postgresql.org/docs/9.0/static/sql-cluster.html">CLUSTER</a> Kommando, d.h. die Tabelle wird sequentiell gelesen und parallel komplett neu aufgebaut. Dies hat den Vorteil, dass man nur die Zeilen liest, die aktiv sind und die "toten" Zeilen außen vor lässt. Anschließend werden die Indexe neu erzeugt. Dies eliminiert viele Nachteile des alten Algorithmus, vermeidet jedoch nicht die Notwendigkeit exklusiver Tabellensperren. Ferner benötigt die Reorganisation der Tabelle im schlechtesten Falle nochmal soviel Speicherplatz, wie die aktuell zu bearbeitende Tabelle.</p>

<h2>VACUUM und Autovacuum für tägliche oder sehr granulare Wartung</h2>

<p>VACUUM bzw. Autovacuum sind für die tägliche oder dauerhafte Wartung von PostgreSQL-Datenbanken ausgelegt.</p>

<ol>
	<li>Wer sich eine sorgfältige VACUUM-Policy mit normalem VACUUM oder, noch besser, Autovacuum zurechtlegt, benötigt kein VACUUM FULL.</li>
        <li>Autovacuum sollte auf jeden Fall in Betracht gezogen werden, muss jedoch an den Workload angepasst werden.</li>
        <li>Ist dennoch mal eine Tabelle sehr stark aufgebläht, so kann mit aktuellen 8er PostgreSQL-Versionen mit CLUSTER die Tabelle häufiger deutlich schneller verkleinert werden, ohne das Problem der Indexfragmentierung. Da CLUSTER anhand eines Index die Tabelle reorganisiert, benötigt man mindestens einen Index. Ferner sollte unbedingt danach die Optimizerstatistiken mit ANALYZE aktualisiert werden.</li>
        <li>Bis einschließlich PostgreSQL 8.3 ist es unbedingt notwendig, sich vor Inbetriebnahme die Parameter max_fsm_pages und max_fsm_relations anzuschauen. Die Werte dieser Parameter kann nur durch einen Neustart der Datenbank geändert werden und beeinflussen die Anzahl an erfassten fragmentierten Speicherplatz in Tabellen und Indexe sowie die Anzahl an Tabellen und Indexe die durch VACUUM erfasst werden können (VACUUM FULL benutzt die sogenannte Free Space Map nicht). Ab PostgreSQL 8.4 werden die FSM pro Tabelle automatisch angepasst.
       <li>Auch VACUUM kann unter günstigen Umständen eine Tabelle verkleinern. Wenn die Tabelle am Ende nur noch leere Blöcke enthält und aktuell keine Transaktion neue Zeilen in diese Bereiche einlagern möchte, dann kann auch normales VACUUM die Tabelle entsprechend eindampfen.</li>
</ol>

<h2>Warum dann überhaupt noch VACUUM FULL?</h2>

<p>VACUUM FULL ist ein Kommando, das nicht für die tägliche Wartung ausgelegt ist. Ist das Kind einmal in den sprichwörtlichen Brunnen gefallen und eine Tabelle stark aufgebläht, so ist es je nach PostgreSQL-Version unausweichlich mit VACUUM FULL den Speicherplatz freizugeben. Bei älteren PostgreSQL-Versionen sollte sich der Administrator besonders bei sehr großen Speicherbedarf der Tabelle besser überlegen, auf das CLUSTER-Kommando auszuweichen. Möchte man dennoch VACUUM FULL benutzen, so sollte man bei älteren PostgreSQL-Versionen mit REINDEX ebenfalls die Indexe neu erzeugen. Weitere Infos zu diesem Thema finden sich im <a href="http://wiki.postgresql.org/wiki/VACUUM_FULL">PostgreSQL Wiki</a>.</p>

<h2>Weitere Informationen</h2>

<p>Alle Blog-Artikel zum Thema PostgreSQL werden auch als <a href="/de/postgresql/">Kategorie PostgreSQL</a> samt eigenem Feed angeboten. Wir helfen auch gerne mit <a href="http://www.credativ.de/home/software/softwareubersicht/datenbanken/postgresql_brief/">Support und Services für PostgreSQL</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>credativ beim PGDay Europe 2010</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2011/01/credativ-beim-pgday-europe-2010.html" />
    <id>tag:blog.credativ.com,2011:/de//1.196</id>

    <published>2011-01-17T10:53:43Z</published>
    <updated>2011-10-12T14:08:10Z</updated>

    <summary> Letzten Monat fand die alljährliche europäische PostgreSQL-Konferenz in Stuttgart statt. Die credativ GmbH war nicht nur Sponsor der Veranstaltung, sondern auch mit vier Mitarbeitern vor Ort, welche mehrere Vorträge gehalten haben. Die Folien der Vorträge sind nun verfügbar. Die...</summary>
    <author>
        <name>Michael Banck</name>
        
    </author>
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="pgdayeurope" label="PGDay Europe" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="postgreslogo.png" src="/de/static/postgreslogo.png" width="97" height="100" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /><br />
<em>Letzten Monat fand die alljährliche europäische <a href="http://2010.pgday.eu">PostgreSQL-Konferenz</a> in Stuttgart statt. Die credativ GmbH war nicht nur <a href="http://2010.pgday.eu/sponsors">Sponsor</a> der Veranstaltung, sondern auch mit vier Mitarbeitern vor Ort, welche mehrere Vorträge gehalten haben. Die Folien der Vorträge sind nun verfügbar.</em><br />
<p><br />
Die Konferenz fand im Stuttgarter Millennium-Hotel statt und wurde professionell und effizient von PostgreSQL Europe organisiert. Durch zahlreiche Kaffee-Pausen und die Konferenz-Party am Montag Abend war ein reger Austausch zwischen den Teilnehmern möglich.<br />
<p></p>

<p>
Die Vorträge von credativ waren im einzelnen:
<p>
<ul>
<li><a
href="http://www.postgresql.eu/events/schedule/pgday2010/session/68-migration-auf-freie-software-in-unternehmenskritischen-bereichen-unter-besonderer-betrachtung-von-postgresql/">
"Migration auf Freie Software in unternehmenskritischen Bereichen"</a> 
(<a
href="http://wiki.postgresql.org/images/a/a8/Pgday2010-migration.pdf">Folien</a>)
<p>
Dr. Michael Meskes fasste in diesem Vortrag die langjährige Erfahrung der credativ GmbH bei der Migration von kritischen Unternehmens-Bereichen auf Freie Software im allgemeinen und PostgreSQL für Datenbanken im speziellen zusammen.  
<p>
<li><a
href="http://www.postgresql.eu/events/schedule/pgday2010/session/76-embedded-sql-fur-postgresql/">
"Embedded SQL für PostgreSQL"</a> 
(<a href="http://wiki.postgresql.org/images/e/e0/Pgday2010-ecpg.pdf">Folien</a>)
<p>
In seinem zweiten Vortrag befasste sich Dr. Michael Meskes mit dem von ihm im PostgreSQL-Projekt als ECPG betreuten Embedded SQL, eine Datenbankschnittstelle in der Programmiersprache C. Da sie im SQL-Standard definiert ist und schon sehr lange und für alle Datenbanksysteme existiert, wird sie vielfach verwendet, so dass in dem Vortrag vor allem auch auf Migrationen eingegangen wurde.
<p>
<li><a
href="http://www.postgresql.eu/events/schedule/pgday2010/session/64-die-postgresql-community/">
"Die PostgreSQL Community"</a> 
(<a href="http://wiki.postgresql.org/images/7/74/Pg-community.pdf">Folien</a>)
<p>
Bernd Helmle, der technische Leiter der credativ GmbH für den Bereich Datenbanken, stellte in seinem Vortrag die Geschichte und den momentanen Stand der PostgreSQL-Community und deren Prozesse und Organisation vor und erläuterte zusätzlich die verschiedenen Möglichkeiten der Mitarbeit durch neue Mitglieder.  
<p>
<li><a
href="http://www.postgresql.eu/events/schedule/pgday2010/session/59-advanced-analytics-with-plr/">
"Advanced Analytics with PL/R"</a>
(<a
href="http://wiki.postgresql.org/images/8/84/PLR-PGDay.EU-2010.pdf">Folien</a>)
<p>
Schließlich hielt Joe Conway, CEO der US-amerikanischen credativ LLC einen (englisch-sprachigen) Vortrag über die PostgreSQL-Erweiterung PL/R, eine Zusammenführung von PostgreSQL mit R, der im Bereich Freier Software führenden Umgebung für mathematische und statistische Berechnungen und deren Visualisierung).
</ul>
<p>
Das nächste PostgreSQL-Event der credativ GmbH ist die <a href="http://www.linuxhotel.de/kurs/postgresql/">Schulung</a> im <a href="http://www.linuxhotel.de/">Linux-Hotel</a> vom 23. bis 25. Februar 2011.

<p>Alle Blog-Artikel zum Thema PostgreSQL werden auch als <a href="/de/postgresql/">Kategorie PostgreSQL</a> samt eigenem Feed angeboten. Wir helfen auch gerne mit <a href="http://www.credativ.de/home/software/softwareubersicht/datenbanken/postgresql_brief/">Support und Services für PostgreSQL</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>[Howto] Nagios-OpenNMS Migration Teil 2: Passive Checks</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/11/howto-nagios-opennms-migration-teil-2-passive-checks.html" />
    <id>tag:blog.credativ.com,2010:/de//1.181</id>

    <published>2010-11-24T09:34:00Z</published>
    <updated>2010-11-24T09:32:44Z</updated>

    <summary>Dies ist der zweite Teil unseres Migrations-Howtos für Netzwerk-Überwachungs-Systeme von Nagios nach OpenNMS. Nachdem im ersten Teil die Integration von aktiven Nagios-Checks via NRPE (Nagios Remote Plugin Executor) diskutiert wurde, wenden wir uns in diesem zweiten Teil den passiven Nagios-Checks...</summary>
    <author>
        <name>Michael Banck</name>
        
    </author>
    
        <category term="Howto" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Migration" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="nagiosopennmsmigrationhowto" label="nagios opennms migration howto" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<a href="http://blog.credativ.com/de/migration.png"><img alt="migration.png" src="http://blog.credativ.com/de/assets_c/2010/07/migration-thumb-150x134-74.png" width="120" height="107" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a><em>Dies ist der zweite Teil unseres Migrations-Howtos für Netzwerk-Überwachungs-Systeme von Nagios nach OpenNMS. Nachdem im <a href="http://blog.credativ.com/de/2010/10/howto-migration-von-nagios-zu-opennms.html">ersten Teil</a> die Integration von aktiven Nagios-Checks via NRPE (Nagios Remote Plugin Executor) diskutiert wurde, wenden wir uns in diesem zweiten Teil den passiven Nagios-Checks durch NSCA (Nagios Service Check Acceptor) zu.</em>

<h3>Passive Nagios-Checks</h3>

Da es momentan keine spezielle <a href="http://www.opennms.org/wiki/Main_Page">OpenNMS</a>-Unterstützung für passive NSCA-Checks
gibt, müssen diese durch andere Mechanismen abgebildet werden. In diesem Howto
verwenden wir für jeden passiven NSCA-Check einen eigenen Service, dessen
Status durch externe Benachrichtigung geändert wird und der durch den
<tt>PassiveStatusKeeper</tt>-Mechanismus von OpenNMS überwacht wird.

<h4>Einbinden der Nagios SNMP-Trap Informationen</h4>

Für die sinnvolle Behandlung von SNMP-Traps wird eine Registrierung des
jeweiligen MIBs  (Management Information Base) als OpenNMS-Event benötigt.
OpenNMS kennt zwar von Haus aus eine Vielzahl von SNMP-Traps, die aus dem <a
href="http://sourceforge.net/projects/nagiosplug/files/nagiosmib/1.0.1/nagiosmib-1.0.1.tar.gz/download">Nagios-MIB</a>
sind jedoch nicht darunter. Die benötigte <tt>Nagios.events.xml</tt> Datei
wurde aus dem MIB <a
href="http://bugzilla.opennms.org/show_bug.cgi?id=3646">erstellt</a> und muss
in das <tt>events/</tt>-Unterverzeichnis der OpenNMS Konfiguration kopiert
werden und in der <tt>eventconf.xml</tt> Datei via
<tt>&lt;event-file&gt;events/Nagios.events.xml &lt;/event-file&gt;</tt>
eingebunden werden. Der in der Nagios-MIB definierte SNMP-Trap für Service-Events ist
<tt>nSvcEvent</tt>, welcher als numerische OID (Object Identifier) den Code
<tt>.1.3.6.1.4.1.20006.1.7</tt> besitzt.

<h4>Benachrichtigungen via SNMP-Trap</h4>

Das für passive NSCA-Checks verwendete Programm <tt>send_nsca</tt> kann etwa
durch folgendes Shell-Skript ersetzt werden, welches die Benachrichtigung von
OpenNMS via snmptrap durchführt:

<pre class='brush: plain'>
  #!/bin/bash

  SNMPTRAP=/usr/bin/snmptrap
  COMMUNITY=public

  while getopts &quot;H:d:p:&quot; OPTION; do
    case $OPTION in
      H) HOST=$OPTARG;;
      d) DELIM=$OPTARG;;
      p) PORT=$OPTARG;;
      *) ;;
    esac
  done

  if [ &quot;x$DELIM&quot; == &quot;x&quot; ]; then
    DELIM=&quot;\t&quot;
  fi

  if [ &quot;x$HOST&quot; == &quot;x&quot; ]; then
    echo &quot;No host defined, exiting&quot;
    exit
  fi

  array=(`awk -F&quot;$DELIM&quot; '{for(i=1;i&lt;=3;i++){print $i};
                    for(i=4;i&lt;=NF;i++){gsub(/ /,&quot;_&quot;,$i); print $i}}'`);
  NODE=${array[0]}
  SERVICE=${array[1]}
  STATUS=${array[2]}
  REASON=`echo ${array[3]} | sed s/_/\ /g`&quot;'&quot;

  $SNMPTRAP -v 2c -c $COMMUNITY $HOST '' NAGIOS-NOTIFY-MIB::nSvcEvent \
    NAGIOS-NOTIFY-MIB::nHostname s &quot;$NODE&quot; \
    NAGIOS-NOTIFY-MIB::nHostStateID i 0 \
    NAGIOS-NOTIFY-MIB::nSvcDesc s &quot;$SERVICE&quot; \
    NAGIOS-NOTIFY-MIB::nSvcStateID i &quot;$STATUS&quot; \
    NAGIOS-NOTIFY-MIB::nSvcAttempt i 1 \
    NAGIOS-NOTIFY-MIB::nSvcDurationSec i 1 \
    NAGIOS-NOTIFY-MIB::nSvcGroupName s &quot;&quot; \
    NAGIOS-NOTIFY-MIB::nSvcLastCheck i 0 \
    NAGIOS-NOTIFY-MIB::nSvcLastChange i 0 \
    NAGIOS-NOTIFY-MIB::nSvcOutput s &quot;$REASON&quot;
</pre>

Das Skript versteht die beiden <tt>nsca_send</tt> Optionen <tt>-H</tt> (Host)
und <tt>-d</tt> (Feldtrenner). <tt>$HOST</tt> ist dabei der OpenNMS-Server, für
den die Benachrichtigung vorgesehen ist. Der awk-Befehl zerteilt den per
Feldtrenner separierten NSCA-String (z.B. „<tt>postgres-test; Vaccuum;0;Vaccuum
OK 1276511175</tt>&#8220;) in seine Bestandteile, welche den Variablen
<tt>$NODE</tt>, <tt>$SERVICE</tt>, <tt>$STATUS</tt> und <tt>$REASON</tt>
zugeteilt werden. Diese werden schließlich beim Aufruf von snmptrap den
<tt>nSvcEvent</tt> Parametern <tt>nHostname</tt>, <tt>nSvcDesc</tt>,
<tt>nSvcStateID</tt> und <tt>nSvcOutput</tt> zugeteilt.  Den übrigen Parametern
<tt>nHosteStateID</tt>, <tt>nSvcAttempt</tt>, <tt>nSvcDurationSec</tt>,
<tt>nSvcGroupName</tt>, <tt>nSvcLastCheck</tt> und <tt>nSvcLastChange</tt>
werden allgemeine Werte zugeteilt, da sie bei  der Umsetzung des
<tt>nSvcEvent</tt>-Traps in ein OpenNMS-Event keine Rolle spielen und auch beim
Aufruf von <tt>send_nsca</tt> nicht bekannt sind. Damit die Parameter des <tt>nSvcEvent</tt>-Traps von <tt>snmptrap</tt> aufgelöst werden können, muss das NAGIOS-MIB der Net-SNMP-Installation bekannt sein.

<h4>Umwandlung von Traps in Events</h4>

Die eingehenden SNMP-Traps werden in OpenNMS-Events vom Typ <tt>nSvcEvent</tt> umgewandelt. Um diese nun einzelnen Nagios-Checks bzw. OpenNMS-Services zzuuweisen, müssen sie vom <tt>translatord</tt>-Dämon in <tt>passiveServiceStatus</tt> Events umgewandelt werden. Folgender Abschnitt ist hierfür in der Datei <tt>translator-configuration.xml</tt> nötig:

<pre class='brush: plain'>
&lt;event-translation-spec 
  uei=&quot;uei.opennms.org/vendor/nagios/traps/nSvcEvent&quot;&gt;
    &lt;mappings&gt;
      &lt;mapping&gt;
        &lt;assignment type=&quot;parameter&quot; name=&quot;passiveNodeLabel&quot;&gt;
          &lt;value type=&quot;parameter&quot; 
            name=&quot;.1.3.6.1.4.1.20006.1.1.1.2&quot; 
            matches=&quot;.*&quot; 
            result=&quot;${0}&quot; 
          /&gt;
        &lt;/assignment&gt;
        &lt;assignment type=&quot;parameter&quot; name=&quot;passiveIpAddr&quot;&gt;
          &lt;value type=&quot;field&quot; 
            name=&quot;interface&quot; 
            matches=&quot;.*&quot; 
            result=&quot;${0}&quot;
          /&gt;
        &lt;/assignment&gt;
        &lt;assignment type=&quot;parameter&quot; name=&quot;passiveServiceName&quot;&gt;
          &lt;value type=&quot;parameter&quot; 
            name=&quot;.1.3.6.1.4.1.20006.1.3.1.6&quot; 
            matches=&quot;.*&quot; 
            result=&quot;${0}&quot; 
          /&gt;
        &lt;/assignment&gt;
        &lt;assignment type=&quot;parameter&quot; name=&quot;passiveStatus&quot;&gt;
          &lt;value type=&quot;sql&quot; 
            result=&quot;SELECT CASE WHEN ?::integer = 0  
                                     THEN 'Up'        
                                     ELSE 'Down' 
                                     END;&quot; &gt;  
            &lt;value type=&quot;parameter&quot; 
              name=&quot;.1.3.6.1.4.1.20006.1.3.1.7&quot; 
              matches=&quot;.*&quot; 
              result=&quot;${0}&quot; 
            /&gt;
          &lt;/value&gt;
        &lt;/assignment&gt;
        &lt;assignment type=&quot;parameter&quot; name=&quot;passiveReasonCode&quot;&gt;
          &lt;value type=&quot;parameter&quot; 
            name=&quot;.1.3.6.1.4.1.20006.1.3.1.17&quot; 
            matches=&quot;.*&quot; 
            result=&quot;${0}&quot; 
          /&gt;
        &lt;/assignment&gt;
        &lt;assignment type=&quot;field&quot; name=&quot;uei&quot;&gt;
          &lt;value type=&quot;constant&quot; 
            result=&quot;uei.opennms.org/services/passiveServiceStatus&quot; 
          /&gt;
        &lt;/assignment&gt;
      &lt;/mapping&gt;
    &lt;/mappings&gt;
&lt;/event-translation-spec&gt;
</pre>

Die <tt>uei</tt> in der zweiten Zeile bezeichnet dabei den SNMP-Trap, wie er in der
jeweiligen events-XML Datei angegeben ist. Die Parameter
<tt>passiveNodeLabel</tt>, <tt>passiveServiceName</tt>, <tt>passiveStatus</tt>
und <tt>passiveReasonCode</tt> werden aus den jeweiligen Parametern
<tt>$NODE</tt>, <tt>$SERVICE</tt>, <tt>$STATUS</tt> und <tt>$REASON</tt> des
SNMP-Traps übernommen. Für die Ermittlung von <tt>passiveStatus</tt> ist dabei
eine SQL-Abfrage nötig, um je nach Nagios-Status ein "Up" oder "Down" zu
senden. Die IP-Adresse kann direkt aus dem "<tt>interface</tt>"-Feld des Events
übernommen werden. Schließlich wird in der letzten Zuordnung die OpenNMS UEI (Unique Event Identifier) von <tt>nSvcEvent</tt> nach <tt>passiveServiceStatus</tt> umgewandelt.

<h4>Einbinden von Passiven Checks als Services</h4>

Passive NSCA-Checks können naturgemäß nicht mit capsd entdeckt werden, deshalb
müssen sie per <tt>LoopPlugin</tt> für jede betreffende Node per <tt>ip-match</tt>
Property in der <tt>capsd-configuration.xml</tt> Datei aktiviert werden:

<pre class='brush: plain'>
    &lt;protocol-plugin 
      protocol=&quot;NSCA-check1&quot; 
      class-name=&quot;org.opennms.netmgt.capsd.plugins.LoopPlugin&quot;
      scan=&quot;on&quot;&gt;
        &lt;property key=&quot;ip-match&quot; value=&quot;192.168.178.158&quot; /&gt;
        &lt;property key=&quot;ip-match&quot; value=&quot;172.16.17.213&quot; /&gt;
        &lt;property key=&quot;is-supported&quot; value=&quot;true&quot; /&gt;
    &lt;/protocol-plugin&gt;
</pre>

Dabei bezeichnet <tt>protocol</tt> den Namen des betreffenen OpenNMS-Service.
<p>
Zusätzlich ist auch ein entsprechender Poller in
<tt>poller-configuration.xml</tt> nötig, zum einen der
<tt>&lt;service&gt;</tt>-Anker:

<pre class='brush: plain'>
    &lt;service name=&quot;NSCA-check1&quot; 
      interval=&quot;30000&quot; 
      user-defined=&quot;false&quot; 
      status=&quot;on&quot;&gt;
    &lt;/service&gt;
</pre>

Sowie schließlich ein <tt>PassiveServiceMonitor</tt>: 

<pre class='brush: plain'>
&lt;monitor service=&quot;NSCA-check1&quot; 
  class-name=&quot;org.opennms.netmgt.poller.monitors.PassiveServiceMonitor&quot;
/&gt;
</pre>

Mit diesen Änderungen und nach einem Neustart von OpenNMS sollten die
NSCA-Checks für die entsprechende Node im OpenNMS-Webinterface erscheinen und
sich wie normale OpenNMS Dienste in Bezug auf Ausfälle etc. verhalten.]]>
        
    </content>
</entry>

<entry>
    <title>PGDay Europe 2010 in Stuttgart</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/10/pgday-europe-2010-in-stuttgart.html" />
    <id>tag:blog.credativ.com,2010:/de//1.194</id>

    <published>2010-10-26T08:00:00Z</published>
    <updated>2011-10-12T14:08:20Z</updated>

    <summary> Die PostgreSQL Europe Community wird dieses Jahr ihren jährlichen Kongress in Stuttgart abhalten. Das umfangreiche Vortragsprogramm umfasst vielfältige Themen rund um PostgreSQL, darunter Vorträge aus den Gebieten GIS, Entwicklung, Hochverfügbarkeit und vieles mehr. Die credativ GmbH wird mit Michael...</summary>
    <author>
        <name>Bernd Helmle</name>
        
    </author>
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="pgdayeurope" label="PGDay Europe" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img src="http://2010.pgday.eu/_media/pgdayeu10.small_banner.en.png" class="mt-image-right" width="120" height="60"></p>

<p><em><br />
Die <a href="http://www.postgresql.eu/">PostgreSQL Europe Community </a> wird dieses Jahr ihren jährlichen <a href="http://2010.pgday.eu/">Kongress</a> in Stuttgart abhalten. Das umfangreiche <a href="https://www.postgresql.eu/events/schedule/pgday2010/">Vortragsprogramm</a> umfasst vielfältige Themen rund um PostgreSQL, darunter Vorträge aus den Gebieten GIS, Entwicklung, Hochverfügbarkeit und vieles mehr. <br />
</em></p>

<p>Die credativ GmbH wird mit Michael Meskes, Joe Conway und Bernd Helmle als Silbersponsor mit Vorträgen zu den Themen </p>

<ul>
	<li><a href="https://www.postgresql.eu/events/schedule/pgday2010/session/64-die-postgresql-community/">Community</a></li>
        <li><a href="https://www.postgresql.eu/events/schedule/pgday2010/session/68-migration-auf-freie-software-in-unternehmenskritischen-bereichen-unter-besonderer-betrachtung-von-postgresql/">Migration auf freie Software in unternehmenskritischen Bereichen</a></li>
        <li><a href="https://www.postgresql.eu/events/schedule/pgday2010/session/59-advanced-analytics-with-plr/">Datenanalyse mit PL/R</a></li>
        <li><a href="https://www.postgresql.eu/events/schedule/pgday2010/session/76-embedded-sql-fur-postgresql/">Embedded SQL (ecpg)</a></li>
</ul>

<p>auf dem Kongress vertreten sein. Darüber hinaus bietet der PGDay ein eintägiges Tutorialprogramm. Details für die Registrierung, Unterkunft und Anreise können über die <a href="http://2010.pgday.eu/venue">Seite</a> des Kongresses abgerufen werden.</p>

<p>Alle Blog-Artikel zum Thema PostgreSQL werden auch als <a href="/de/postgresql/">Kategorie PostgreSQL</a> samt eigenem Feed angeboten. Wir helfen auch gerne mit <a href="http://www.credativ.de/home/software/softwareubersicht/datenbanken/postgresql_brief/">Support und Services für PostgreSQL</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>[Howto] Migration von Nagios zu OpenNMS</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/10/howto-migration-von-nagios-zu-opennms.html" />
    <id>tag:blog.credativ.com,2010:/de//1.169</id>

    <published>2010-10-19T08:54:00Z</published>
    <updated>2010-10-21T08:45:07Z</updated>

    <summary>Hier bei credativ setzen wir bevorzugt Nagios für das Monitoring ein, aber wenn es die Richtilinien bei Kunden verlangen, arbeiten wir natürlich auch mit anderen Überwachungs-Systemen. Dieses Howto beschreibt die Integration von aktiven und passiven Nagios-Checks in ein OpenNMS-System, so...</summary>
    <author>
        <name>Michael Banck</name>
        
    </author>
    
        <category term="Howto" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Migration" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="nagiosopennmsmigrationhowto" label="nagios opennms migration howto" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<img alt="migration.png" src="http://blog.credativ.com/de/assets_c/2010/07/migration-thumb-150x134-74.png" width="120" height="107" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /><em>Hier bei credativ setzen wir bevorzugt Nagios für das Monitoring ein, aber wenn es die Richtilinien bei Kunden verlangen, arbeiten wir natürlich auch mit anderen
Überwachungs-Systemen. Dieses Howto beschreibt die Integration von aktiven und
passiven Nagios-Checks in ein OpenNMS-System, so dass zwar die entwickelten Checks weiter verwendet, der Nagios-Server aber abgeschaltet werden kann.</em>

<h3>Einleitung</h3>

 <a
href="http://www.opennms.org/wiki/Main_Page">OpenNMS</a> ist ein Open-Source Netzwerk-Monitoring-System. Es ist in Java
geschrieben und benutzt PostgreSQL als Datenbank. Die Konfiguration erfolgt
über XML-Dateien, teilweise (vor allem Reports, Benachrichtigungen usw.) auch
über die Web-Oberfläche. OpenNMS ist relativ stark auf SNMP fokussiert, vor
allem was das Sammeln von Performance-Daten angeht. Ob Rechner (oder Dienste
auf Rechnern) erreichbar sind, kann jedoch auch einfach anderweitig abgefragt
werden.
<br />
Dieses Howto behandelt die Migration eines Netzwerk-Überwachungs-Systems von
<a href="http://www.nagios.org/">Nagios</a>/<a href="http://www.icinga.org/">Icinga</a> zu OpenNMS.  Für aktive Nagios-Checks beruht diese Migration auf dem
NRPE Plugin (Nagios Remote Plugin Executor), welches von der stabilen
OpenNMS-Version bereits unterstützt wird. Es erfordert also ein bereits
vorhandenes NRPE-Setup für Nagios, bzw. eine Migration des Nagios-Setups zu
NRPE.  Passive Nagios-Checks via NSCA (Nagios Service Check Acceptor) werden
durch SNMP-Traps in OpenNMS integriert und bedürfen keiner Änderung auf der
Nagios-Seite, lediglich das <tt>send_nsca</tt>-Skript muss zentral ausgetauscht werden.
Die Sammlung und Bearbeitung von Performance-Daten ist mit diesem Howto
nicht möglich, hierfür wäre eine Erweiterung der OpenNMS Code-Basis nötig.

<h3>Aktive Nagios-Checks</h3>

Die aktiven NRPE-Checks werden durch den OpenNMS Service <tt>pollerd</tt>
ersetzt. Dieser stellt das Modul <tt>NrpeMonitor</tt> zur Verfügung, welches im
Prinzip dazu gedacht ist, einen NRPE-Service auf einem der bekannten Rechner zu
überwachen. Dazu wird alle 5 Minuten (dieser Wert ist für jeden Dienst einzeln
konfigurierbar) versucht, den NRPE-Dämon zu erreichen, wobei im Normalfall der
Befehl „<tt>_NRPE</tt>&#8220; abgefragt wird, welcher vom NRPE-Dämon als
Spezialfall aufgefasst wird und bei normalen Betrieb ein „<tt>OK</tt>&#8220;
und die Versionsnummer von NRPE zurück liefert.
<br />
Alternativ kann jedoch in der Konfigurations-Datei des pollerd ein beliebiges
Kommando für den NRPE-Dämon eingestellt werden, z. B. <tt>check_load</tt>. Wenn
dieses Kommando dem NRPE-Dämon bekannt ist, wird es ausgeführt und liefert den
üblichen Nagios-Status zurück (<tt>OK</tt> mit Rückgabewert 0, <tt>WARNING</tt>
mit Rückgabewert 1, <tt>CRITICAL</tt> mit Rückgabewert 2 oder <tt>UNKNOWN</tt>
mit Rückgabewert 3) sowie die Performance-Daten, welche jedoch momentan vom
<tt>pollerd</tt> bzw. OpenNMS nicht ausgewertet werden.
<br />
Um die bestehenden Nagios-Checks in OpenNMS abzubilden, wird für jeden bisher verwendeten aktiven Nagios-Check ein NRPE-Service in OpenNMS definiert. Diese werden dann unabhängig voneinander in OpenNMS geführt. Hierfür sind zwei Konfigurations-Dateien von OpenNMS zu ändern:

<ul>
<li>Die Datei <tt>capsd-configuration.xml</tt> bestimmt, auf welche Dienste ein
Rechner vom OpenNMS Service <tt>capsd</tt> beim Scannen untersucht werden soll.</li>

<li>Die Datei <tt>poller-configuration.xml</tt> bestimmt, welche bzw. in
welcher Art die vom <tt>capsd</tt> gefundenen Dienste vom <tt>pollerd</tt>
überwacht werden sollen.</li>
</ul>

Aus Sicherheitsgründen sollten dem NRPE-Dämon keine variablen Parameter
übergeben werden; die Abfrage des gleichen Checks mit verschiedenen Parametern
oder Schwellen-Werten sollte also als jeweils unterschiedliche Checks in NRPE
definiert werden.

<h4>Anpassung der capsd Konfiguration</h4>

Für jeden NRPE-Check muss ein neuer protocol-plugin Abschnitt in
<tt>capsd-configuration.xml</tt> definiert werden. Der <tt>class-name</tt> ist
dabei stets <tt>org.opennms.netmgt.capsd.plugins.NrpePlugin</tt>, normalerweise
müssen lediglich die Werte für protocol und der für das Attribut
„<tt>command</tt>&#8220;  angepasst werden.  Ein Beispiel wäre:

<pre class='brush: plain'>
    &lt;protocol-plugin 
      protocol=&quot;NRPE-load&quot; 
      class-name=&quot;org.opennms.netmgt.capsd.plugins.NrpePlugin&quot; 
      scan=&quot;on&quot;&gt;
        &lt;property key=&quot;banner&quot; value=&quot;*&quot; /&gt;
        &lt;property key=&quot;port&quot; value=&quot;5666&quot; /&gt;
        &lt;property key=&quot;timeout&quot; value=&quot;3000&quot; /&gt;
        &lt;property key=&quot;retry&quot; value=&quot;2&quot; /&gt;
        &lt;property key=&quot;command&quot; value=&quot;check_load&quot; /&gt;
    &lt;/protocol-plugin&gt;
</pre>

Der Wert für „<tt>protocol</tt>&#8220; bezeichnet den Dienst, wie er intern
bzw. im Web-Interface von OpenNMS geführt werden soll. Das Attribut
„<tt>port</tt>&#8220; bezeichnet den Port, auf dem der NRPE-Dämon zu erreichen
ist, der Standard hierfür ist 5666. Das Attribut „<tt>command</tt>&#8220;
bezeichnet den vom NRPE-Dämon auszuführenden Check, wie er in
<tt>/etc/nagios/nrpe.cfg</tt> (oder evtl. <tt>/etc/nagios/nrpe_local.cfg</tt>)
definiert ist. In diesem Fall wird der übliche Nagios-Check
„<tt>check_load</tt>&#8220; für die Überprüfung der System-Auslastung in Bezug
auf die Anzahl der laufenden Prozesse ausgeführt.
<br />
Zu beachten ist hierbei, dass OpenNMS vor Version 1.6.9 nicht genauer den
Rückgabewert prüft und im Falle eines Checks, der nicht ein „<tt>OK</tt>&#8220;
(sondern vorübergehend ein „<tt>WARNING</tt>&#8220; oder
„<tt>CRITICAL</tt>&#8220;) zurück gibt den jeweiligen Check nicht erkennt.
Hierfür wurde von uns ein Patch entwickelt, welcher ab Version 1.6.9 in OpenNMS
enthalten ist. Falls eine frühere Version von OpenNMS eingesetzt wird, kann das
Problem durch eine temporäre Anpassung der Schwellen-Werte in der
NRPE-Konfigurations-Datei auf dem jeweiligen Rechner behoben werden, so dass
zum Zeitpunkt der Erkennung NRPE den Dienst als „<tt>OK</tt>&#8220; ansieht.
<br />
Falls in einem großen Rechner-Netzwerk eine Prüfung auf eine potentiell große
Anzahl von NRPE-Checks nicht im allgemeinen erwünscht ist, können diese auch
auf ein einzelnes Netzwerk-Segment oder einen IP-Bereich beschränkt werden.
Dazu wird die Beispiel-Konfiguration in einen protocol-configuration Abschnitt
eingebettet:

<pre class='brush: plain'>
    &lt;protocol-plugin 
      protocol=&quot;NRPE-load&quot; 
      class-name=&quot;org.opennms.netmgt.capsd.plugins.NrpePlugin&quot; 
      scan=&quot;off&quot;&gt;
        &lt;protocol-configuration scan=&quot;on&quot; user-defined=&quot;false&quot;&gt;
        &lt;range begin=&quot;192.168.178.0&quot; end=&quot;192.168.178.254&quot;/&gt;
        &lt;specific&gt;10.0.0.2&lt;/specific&gt;
        &lt;specific&gt;10.0.0.7&lt;/specific&gt;
        &lt;property key=&quot;banner&quot; value=&quot;*&quot; /&gt;
        &lt;property key=&quot;port&quot; value=&quot;5666&quot; /&gt;
        &lt;property key=&quot;timeout&quot; value=&quot;3000&quot; /&gt;
        &lt;property key=&quot;retry&quot; value=&quot;2&quot; /&gt;
        &lt;property key=&quot;command&quot; value=&quot;check_load&quot; /&gt;
        &lt;/protocol-configuration&gt;
    &lt;/protocol-plugin&gt;
</pre>

Wichtig ist hierbei der Tag <tt>&lt;range begin=&#8220;$IP_ADRESSE&#8220;
end=&#8220;$IP_ADRESSE&#8220;/&gt;</tt>, welcher den IP-Bereich definiert.
Alternativ können auch über
<tt>&lt;specific&gt;$IP_ADRESSE&lt;/specific&gt;</tt> Tags bestimmte
IP-Adressen festgelegt werden.  Durch die Option <tt>scan=
&#8220;off&#8220;</tt> in der ersten Zeile wird auf allen anderen Rechnern
nicht auf diesen Check geprüft.
<br />
Nach der Änderung von <tt>capsd-configuration.xml</tt> ist ein Neustart von
OpenNMS nötig; alternativ (ein OpenNMS-Neustart kann je nach Größe des überwachten Netzwerks eine längere Zeit dauern) kann der <tt>capsd</tt>-Daemon per JMX RPC neu gestartet werden:

<pre class='brush: plain'>
for i in stop init start; do
  wget --proxy=off -O /dev/null \
&quot;http://manager:manager@localhost:8181/invoke?objectname=OpenNMS%3AName%3DCapsd&amp;operation=$i&quot;; 
done
</pre>

Wenn die Änderung hauptsächlich für einen bestimmten Rechner veranlasst wurde
und sofort aktiv sein soll, muss für diesen Rechner ein „Rescan&#8220;
ausgeführt werden; entweder per Web-Interface oder mit Hilfe des
<tt>send-event.pl</tt> Skripts, welches das entsprechende Event
(<tt>forceRescan</tt>) an OpenNMS (auf localhost laufend) übermittelt:

<pre class='brush: plain'>
send-event.pl uei.opennms.org/internal/capsd/forceRescan localhost --interface 10.0.0.2
</pre>

<h4>Anpassung der pollerd Konfiguration</h4>

Die Konfigurations-Datei für den <tt>pollerd</tt>-Service muss für jeden
NRPE-Check an zwei Stellen geändert werden; zum einen muss ein
<tt>&lt;service&gt;</tt> Absatz hinzugefügt werden, in dem der zu überwachende
Service ähnlich wie in der capsd-Konfigurationsdatei definiert wird, außerdem
muss eine <tt>&lt;monitor service=[...]/&gt;</tt> Zeile eingefügt werden um die
Überwachung des jeweiligen Services zu aktivieren. Analog zu dem Beispiel im
letzten Abschnitt wäre dies etwa folgendes:

<pre class='brush: plain'>
    &lt;service name=&quot;NRPE-load&quot; 
      interval=&quot;300000&quot; 
      user-defined=&quot;false&quot; 
      status=&quot;on&quot;&gt;
        &lt;parameter key=&quot;retry&quot; value=&quot;3&quot; /&gt;
        &lt;parameter key=&quot;timeout&quot; value=&quot;3000&quot; /&gt;
        &lt;parameter key=&quot;port&quot; value=&quot;5666&quot; /&gt;
        &lt;parameter key=&quot;command&quot; value=&quot;check_load&quot; /&gt;
        &lt;parameter key=&quot;padding&quot; value=&quot;2&quot; /&gt;
    &lt;/service&gt;
</pre>

Jeweils zu ändern sind auch hier die Angaben für „<tt>service name</tt>&#8220;
und der Parameter „<tt>command</tt>&#8220;. Die Option
„<tt>interval</tt>&#8220; gibt das Überwachungs-Intervall in Millisekunden an,
der Standard-Wert ist hier üblicherweise 300000, was 5 Minuten entspricht.  Die
entsprechende Zeile für die Aktivierung des <tt>NrpeMonitor</tt> ist 

<pre class='brush: plain'>
&lt;monitor service=&quot;NRPE-load&quot; 
 class-name=&quot;org.opennms.netmgt.poller.monitors.NrpeMonitor&quot; 
/&gt;
</pre>

Auch beim Ändern der Datei <tt>poller-configuration.xml</tt> ist ein Neustart
von OpenNMS nötig, bzw. ein analoger Aufruf der RPCs wie im letzten Abschnitt,
mit <tt>Pollerd</tt> statt <tt>Capsd</tt> als Argument:

<pre class='brush: plain'>
for i in stop init start; do
  wget --proxy=off -O /dev/null \
&quot;http://manager:manager@localhost:8181/invoke?objectname=OpenNMS%3AName%3DPollerd&amp;operation=$i&quot;; 
done
</pre>

Im demnächst folgenden zweiten Teil dieses Howtos wird die Integration von passiven Nagios-Checks behandelt.]]>
        
    </content>
</entry>

<entry>
    <title>PostgreSQL 9.0 veröffentlicht</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/09/postgresql-90-veroffentlicht.html" />
    <id>tag:blog.credativ.com,2010:/de//1.193</id>

    <published>2010-09-20T13:39:20Z</published>
    <updated>2010-09-20T14:09:53Z</updated>

    <summary> Die PostgreSQL Community hat heute die Veröffentlichung der stabilen Version 9.0.0 bekanntgegeben. Mit der Version 9.0 verfügt PostgreSQL erstmals über eine eingebaute Replikationslösung (Streaming Replication) und die Möglichkeit, Standbyknoten im reinen Lesemodus zu betreiben (Hot Standby). Streaming Replication ermöglicht...</summary>
    <author>
        <name>Bernd Helmle</name>
        
    </author>
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="postgreslogo.png" src="/de/static/postgreslogo.png" width="97" height="100" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></p>

<p><em><br />
Die PostgreSQL Community hat heute die<a href="http://www.postgresql.org/about/news.1235"> Veröffentlichung</a> der stabilen Version 9.0.0 bekanntgegeben. <br />
</em><br />
Mit der Version 9.0 verfügt PostgreSQL erstmals über eine eingebaute Replikationslösung (Streaming Replication) und die Möglichkeit, Standbyknoten im reinen Lesemodus zu betreiben (Hot Standby). Streaming Replication ermöglicht die transparente Replikation auf einen oder mehrere Standbyknoten mit geringer Latenz. Des Weiteren gibt es viele Änderungen im Bereich Skalierbarkeit, Geschwindigkeit und Wartung:</p>

<ul>
	<li><a href="http://blog.credativ.com/de/2010/03/postgresql-optimizer-bits-join-removal.html">JOIN Removal</a></li>
        <li>Unterstützung für 64 Bit Windows</li>
        <li>Trigger mit Bedingungen</li>
        <li>Spaltenbasierte Trigger</li>
        <li>Anonyme Prozedurale Codeblöcke mit DO</li>
        <li>Verbessertes Nachrichtensystem mit LISTEN/NOTIFY</li>
</ul>

<p>Weitergehende Informationen können direkt über die <a href="http://www.postgresql.org/docs/9.0/static/release-9-0.html">Release Notes</a> der PostgreSQL Global Development Group eingesehen werden.</p>]]>
        
    </content>
</entry>

<entry>
    <title>PostgreSQL 9.0 - Entwickler-Sprechstunde bei credativ</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/09/postgresql-90---entwickler-sprechstunde-bei-credativ.html" />
    <id>tag:blog.credativ.com,2010:/de//1.191</id>

    <published>2010-09-16T13:36:27Z</published>
    <updated>2010-09-20T08:09:46Z</updated>

    <summary> Entwickler-Team beantwortet Fragen zur neuen PostgreSQL Version 9.0. Mönchengladbach, 20. September 2010 - Anlässlich der neuen PostgreSQL Version 9.0 bietet das internationale PostgreSQL-Entwicklerteam der credativ allen interessierten Unternehmen eine „Entwickler-Sprechstunde&quot; an. Mit dieser Aktion ermöglicht credativ eine direkte Kommunikation...</summary>
    <author>
        <name>Bernd Helmle</name>
        
    </author>
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="credativ" label="credativ" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="postgreslogo.png" src="/de/static/postgreslogo.png" width="97" height="100" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></p>

<p><em><br />
Entwickler-Team beantwortet Fragen zur neuen PostgreSQL Version 9.0.<br />
</em></p>

<p>Mönchengladbach, 20. September 2010 - Anlässlich der neuen PostgreSQL Version 9.0 bietet das internationale PostgreSQL-Entwicklerteam der credativ allen interessierten Unternehmen eine „Entwickler-Sprechstunde" an.<br />
Mit dieser Aktion ermöglicht credativ eine direkte Kommunikation zwischen Unternehmen und PostgreSQL-Entwicklern und steht für alle Fragen rund um die neue PostgreSQL Version 9.0 zur Verfügung.</p>

<p>Das neutrale und kostenfreie Informationsangebot richtet sich gezielt an Unternehmen, die den Einsatz von PostgreSQL planen, oder Ihre Anwendungen für die Unterstützung von PostgreSQL 9.0 vorbereiten möchten.<br />
Als Ansprechpartner aus dem PostgreSQL-Entwicklerteam stellen sich folgende Personen zur Verfügung:</p>

<ul>
<li>
<strong>Dr. Michael Meskes (Deutschland)</strong>
 <br>
Schwerpunkte: PostgreSQL 9.0 im Enterprise-Bereich, Migration und Strategie, Hochverfügbarkeit und Skalierbarbeit, PostgreSQL Embedded SQL.
</li>
<li>
<strong>Bernd Helmle (Deutschland)</strong> 
<br>
Schwerpunkte: Neue Funktionalitäten in PostgreSQL 9.0, Replikation (Hot Standby	& Streaming Replication), Skalierbarkeit, Performance und Tuning, Anwendungsentwicklung für PostgreSQL 9.0.
</li>
<li>
<strong>Joe Conway (USA)</strong> 
<br>
Schwerpunkte: Neue Funktionalitäten in PostgreSQL 9.0, PostgreSQL 9.0 im Enterprise- Bereich, Migration und Strategie, Replikation (Hot Standby & Streaming Replication), Procedural Language.
</li>
<li>
<strong>Dave Cramer (Kanada)</strong>
<br>
Schwerpunkte: Neue Funktionalitäten in PostgreSQL 9.0, PostgreSQL 9.0 JDBC Driver, Anwendungsentwicklung, PostgreSQL und Embedded SQL.
</li>
</ul>

<p>Dr. Michael Meskes, Geschäftsführer der credativ GmbH, erklärt dazu: <em>„Mit diesem Informationsangebot wollen wir eine direkte Verbindung zu den Unternehmen herstellen, die PostgreSQL bereits einsetzen, oder den Einsatz von PostgreSQL in ihrem Unternehmen evaluieren möchten. Als PostgreSQL-Entwickler sind wir natürlich sehr daran interessiert die Wünsche und Anregungen aufzunehmen, die aus Anwendersicht an uns gestellt werden. Die weitere Entwicklung einer Open Source Datenbank wie PostgreSQL lebt von dem Dialog und den Erfahrungen aller, die an PostgreSQL entwickeln oder PostgreSQL einsetzen."</em></p>

<p>Weitere Informationen können über unsere <a href="http://www.credativ.de/news/2010/09/17/postgresql-90-entwickler-sprechstunde-bei-credativ/">Internetseite</a> eingesehen werden.</p>]]>
        
    </content>
</entry>

<entry>
    <title>PostgreSQL Optimizer Bits: Auto Explain</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/08/postgresql-optimizer-bits-auto-explain.html" />
    <id>tag:blog.credativ.com,2010:/de//1.189</id>

    <published>2010-08-31T09:34:21Z</published>
    <updated>2010-08-31T11:49:36Z</updated>

    <summary> In dieser Folge stellen wir im Rahmen der &quot;Optimizer Bits&quot; das Modul auto_explain vor, das seit PostgreSQL Version 8.4 Bestandteil des contrib-Zweiges ist. Das Modul ermöglicht das Protokollieren von Abfrageplänen im PostgreSQL-Log und so eine bessere Analyse von Abfrageproblemen...</summary>
    <author>
        <name>Bernd Helmle</name>
        
    </author>
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Tipp" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="postgreslogo.png" src="/de/static/postgreslogo.png" width="97" height="100" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /><br />
<em>In dieser Folge stellen wir im Rahmen der "Optimizer Bits" das Modul auto_explain vor, das seit PostgreSQL Version 8.4 Bestandteil des contrib-Zweiges ist. Das Modul ermöglicht das Protokollieren von Abfrageplänen im PostgreSQL-Log und so eine bessere Analyse von Abfrageproblemen während der Laufzeit.</em></p>

<h3>Problemstellung</h3>

<p>Für viele Datenbank-Entwickler und -Administratoren stellt sich täglich das Problem, problematische Abfragen zu finden, zu analysieren und effizienter zu gestalten. Hauptproblem dieser Aufgabe ist das Identifizieren solcher Abfragen. Erstes Mittel ist der Logparameter <br />
</p>
<pre class='brush: text'>log_min_duration_statement = '30s'</pre><p></p>

<p>In diesem Falle werden alle Abfragen, die länger als 30 Sekunden dauern, in das Log der PostgreSQL-Datenbank geschrieben. Der Administrator hat dann die Möglichkeit, diese Abfrage aus dem Logfile zu ermitteln oder aber über weitere Tools wie bspw. <a href="http://pgfouine.projects.postgresql.org/">pgfouine</a> zu analysieren. Allerdings kann es unter Umständen passieren, dass bei der späteren Analyse andere Pläne entstehen, die es schwer machen, das tatsächliche Problem zu spezifizieren. Solche Abhängigkeiten machen es dem Entwickler schwer, das tatsächliche Problem genau einzugrenzen. </p>

<h3>Das Modul auto_explain</h3>

<p>Seit PostgreSQL 8.4 gibt es das contrib-Modul <em>auto_explain</em>, dass die Ausgabe von Abfrageplänen während der Testphase von Abfragen gestattet. Beispielsweise lassen sich damit Läufe von umfangreichen Batchjobs protokollieren, die Pläne später analysieren und entsprechende Optimierungen an den entsprechenden Abfragen vornehmen. <em>auto_explain</em> kann permanent oder nur zur Fehlersuche in die Datenbank geladen werden.</p>

<p>Zunächst müssen die contrib-Module von PostgreSQL 8.4 oder höher installiert sein. Dies ist von Distribution zu Distribution unterschiedlich, in der Regel sollte man nach einen Paket postgresql-contrib Ausschau halten. Wenn man PostgreSQL selbst aus den Tarballs baut, wechselt man in der Verzeichnis des entpackten Quelltextes und von dort aus in das entsprechende contrib-Verzeichnis (die folgenden Schritte erfordern in der Regel Rootrechte auf dem System):<br />
</p>
<pre class='brush: plain'>
$ cd &lt;QUELLTEXT&gt;
$ cd contrib/auto_explain
</pre><p></p>

<p>Je nachdem. ob bereits PostgreSQL komplett gebaut wurde (in der Regel hat man dann ja noch alle benötigten Sourcen), kann man dann <em>auto_explain</em> zusätzlich bauen:<br />
</p>
<pre class='brush: plain'>
$ make install
</pre><p></p>

<p>Sollte der Quelltextbaum bereits bereinigt worden (make clean), aber eine komplette Installation zur Verfügung stehen, so kann man mit PGXS-Unterstützung, ohne den kompletten Quelltextbaum nochmals kompilieren zu müssen, das Modul wie folgt bauen:<br />
</p>
<pre class='brush: plain'>
$ USE_PGXS=1 make install
</pre><p></p>

<p>Dies erfordert jedoch mindestens die Präsenz des Tools <em>pg_config</em> im Pfad der aktuellen Umgebung.<br />
Ist alles installiert, so kann das Modul direkt in eine Datenbankverbindung geladen werden. Dies ist nur als Superuser möglich, wie in diesem Beispiel über eine lokale Verbindung:<br />
</p>
<pre class='brush: sql'>
$ psql -U &lt;superuser&gt; &lt;dbname&gt;
#= LOAD 'auto_explain';
LOAD
</pre><p></p>

<p>Ist das Modul erfolgreich geladen worden, so steht es nur in dieser Datenbankverbindung zur Verfügung und kann auch nur von dort aus verwendet werden. Interessant ist dies, um nur Abfragen aus speziellen Verbindungen heraus zu protokollieren. Mit der folgenden SQL-Abfrage können die nun hinzugekommenen Konfigurationsparameter für <em>auto_explain</em> abgefragt werden:<br />
</p>
<pre class='brush: sql'>
#= SELECT name, setting FROM pg_settings WHERE name LIKE 'auto_explain%';
</pre><p></p>

<p>Dies sollte folgende Liste liefern:<br />
</p>
<pre class='brush: plain'>
                 name                   | setting 
------------------------------------+---------
 auto_explain.log_analyze           | off
 auto_explain.log_buffers           | off
 auto_explain.log_format            | text
 auto_explain.log_min_duration      | -1
 auto_explain.log_nested_statements | off
 auto_explain.log_verbose           | off
(6 rows)
</pre><p></p>

<p>Der wichtigste Parameter hier ist</p> <pre class='brush: plain'>auto_explain.log_min_duration</pre><p> Dieser aktiviert (Werte ab 0ms) oder deaktiviert (Wert -1) das Protokollieren von Abfrageplänen. Die weiteren Einstellungen sind im Einzelnen:</p>

<ul>
	<li><em>auto_explain.log_analyze = true|false</em>: Aktiviert oder deaktiviert das Loggen von EXPLAIN ANALYZE. Dies bedeutet das Timinginformationen <strong>aller</strong> Abfragen erfasst werden (auch diejenigen, die schneller ausgeführt werden als <em>auto_explain.log_min_duration</em>). Dies hat einen signifikanten Einfluss auf die Ausführungsgeschwindigkeit und sollte mit Bedacht gewählt werden.</li>
        <li><em>auto_explain.log_verbose = true|false</em>: Ausgabeformat mit zusätzlichen Informationen für EXPLAIN.</li>
        <li><em>auto_explain.log_nested_statements = true|on</em>: Hiermit werden auch Ausführungspläne von Statements innerhalb von Funktionen mitprotokolliert. So ist es nun auch möglich, die Pläne von SQL-Abfragen, die bspw. aus pl/pgsql-Prozeduren heraus ausgeführt werden, genauer zu untersuchen.</li>

</ul>

<p>Mit PostgreSQL 9.0 kommen zwei weitere Konfigurationsmöglichkeiten hinzu:</p>

<ul>
	<li><em>auto_explain.log_format = 'text'|'xml'|'json'|'yaml'</em>: Ermöglicht die Ausgabe der Abfragepläne im XML, JSON, oder YAML Format. <em>text</em> entspricht dem Standardformat.</li>
        <li><em>auto_explain.log_buffers = true|false</em>: Aktiviert oder deaktiviert die Ausgabe von Bufferinformationen in der Ausgabe des Planes. Dies enthält u.a. Informationen über Bufferhits (Treffer im Shared Buffer Pool). Voraussetzung hierfür ist das gleichzeitige Aktivieren des Parameters <em>log_analyze</em>.</li>
</ul>

<h3>Anwendungsbeispiel</h3>

<p>Im folgenden betrachten wir ein wegen der Übersichtlichkeit ein stark vereinfachtes Anwendungsbeispiel. In einer Datenbank gibt es seit kurzem ein Geschwindigkeitsproblem mit einer Funktion, die plötzlich stark variierende Ausführungszeiten aufweist. Die Funktion wird vielfältig eingesetzt, da sie bestimmte ID-Nummern einem Datum zuordnet. Die Definition dieser Funktion sei wie folgt:<br />
</p>
<pre class='brush: sql'>
CREATE OR REPLACE FUNCTION get_test_datum_ids(p_datum timestamp) 
RETURNS SETOF integer 
STABLE 
LANGUAGE plpgsql
AS 
$$ 
DECLARE 
   v_id int; 
BEGIN 
   FOR v_id IN SELECT * FROM test WHERE datum &lt; p_datum 
   LOOP 
      RETURN 
         NEXT v_id; 
   END LOOP; 

   RETURN; 
END; 
$$;
</pre><p></p>

<p>Geübte PostgreSQL-Anwender werden schnell bemerken, dass diese Funktion deutlich effizienter implementiert werden kann, für dieses Beispiel jedoch ist eine derartige Implementierung gut geeignet. Der Administrator kann nun über <em>log_min_duration_statement</em> langsame Funktionsaufrufe zwar protokollieren, muss jedoch um dem Geschwindigkeitsproblem auf den Grund zu gehen, u.U. auf das System übertragen oder von Hand ausführen. Bei näherer Betrachtungsweise entsteht dann der Verdacht, dass die Schleife und die dort enthaltene Abfrage suboptimal sein könnte. Üblicherweise wird dann die Abfrage mit EXPLAIN geprüft:<br />
</p>
<pre class='brush: sql'>
#= \timing on
#= EXPLAIN ANALYZE SELECT id FROM test WHERE datum &lt; '01.02.2008'::timestamp;
                                                       QUERY PLAN                                                        
-------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on test  (cost=4.50..16.90 rows=32 width=4) (actual time=0.039..0.054 rows=31 loops=1)
   Recheck Cond: (datum &lt; '2008-02-01 00:00:00'::timestamp without time zone)
   -&gt;  Bitmap Index Scan on test_datum_idx  (cost=0.00..4.49 rows=32 width=0) (actual time=0.025..0.025 rows=31 loops=1)
         Index Cond: (datum &lt; '2008-02-01 00:00:00'::timestamp without time zone)
 Total runtime: 0.114 ms
(5 rows)
</pre><p></p>

<p>Insofern nichts Verdächtiges, die Abfrage nutzt einen vorhandenen Index auf dem Feld <em>datum</em>. Mit <em>auto_explain</em> können wir nun jedoch ebenfalls direkt die Pläne aus dem Funktionskörper heraus prüfen:<br />
</p>
<pre class='brush: sql'>
#= SET auto_explain.log_analyze TO on;
SET
#= SET auto_explain.log_nested_statements TO on;
SET
#= SET auto_explain.log_min_duration TO '0ms';
SET
#= SELECT get_test_datum_ids('01.02.2008'::timestamp);
</pre><p></p>

<p>Durch das Setzen von <em>auto_explain.log_analyze TO on</em> wird die Funktion tatsächlich ausgeführt und alle Timingparameter erfasst. Nach dem Ausführen sollten sich folgende Zeilen auf STDOUT, im Logfile oder <em>syslog</em> finden, je nach dem was für ein <em>log_destination</em> verwendet wird:<br />
</p>
<pre class='brush: plain'>
LOG:  duration: 0.616 ms  plan:
	Query Text: SELECT * FROM test WHERE datum &lt; p_datum
	Seq Scan on test  (cost=0.00..25.70 rows=365 width=12) (actual time=0.424..0.597 rows=31 loops=1)
	  Filter: (datum &lt; $1)
ZUSAMMENHANG:  PL/pgSQL function &quot;get_test_datum_ids&quot; line 1 at FOR über SELECT-Zeilen
</pre><p></p>

<p>Dieser Plan sieht schon deutlich anders aus. Zwar ist die Ausführungsgeschwindigkeit aufgrund der in diesem Beispiel recht kleinen Datenmengen noch überschaubar, jedoch kann man sich jetzt schon vorstellen, dass bei einer größeren Datenmenge dieser Plan schnell ineffizient werden kann. Doch warum wird an dieser Stelle ein anderer Plan verwendet?</p>

<p>Des Rätsels Lösung liegt an der parametrisierten Form dieser Abfrage, die in der FOR-Schleife verwendet wird. Der Optimizer kann nur einen generischen Plan für diese Art der <strong>WHERE</strong>-Bedingung erzeugen. Da der Offset für den Bereich innerhalb der Bedingung nicht zur Planungszeit zur Verfügung steht, muss der Optimizer den Plan auf einem möglichst allgemeingültigen Kostenmodell berechnen, der effizient für jeden Wert in der <strong>WHERE</strong>-Bedingung ist.</p>

<h3>Konfiguration über postgresql.conf</h3>

<p><em>auto_explain</em> lässt sich auch global über die postgresql.conf konfigurieren. Möchte man als DBA beispielsweise das Modul auf jeden Fall für jede Datenbankverbindung laden, so benötigt man einen entsprechend konfigurierten Parameter <em>shared_preload_libraries</em> in der postgresql.conf (diese befindet sich in der Regel im Datenbankverzeichnis ihrer PostgreSQL-Installation, kann aber bei einigen Distributionen abweichen):<br />
</p>
<pre class='brush: plain'>
## globales Aktivieren von auto_explain
shared_preload_libraries = 'auto_explain'
</pre><p></p>

<p>Dies lädt das Modul bereits beim Start für jede Datenbankverbindung. Da PostgreSQL noch nicht die Konfigurationsparameter beim Laden der Konfigurationsdatei kennt, muss dies noch zusätzlich über den Parameter <em>custom_variable_classes</em> dem Server bekannt gemacht werden:<br />
</p>
<pre class='brush: plain'>
custom_variable_classes = 'auto_explain'
</pre><p></p>

<p>Nun kann in der Datei <em>postgresql.conf</em> der Parameter global konfiguriert werden, wie an folgendem Listing beispielhaft gezeigt:<br />
</p>
<pre class='brush: plain'>
auto_explain.log_min_duration = '30s'
auto_explain.log_format = 'xml'
</pre><p></p>

<h3>Zusammenfassung</h3>

<p><em>auto_explain</em> ist ein nützliches Tool, um Geschwindigkeitsproblemen innerhalb der Datenbank anhand der EXPLAIN-Ausgaben auf den Grund zu gehen. Als wertvoll stellt sich die Möglichkeit heraus, eingebettete Abfragen innerhalb von SQL- oder PL/pgsql-Prozeduren mitprotokollieren zu können, um so auch die Abfragen im entsprechenden Kontext auf Fehler oder unterschiedliche Pläne hin untersuchen zu können.  <br />
<em>auto_explain</em> eignet sich jedoch nicht, um dauerhaft auf produktiven Datenbankmaschinen eingeschaltet zu sein, hierfür ist der zusätzliche Aufwand für das Ausschreiben der Pläne zu groß. Insofern sollte auf jeden Fall Gebrauch von <em>auto_explain.log_min_duration</em> gemacht werden, so dass wirklich nur sehr problematische Abfragen bei Überschreiten einer bestimmten Zeitschwelle protokolliert werden. Auch sollte dann auf produktiven Maschinen auf jeden Fall <em>auto_explain.log_analyze</em> deaktiviert sein, da dies auch Abfragen, die noch unterhalb der Zeitschwelle von <em>auto_explain.log_min_duration</em> liegen, negativ beeinflusst.</p>]]>
        
    </content>
</entry>

<entry>
    <title>credativ veröffentlicht den Open Source Schutzbrief</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/08/credativ-veroffentlicht-den-open-source-schutzbrief.html" />
    <id>tag:blog.credativ.com,2010:/de//1.188</id>

    <published>2010-08-17T10:15:00Z</published>
    <updated>2010-08-17T10:15:05Z</updated>

    <summary>Ab sofort bietet credativ den Open Source Schutzbrief an, einen Notfallsupport für IT-Infrastrukturen. Mit dem Open Source Schutzbrief bietet credativ eine Lösung für alle Diejenigen, die ihre IT grundsätzlich selbst verwalten, aber im Notfall doch Zugriff auf Expertenwissen benötigen. Dr....</summary>
    <author>
        <name>Roland Wolters</name>
        <uri>http://www.credativ.de</uri>
    </author>
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Support" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><em>Ab sofort bietet credativ den Open Source Schutzbrief an, einen Notfallsupport für IT-Infrastrukturen.</em><br /><br />
Mit dem <a href="http://www.credativ.de/home/open-source-support-center/open-source-schutzbrief/">Open Source Schutzbrief</a> bietet credativ eine Lösung für alle Diejenigen, die  ihre IT grundsätzlich selbst verwalten, aber im Notfall doch Zugriff auf Expertenwissen benötigen.</p>

<p>Dr. Michael Meskes, credativs Geschäftsführer, bringt das grundlegende Problem in der <a href="http://www.pressebox.de/pressemeldungen/credativ-gmbh/boxid/366221">Pressemitteilung</a> auf den Punkt:<br />
<blockquote><br />
Leider ist es oft so, dass Störungen und Notfälle in den absolut ungünstigsten Situationen eintreten. Viele Unternehmen werden die folgenden Situationen kennen: Die Administratoren, die sich mit dem betroffenen Open Source Systemen am besten auskennen sind gerade in Urlaub oder krank. Die Störung erfolgt genau in der Hauptgeschäftszeit. Der Fehler lässt sich nicht genau lokalisieren.<br />
</blockquote><br />
In einem solchen Fall müssen externe Dienstleister her, um die Systeme wieder lauffähig zu machen. Die Zeit ist dann aber zu kurz, um fähige Dienstleister zu suchen, Verträge auszuhandeln und und und.</p>

<p>Der Open Source Schutzbrief aber wirkt hier als eine Art Versicherung, mit der garantiert wird, dass auch im schlimmsten Fall umgehend fähige Techniker das Problem angehen.</p>]]>
        
    </content>
</entry>

<entry>
    <title>CIOZone Interview</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/08/ciozone-interview.html" />
    <id>tag:blog.credativ.com,2010:/de//1.187</id>

    <published>2010-08-11T14:28:23Z</published>
    <updated>2010-08-11T14:29:10Z</updated>

    <summary>CIOZone, ein soziales Netzwerk, das auf Kontakte zwischen CIOs spezialisiert ist, führte kürzlich ein Gespräch mit Dr. Michael Meskes, dem Gründer der credativ GmbH. CIOZone ist als spezialisiertes, soziales Netzwerk eine zentrale Anlaufstelle und Kommunikationsplattform für CIOs. CIOZones Roger Green...</summary>
    <author>
        <name>Lukas Gärtner</name>
        <uri>http://blog.credativ.de</uri>
    </author>
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><a href="http://blog.credativ.com/de/assets_c/2010/08/mme-ciozone-79.html" onclick="window.open('http://blog.credativ.com/de/assets_c/2010/08/mme-ciozone-79.html','popup','width=443,height=324,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://blog.credativ.com/de/assets_c/2010/08/mme-ciozone-thumb-100x73-79.png" width="100" height="73" alt="mme-ciozone.png" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a><em>CIOZone, ein soziales Netzwerk, das auf Kontakte zwischen CIOs spezialisiert ist, führte kürzlich ein Gespräch mit Dr. Michael Meskes, dem Gründer der credativ GmbH.</em><br/><br />
CIOZone ist als spezialisiertes, soziales Netzwerk eine zentrale Anlaufstelle und Kommunikationsplattform für CIOs. CIOZones Roger Green nahm sich vor einigen Tagen die Zeit, zu uns nach Deutschland zu reisen, und ein ausführliches Interview mit Michael Meskes zu führen. Die Geschichte des Unternehmens kommt dabei genauso zur Sprache wie auch aktuelle und zukünftige Entwicklungen im Bereich Open Source.</p>

<p>Das vollständige Interview sowie ein Videomitschnitt finden sich auf <a href="http://www.ciozone.com/index.php/Open-Source-Video/Interview-with-Dr.-Michael-Meskes-Founder/CEO-Credativ-GMBH-Germany.html">ciozone.com</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>[Howto] SASL mit Postfix via MySQL und libsasl-auxprop [Update]</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/06/howto-sasl-mit-postfix-via-mysql-und-saslauthdrimap-auf-centos.html" />
    <id>tag:blog.credativ.com,2010:/de//1.168</id>

    <published>2010-06-28T10:30:00Z</published>
    <updated>2010-11-11T09:40:32Z</updated>

    <summary>Um Postfix als SMTP-Server für viele Nutzer anzubieten, muss er auf eine Nutzerdatenbank zurück greifen. Dieser Artikel zeigt am Beispiel der Groupware Zarafa, wie Postfix via libsasl mit einer MySQL-Nutzerdatenbank verknüpft wird. Mit Hilfe von SASL können Nutzer sich gegen...</summary>
    <author>
        <name>Roland Wolters</name>
        <uri>http://www.credativ.de</uri>
    </author>
    
        <category term="Howto" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="RHEL/CentOS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="tux.jpg" src="/de/static/tux.jpg" width="86" height="102" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /><em>Um Postfix als SMTP-Server für viele Nutzer anzubieten, muss er auf eine Nutzerdatenbank zurück greifen. Dieser Artikel zeigt am Beispiel der Groupware Zarafa, wie Postfix via libsasl mit einer MySQL-Nutzerdatenbank verknüpft wird.</em></p>

<p>Mit Hilfe von <a href="http://de.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer">SASL</a> können Nutzer sich gegen Postfix authentifizieren und E-Mails einliefern, damit dieser die weiter zustellt. Dies ist zum Beispiel interessant, wenn der Postfix als zentraler MTA für eine Firma oder größere Institution genutzt werden soll.</p>

<p>Die Schwierigkeit besteht darin, eine vorhandene Nutzerdatenbank einzubinden, hier die MySQL-DB der Groupware Zarafa. Häufig wird dabei auf PAM zurückgegriffen: Postfix authentifiziert gegen PAM, via PAM kann eine Vielzahl verschiedenster Plugins angebunden werden, um z.B. auch auf Datenbanken zurück zu greifen. Ein anderer Weg ist, die Bibliothek libsasl des Cyrus-Projekts zu nutzen, da dies ebenfalls auf verschiedene Plugins zurückgreifen kann.</p>

<p>Dafür muss im ersten Schritt Postfix in der <tt>main.cf</tt> für die Authentifizierung gegen SASL fit gemacht werden:<br />
</p>
<pre class='brush: text'>
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = smtpd
smtpd_sender_restrictions = permit_sasl_authenticated, ...
</pre><p></p>

<p><tt>saslauthd</tt> wird nicht direkt aufgerufen, es wird nur die libsasl-Bibliothek genutzt. Daher kann <tt>/etc/sysconfig/saslauthd</tt> auf den Standardwerten bleiben. Der Dienst selbst braucht nicht gestartet werden!</p>

<p>Es fehlt aber noch die eigentliche Konfiguration, in der unter Anderem auch die Syntax der MySQL-Abfrage definiert wird. Diese Konfiguration wird in der <tt>smtpd.conf</tt> definiert, die standardmäßig unter <tt>/usr/lib/sasl2/</tt> erwartet wird. Erst wenn sie dort *nicht* vorliegt, wird sie unter <tt>/etc/sasl2/smtpd.conf</tt> erwartet. Warum dort nicht zuerst gesucht wird, entzieht sich meinem Verständnis. Es bietet sich also an, einen symbolischen Link auf die Datei unter <tt>/etc/</tt> zu erstellen...<br />
So oder so muss der Inhalt wie folgt aussehen:<br />
</p>
<pre class='brush: text'>
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: PLAIN LOGIN
allow_plaintext: true
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: zarafa
sql_passwd: ******
sql_database: zarafa
sql_select: select value from objectproperty where objectid=(select objectid from objectproperty where value='%s' limit 1) and propname='loginname'
</pre><p></p>

<p>Dabei müssen die natürlich die Sternchen für das Passwort gegen das tatsächliche Passwort ersetzt werden. Sind alle Komponenten neu gestartet worden, können E-Mails von Nutzern eingeliefert werden, die sich via libsasl gegen die MySQL-Datenbank von Zarafa authentifizieren.</p>

<p>Alle Artikel zum Thema CentOS stehen auch als <a href="http://blog.credativ.com/de/rhelcentos/">eigene Kategorie</a> mit eigenem Feed zur Verfügung. Falls Ihr tiefergehende Fragen zu <a href="http://www.credativ.de/home/software/softwareubersicht/groupware/zarafa/">Support und Services für Zarafa</a> habt, oder euch <a href="http://www.credativ.de/home/software/softwareubersicht/betriebssysteme/centos/">Supportangebote für CentOS</a> interessieren, seid ihr bei uns ebenfalls richtig.</p>

<p><strong>Update:</strong><br />
Ursprünglich hatte ich in diesem Artikel auf saslauthd direkt aufgesetzt, dann aber fälschlicherweise nicht gegen die DB, sondern gegen den IMAP-Server von Zarafa (via rimap) authentifiziert. Danke an Uli in den Kommentaren für den Hinweis. Mehr Infos zu saslauthd, libsasl und den unterschiedlichen Einsatzszenarien finden sich im <a href="http://www.postfix.org/SASL_README.html">SASL-Readme von Postfix</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>credativ US und Forest Informatics vereinbaren Partnerschaft</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/06/credativ-us-und-forest-informatics-vereinbaren-partnerschaft.html" />
    <id>tag:blog.credativ.com,2010:/de//1.167</id>

    <published>2010-06-17T10:37:58Z</published>
    <updated>2010-06-17T10:40:26Z</updated>

    <summary>Die US-Abteilung von credativ ist mit dem auf Forst-Ressourcen-Management spazialisierten Unternehmen Forest Informatics eine Partnerschaft eingegangen. Zusammen bieten die beiden Unternehmen Training und Support für die Verarbeitung von Geodaten mit Hilfe von Open-Source-Software an. Forest Informatics bietet Lösungen rund um...</summary>
    <author>
        <name>Roland Wolters</name>
        <uri>http://www.credativ.de</uri>
    </author>
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Support" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><em>Die US-Abteilung von credativ ist mit dem auf Forst-Ressourcen-Management spazialisierten Unternehmen Forest Informatics eine Partnerschaft eingegangen. Zusammen bieten die beiden Unternehmen Training und Support für die Verarbeitung von Geodaten mit Hilfe von Open-Source-Software an.</em><br />
<br /><br />
Forest Informatics bietet Lösungen rund um die Verwaltung von forstwirtschaftlichen Gebieten mit Hilfe von Geodaten an. Ein Schwerpunkt liegt dabei auf der Offenheit der eingesetzten Lösungen: bewusst wird den Kunden von proprietären Lösungen abgeraten, die Vorteile von Open Source werden klar wahr genommen und vermittelt. Dieser Ansatz versteht sich exzellent mit der Perspektive credativs: als Open-Source-Unternehmen kennen wir nicht nur die Vorteile von Open Source, wir vermitteln sie aktiv an unsere Kunden weiter und stehen für die Vorteile und Ideale dahinter ein.</p>

<p>Auf Grund dieser Gemeinsamkeiten haben sich beide Unternehmen dazu entschlossen, <a href="http://www.prweb.com/releases/2010/06/prweb4125794.htm">eine Partnerschaft einzugehen</a>, und Kunden gemeinsam Open-Source-Lösungen und -Schulungen für GIS und Forst-Ressourcen-Management anzubieten. Die Themenschwerpunkte sind dabei PostgreSQL, PostGIS, R, und PL/R.</p>

<p>Zur Einführung wird es im September einen dreitägigen Kurs <a href="http://www.credativ.us/pg_w_spatial/">Intro to PostgreSQL with Spatial Analysis Extensions</a> in San Diego geben. Den Kursteilnehmern werden dabei sowohl Datenbank-Grundlagen anhand von PostgreSQL näher gebracht, also auch Geodaten-Management mit Hilfe von PostGIS und die Prinzipien der Datenverarbeitung mit Hilfe von PL/R und R erlernen können.</p>

<p>Wir von credativ freuen uns über diesen neuen Partner, und wünschen von Deutschland aus alles Gute auf die andere Seite des Atlantiks!</p>

<p>Mehr über credativs <a href="http://www.credativ.de/home/open-source-support-center/unser-support-angebot/">Open-Source-Angebote</a> erfahrt Ihr auf unserer Webseite. Wir freuen uns aber auch gerne über Kommentare und Fragen hier auf dem Blog oder über unser <a href="http://www.credativ.de/home/uber-credativ/kontakt/">Kontakt-Formular</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>PostgreSQL 9.0beta2</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/06/postgresql-90beta2.html" />
    <id>tag:blog.credativ.com,2010:/de//1.166</id>

    <published>2010-06-10T10:40:56Z</published>
    <updated>2010-06-10T22:04:15Z</updated>

    <summary> Vor einigen Tagen wurde eine weitere Betaversion von PostgreSQL 9.0 veröffentlicht, die unter anderem Syntax-Änderungen und pg_upgrade mit sich bringt. Die Fertigstellung der neuen PostgreSQL-Version 9.0 schreitet voran, es wurden einige wichtige Änderungen gegenüber der Beta1 vorgenommen: Die Syntax...</summary>
    <author>
        <name>Bernd Helmle</name>
        
    </author>
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="postgresql" label="PostgreSQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="postgreslogo.png" src="/de/static/postgreslogo.png" width="97" height="100" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /><br />
<em>Vor einigen Tagen wurde eine weitere Betaversion von PostgreSQL 9.0 veröffentlicht, die unter anderem Syntax-Änderungen und pg_upgrade mit sich bringt.</em><br />
<br /><br />
Die Fertigstellung der neuen PostgreSQL-Version 9.0 schreitet voran, es wurden einige wichtige Änderungen gegenüber der Beta1 vorgenommen:</p>

<ul>
	<li>Die Syntax für benannte Parameter in Funktionen wurde geändert. Statt <code>CREATE FUNCTION f(expression AS parameter_name, ...)</code> wird nun <code>CREATE FUNCTION f(parameter_name := expression, ...)</code> verwandt. Grund hierfür ist insbesondere eine <a href="http://archives.postgresql.org/pgsql-hackers/2010-05/msg01501.php">vorbereitende Maßnahme</a> auf den Entwurf des kommenden SQL Standard 2011. Dieser sieht für die Zuweisung die Syntax <code>CREATE FUNCTION f(parameter_name => value, ...)</code> vor, jedoch kann PostgreSQL nicht ohne weiteres <em>=></em> adaptieren, da beliebige Operatoren diesen Bezeichner annehmen können (siehe auch die <em><a href="http://www.postgresql.org/docs/9.0/static/sql-createoperator.html">CREATE OPERATOR</a></em> Syntax). Da der SQL Standard 2011 sich noch in der Entwurfsphase befindet, und die Anpassung hierfür aufwändig ist sowie einige heftige Inkompatibilitäten nach sich ziehen würde, wurde entschieden, vorerst eine möglichst ähnliche Syntax zu implementieren.</li>
    <li>pg_upgrade für Migrationen ohne Dump/Restore auf PostgreSQL 9.0 wurde in den <em>contrib</em>-Zweig des Quelltextbaumes aufgenommen. pg_upgrade erlaubt die Konvertierung eines binärkompatiblen Datenbankclusters ab Version 8.3.</li>
    <li>Sicherheitsrelevante Fixes, siehe hierzu auch die Veröffentlichungen der Updates für 8.4.4, 8.3.11, 8.2.17, 8.1.21, 8.0.27 und 7.4.29</li>
    <li>Bug Fixes nach Reports von Betatestern, aber auch wichtige Korrekturen für Hot Standby und Streaming Replication</li>
</ul>

<p>Wie immer sind alle Interessierten aufgefordert, ihre Testergebnisse und -Eindrücke den Entwicklern mitzuteilen. Informationen für das Vorgehen für Tests und Erstellen von Fehlerberichten können im <a href="http://wiki.postgresql.org/wiki/HowToBetaTest">Wiki</a> eingesehen werden.</p>

<p>Alle Blog-Artikel zum Thema PostgreSQL werden auch als <a href="/de/postgresql/">Kategorie PostgreSQL</a> samt eigenem Feed angeboten. Wir helfen auch gerne mit <a href="http://www.credativ.de/home/software/softwareubersicht/datenbanken/postgresql_brief/">Support und Services für PostgreSQL</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Gelebtes Open Source - PostgreSQL-Entwickler bei credativ</title>
    <link rel="alternate" type="text/html" href="http://blog.credativ.com/de/2010/05/gelebtes-open-source---postgresql-entwickler-bei-credativ.html" />
    <id>tag:blog.credativ.com,2010:/de//1.165</id>

    <published>2010-05-25T14:20:26Z</published>
    <updated>2010-05-25T14:15:20Z</updated>

    <summary> Kürzlich wurde eine Statistik veröffentlicht, bei der die einzelnen Committer des PostgreSQL-Projekts aufgelistet wurden. Mit dabei sind mehrere Mitarbeiter von credativ. PostgreSQLs Andrew Dunstan Statistiken hat eine Statistik über die Produktivität der PostgreSQL-Committer veröffentlicht. Darin ist aufgeführt, welche Entwickler...</summary>
    <author>
        <name>Roland Wolters</name>
        <uri>http://www.credativ.de</uri>
    </author>
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Open Source" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PostgreSQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="credativ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://blog.credativ.com/de/">
        <![CDATA[<p><img alt="postgreslogo.png" src="/de/static/postgreslogo.png" width="97" height="100" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /><br />
<em>Kürzlich wurde eine Statistik veröffentlicht, bei der die einzelnen Committer des PostgreSQL-Projekts aufgelistet wurden. Mit dabei sind mehrere Mitarbeiter von credativ.</em><br />
<br /><br />
PostgreSQLs Andrew Dunstan Statistiken hat eine Statistik über die Produktivität der PostgreSQL-Committer <a href="http://people.planetpostgresql.org/andrew/index.php?/archives/79-30,000-commits-and-still-going-strong.html">veröffentlicht</a>. Darin ist aufgeführt, welche Entwickler mit Commit-Rechten wie viele Commits durchgeführt haben. Zwar lässt dies keine Rückschlüsse darauf zu, wie viel Code der jeweilige Entwickler tatsächlich beigesteuert oder wie viel Review-Mühen er sich gemacht hat; aber es es ist ein Indiz dafür, dass sich bestimmte Entwickler viel in das Projekt einbringen.</p>

<p>Die credativ GmbH versteht sich als Teil der Community vieler Open-Source-Projekte - so auch bei PostgreSQL. Dass dies ernst gemeint ist und in der Firma gelebt wird, zeigt sich so auch in der von Andrew Dunstan erstellten Statistik: von den aufgeführten Committern arbeiten gleich mehrere in den verschiedenen internationalen Büros von credativ: Michael Meskes, Joe Conway und davec, Dave Cramer. Dabei fehlen aber auch noch die Mitarbeiter von credativ, die selbst viel Code beisteuern, aber keine Commits vornehmen. So ist z.B. Bernd Helmle den Lesern dieses Blogs wegen seiner <a href="http://blog.credativ.com/de/postgresql/">umfangreichen Artikel zu PostgreSQL</a> nicht nur als Autor, sondern auch als Entwickler bestens bekannt, taucht aber in Andrews Statistik nicht auf.</p>

<p>Als Indiz bestätigt die Liste uns aber, dass die Bemühungen der Firma, aber auch die Verbundenheit unserer Mitarbeiter mit Open Source Früchte trägt. Wenn Ihr mehr über unser Open-Source-Engagement wissen wollt, hinterlasst einfach einen Kommentar. Falls Ihr euch für unser <a href="http://www.credativ.de/home/open-source-support-center/unser-support-angebot/">Open Source Support Angebot</a> interessiert, gibt es auch noch diverse andere <a href="http://www.credativ.de/home/uber-credativ/kontakt/">Kontaktmöglichkeiten</a>.</p>]]>
        
    </content>
</entry>

</feed>

