<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Kommentare zu: &#8230;und das Leben von SQL geht weiter &#8230; jetzt wird es schneller!</title>
	<atom:link href="http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/</link>
	<description>PhpHatesMe, but that&#039;s ok!</description>
	<lastBuildDate>Mon, 06 Feb 2012 20:59:49 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Von: Jochen</title>
		<link>http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/comment-page-1/#comment-38252</link>
		<dc:creator>Jochen</dc:creator>
		<pubDate>Sun, 06 Dec 2009 17:50:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.phphatesme.com/?p=4663#comment-38252</guid>
		<description>Klasse Artikel! Und auch ich würde mich über ein Follow-Up in Sachen Ausnahmen &amp; Co. freuen.

Thanks a lot!</description>
		<content:encoded><![CDATA[<p>Klasse Artikel! Und auch ich würde mich über ein Follow-Up in Sachen Ausnahmen &amp; Co. freuen.</p>
<p>Thanks a lot!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Patrick</title>
		<link>http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/comment-page-1/#comment-38092</link>
		<dc:creator>Patrick</dc:creator>
		<pubDate>Thu, 03 Dec 2009 14:28:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.phphatesme.com/?p=4663#comment-38092</guid>
		<description>@Tom

&gt; Als sie das gemerkt haben mussten sie in der Folge 4 
&gt; Wochen lang den Betrieb komplett stilllegen, das Lager 
&gt; manuell leer räumen und alles neu einlagern. Die Pointe 
&gt; ist: sie hatten die Software eigentlich deshalb intern 
&gt; entwickelt, um Geld zu sparen, weil ihnen der externe 
&gt; Dienstleister zu teuer war.

lol. Eine teure Lektion. Aber das wird wohl auch recht häufig passieren, wenn ich bedenke, wie viele Firmen lieber eigenes Personal für Dinge einstellen, die ein Dienstleister womöglich 10x zuverlässiger (da mehr Erfahrung) erledigen kann - auch wenns eventuell erstmal teurer ist als eigenes Personal...

Naja, ich bin mal gespannt, was da noch alles möglich ist. Ich habe, zugegeben, keinerlei derartige Großprojekte bisher gehabt - bin da auch nicht scharf drauf - aber so, wie du des darlegst, Tom, ist das für mich dann jedenfalls auch schlüssig.</description>
		<content:encoded><![CDATA[<p>@Tom</p>
<p>&gt; Als sie das gemerkt haben mussten sie in der Folge 4<br />
&gt; Wochen lang den Betrieb komplett stilllegen, das Lager<br />
&gt; manuell leer räumen und alles neu einlagern. Die Pointe<br />
&gt; ist: sie hatten die Software eigentlich deshalb intern<br />
&gt; entwickelt, um Geld zu sparen, weil ihnen der externe<br />
&gt; Dienstleister zu teuer war.</p>
<p>lol. Eine teure Lektion. Aber das wird wohl auch recht häufig passieren, wenn ich bedenke, wie viele Firmen lieber eigenes Personal für Dinge einstellen, die ein Dienstleister womöglich 10x zuverlässiger (da mehr Erfahrung) erledigen kann &#8211; auch wenns eventuell erstmal teurer ist als eigenes Personal&#8230;</p>
<p>Naja, ich bin mal gespannt, was da noch alles möglich ist. Ich habe, zugegeben, keinerlei derartige Großprojekte bisher gehabt &#8211; bin da auch nicht scharf drauf &#8211; aber so, wie du des darlegst, Tom, ist das für mich dann jedenfalls auch schlüssig.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Wolfgang Gassler</title>
		<link>http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/comment-page-1/#comment-38090</link>
		<dc:creator>Wolfgang Gassler</dc:creator>
		<pubDate>Thu, 03 Dec 2009 13:03:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.phphatesme.com/?p=4663#comment-38090</guid>
		<description>@Tom: ja, intelligente software kann fehler machen, menschen können fehler machen -&gt; der idealweg ist das ganze zu vereinen und sich gegenseitig zu helfen. vorschläge und hilfe für den admin finde ich daher sehr gut....

und wenn es auch nur so kleine dinge wie die analyse procedure von mysql sind: &quot;SELECT * FROM my_table PROCEDURE ANALYSE()&quot;</description>
		<content:encoded><![CDATA[<p>@Tom: ja, intelligente software kann fehler machen, menschen können fehler machen -&gt; der idealweg ist das ganze zu vereinen und sich gegenseitig zu helfen. vorschläge und hilfe für den admin finde ich daher sehr gut&#8230;.</p>
<p>und wenn es auch nur so kleine dinge wie die analyse procedure von mysql sind: &#8220;SELECT * FROM my_table PROCEDURE ANALYSE()&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tom</title>
		<link>http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/comment-page-1/#comment-38087</link>
		<dc:creator>Tom</dc:creator>
		<pubDate>Thu, 03 Dec 2009 11:07:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.phphatesme.com/?p=4663#comment-38087</guid>
		<description>@Wolfgang Gassler übrigens: ein Kollege erzählte ein Kunde hatte es schon mal geschafft, dass die eigene IT-Abteilung die Datenbank eines Hochregallagers dazu gebracht hat nach und nach schleichend ihren Bestand zu vergessen.
Nach einer Weile haben die Lagerroboter sich dann einfach geweigert Ware zu holen, weil sie nicht wussten wo die Paletten liegen. Erst nur ein paar Paletten, dann immer häufiger.

Als sie das gemerkt haben mussten sie in der Folge 4 Wochen lang den Betrieb komplett stilllegen, das Lager manuell leer räumen und alles neu einlagern. Die Pointe ist: sie hatten die Software eigentlich deshalb intern entwickelt, um Geld zu sparen, weil ihnen der externe Dienstleister zu teuer war.</description>
		<content:encoded><![CDATA[<p>@Wolfgang Gassler übrigens: ein Kollege erzählte ein Kunde hatte es schon mal geschafft, dass die eigene IT-Abteilung die Datenbank eines Hochregallagers dazu gebracht hat nach und nach schleichend ihren Bestand zu vergessen.<br />
Nach einer Weile haben die Lagerroboter sich dann einfach geweigert Ware zu holen, weil sie nicht wussten wo die Paletten liegen. Erst nur ein paar Paletten, dann immer häufiger.</p>
<p>Als sie das gemerkt haben mussten sie in der Folge 4 Wochen lang den Betrieb komplett stilllegen, das Lager manuell leer räumen und alles neu einlagern. Die Pointe ist: sie hatten die Software eigentlich deshalb intern entwickelt, um Geld zu sparen, weil ihnen der externe Dienstleister zu teuer war.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Tom</title>
		<link>http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/comment-page-1/#comment-38086</link>
		<dc:creator>Tom</dc:creator>
		<pubDate>Thu, 03 Dec 2009 10:55:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.phphatesme.com/?p=4663#comment-38086</guid>
		<description>@Wolfgang Gassler und @Patrick gedacht ist es zunächst als Vorschlagsfunktion.
Wir wollen, dass der Entwickler einen Belastungstest durchführen kann und anschließend das Programm ihm selbst sagt, wo es gerade weh tut.

Der Vorteil der automatischen Umsetzung liegt aber auf der Hand: der Entwickler kann nicht immer vorhersehen wo die größte Last auftreten wird und wann. Nehmen wir eine Lastspitze auf einem bestimmten Subsystem (vielleicht als Folge einer DOS-Attacke): die Datenbank optimiert sich dann selbst um die Spitze besser bewältigen zu können.

Natürlich muss das System nach der Lastspitze wieder zurück in den Ausgangszustand. Die Frage wie schnell das passiert ist aber nicht Pro- oder Kontra der Technik an sich, sondern eine Frage, wie intelligent die Technik implementiert ist.

Aber das beschriebene Problem hat man auch OHNE die Optimierung. Montagmorgens ist die Datenbank nach den Cronjobs vom Wochenende auch so schon langsamer, weil die Caches ja ebenfalls nicht mehr aktuell sind bzw. die falschen Dinge im Cache liegen.
Die Datenbank muss darauf schnell reagieren können - nichts anderes erwartet man bei anderen Techniken zur Selbstverwaltung auch.

Ein weiteres Beispiel: Wir hatten am WE eine IBM DB2 Datenbank synchronisiert und automatisiert mit neuen Daten befüllt. Der Prozess, der Freitagabend gestartet worden war, lief wider erwarten montags um 8 Uhr immer noch.
Was war passiert? DB2 hat den existierenden Index nicht verwendet weil es keine aktuellen Statistiken hatte. Außerdem hatte es permanent versucht nach jedem neu eingefügten Datensatz alle Indexe zu aktualisieren, was die Zeit für die Inserts und Updates vervielfachte.
Wir mussten die Skripte so anpassen, dass vor dem Cronjob alle Indexe gelöscht und anschließend neu angelegt werden. Danach lief alles wieder normal - zumindest solange der Cronjob nicht wegen eines Fehlers zwischendurch abbrach.

Anderes Beispiel: ein Mitarbeiter hatte am Wochenende ein Data-Mining auf einer PostgreSQL Datenbank durchgeführt via Remote-Zugriff. Dabei hat er eine lang-laufende Abfrage gestartet, die sich in einer Endlosschleife verfangen hatte. Als er merkte, dass etwas schief läuft, hat er den Client einfach geschlossen, die Session auf dem Server aber nicht beendet. Als folge davon lief seine Datenbankabfrage weiter.
Die Deadlock-Erkennung auf PostgreSQL hat versagt. Die Datenbank hat die Query nicht automatisch beendet (Standardkonfiguration). Die laufende Abfrage sperrte mehrere Tabellen. Dadurch wurden am Wochenende die Reports nicht erzeugt. Am Montag morgens stand der ganze Betrieb still, weil die Verkaufszahlen nicht da waren und der Datenbank Anfragen entweder nur träge oder gar nicht entgegen nahm.
In der Folge haben wir PostgreSQL rekonfiguriert und alle Queries, die länger als 6 Stunden liefen, automatisiert abgeschossen. Wenn nun wieder jemand den Server am Freitag lahmlegte so ging uns nur noch das Update vom Samstag verloren, dass dann vom Update am Sonntag überschrieben wurde, sodass Montag wieder alles lief. Zumindest solange niemand den Server am Montag nochmal lahmlegte.

Der Datenbank-Admin wird also in nächster Zeit nicht überflüssig werden. Aber die Arbeit etwas erleichtern wollen wir ihm schon ;)
Und dabei geht es mir vor allem um die Frage: was kann der Entwickler im Vorfeld tun und wie kann die Datenbank-API ihn dabei unterstützen.</description>
		<content:encoded><![CDATA[<p>@Wolfgang Gassler und @Patrick gedacht ist es zunächst als Vorschlagsfunktion.<br />
Wir wollen, dass der Entwickler einen Belastungstest durchführen kann und anschließend das Programm ihm selbst sagt, wo es gerade weh tut.</p>
<p>Der Vorteil der automatischen Umsetzung liegt aber auf der Hand: der Entwickler kann nicht immer vorhersehen wo die größte Last auftreten wird und wann. Nehmen wir eine Lastspitze auf einem bestimmten Subsystem (vielleicht als Folge einer DOS-Attacke): die Datenbank optimiert sich dann selbst um die Spitze besser bewältigen zu können.</p>
<p>Natürlich muss das System nach der Lastspitze wieder zurück in den Ausgangszustand. Die Frage wie schnell das passiert ist aber nicht Pro- oder Kontra der Technik an sich, sondern eine Frage, wie intelligent die Technik implementiert ist.</p>
<p>Aber das beschriebene Problem hat man auch OHNE die Optimierung. Montagmorgens ist die Datenbank nach den Cronjobs vom Wochenende auch so schon langsamer, weil die Caches ja ebenfalls nicht mehr aktuell sind bzw. die falschen Dinge im Cache liegen.<br />
Die Datenbank muss darauf schnell reagieren können &#8211; nichts anderes erwartet man bei anderen Techniken zur Selbstverwaltung auch.</p>
<p>Ein weiteres Beispiel: Wir hatten am WE eine IBM DB2 Datenbank synchronisiert und automatisiert mit neuen Daten befüllt. Der Prozess, der Freitagabend gestartet worden war, lief wider erwarten montags um 8 Uhr immer noch.<br />
Was war passiert? DB2 hat den existierenden Index nicht verwendet weil es keine aktuellen Statistiken hatte. Außerdem hatte es permanent versucht nach jedem neu eingefügten Datensatz alle Indexe zu aktualisieren, was die Zeit für die Inserts und Updates vervielfachte.<br />
Wir mussten die Skripte so anpassen, dass vor dem Cronjob alle Indexe gelöscht und anschließend neu angelegt werden. Danach lief alles wieder normal &#8211; zumindest solange der Cronjob nicht wegen eines Fehlers zwischendurch abbrach.</p>
<p>Anderes Beispiel: ein Mitarbeiter hatte am Wochenende ein Data-Mining auf einer PostgreSQL Datenbank durchgeführt via Remote-Zugriff. Dabei hat er eine lang-laufende Abfrage gestartet, die sich in einer Endlosschleife verfangen hatte. Als er merkte, dass etwas schief läuft, hat er den Client einfach geschlossen, die Session auf dem Server aber nicht beendet. Als folge davon lief seine Datenbankabfrage weiter.<br />
Die Deadlock-Erkennung auf PostgreSQL hat versagt. Die Datenbank hat die Query nicht automatisch beendet (Standardkonfiguration). Die laufende Abfrage sperrte mehrere Tabellen. Dadurch wurden am Wochenende die Reports nicht erzeugt. Am Montag morgens stand der ganze Betrieb still, weil die Verkaufszahlen nicht da waren und der Datenbank Anfragen entweder nur träge oder gar nicht entgegen nahm.<br />
In der Folge haben wir PostgreSQL rekonfiguriert und alle Queries, die länger als 6 Stunden liefen, automatisiert abgeschossen. Wenn nun wieder jemand den Server am Freitag lahmlegte so ging uns nur noch das Update vom Samstag verloren, dass dann vom Update am Sonntag überschrieben wurde, sodass Montag wieder alles lief. Zumindest solange niemand den Server am Montag nochmal lahmlegte.</p>
<p>Der Datenbank-Admin wird also in nächster Zeit nicht überflüssig werden. Aber die Arbeit etwas erleichtern wollen wir ihm schon <img src='http://www.phphatesme.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Und dabei geht es mir vor allem um die Frage: was kann der Entwickler im Vorfeld tun und wie kann die Datenbank-API ihn dabei unterstützen.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Sebastian</title>
		<link>http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/comment-page-1/#comment-38060</link>
		<dc:creator>Sebastian</dc:creator>
		<pubDate>Wed, 02 Dec 2009 21:07:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.phphatesme.com/?p=4663#comment-38060</guid>
		<description>Verwende als Framework CakePHP und kann sagen, dass dort das Query Building echt gut gelöst ist, aber allgemein kann man sagen, dass eine der größten Vorteile von Cake ORM und Models sind, dass passt alles wunderbar.</description>
		<content:encoded><![CDATA[<p>Verwende als Framework CakePHP und kann sagen, dass dort das Query Building echt gut gelöst ist, aber allgemein kann man sagen, dass eine der größten Vorteile von Cake ORM und Models sind, dass passt alles wunderbar.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Ulf Wendel</title>
		<link>http://www.phphatesme.com/blog/mysql/und-das-leben-von-sql-geht-weiter-jetzt-wird-es-schneller/comment-page-1/#comment-38059</link>
		<dc:creator>Ulf Wendel</dc:creator>
		<pubDate>Wed, 02 Dec 2009 21:06:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.phphatesme.com/?p=4663#comment-38059</guid>
		<description>BTW, die MySQL C-API kann Dir sagen wann eine Query als langsam erkannt wurde. Diese Funktionalität wird durch ext/mysqli auch PHP-Anwendern zur Verfügung gestellt - http://blog.ulf-wendel.de/?p=272 . Warum ein Teil der von C-API für diese Aufgabe benutzten Konstanten nicht sauber dokumentiert ist, konnte mir das Doku-Team auch nicht sagen...</description>
		<content:encoded><![CDATA[<p>BTW, die MySQL C-API kann Dir sagen wann eine Query als langsam erkannt wurde. Diese Funktionalität wird durch ext/mysqli auch PHP-Anwendern zur Verfügung gestellt &#8211; <a href="http://blog.ulf-wendel.de/?p=272" rel="nofollow">http://blog.ulf-wendel.de/?p=272</a> . Warum ein Teil der von C-API für diese Aufgabe benutzten Konstanten nicht sauber dokumentiert ist, konnte mir das Doku-Team auch nicht sagen&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

